كيف تعمل مع العديد من إصدارات الجمعية في المجلدات الخاصة باستخدام التكوين?
-
10-07-2019 - |
سؤال
لدي سيناريو حيث لديك إصدارات متعددة من نفس الجمعية التي لا تحتاج إلى تخزين في تطبيق المجلدات الخاصة في الهيكل مثل هذا:
.\My.dll // latest version, say 1.1.3.0
.\v1.1.1\My.dll // version 1.1.1.0
.\v1.1.2\My.dll // version 1.1.2.0
مشكلتي هي أن .وقت تشغيل Net, عندما سئل عن واحدة من الإصدارات القديمة ، يجد دائما أحدث نسخة ثم فشل بسبب بناء عدد تطابق قبل محاولة تحقيق أفضل مباراة.
جمعيات قوية اسمه و أنا باستخدام هذا التكوين في التطبيق.التكوين:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="My"
publicKeyToken="xxxxxxxx" culture="netural" />
<bindingRedirect oldVersion="1.0.0.0-1.1.1.0"
newVersion="1.1.1.0" />
<bindingRedirect oldVersion="1.1.3.0-1.1.65535.65535"
newVersion="1.1.3.0" />
<codeBase version="1.1.1.0" href="v1.1.1\My.dll" />
<codeBase version="1.1.2.0" href="v1.1.2\My.dll" />
</dependentAssembly>
</assemblyBinding>
</runtime>
نأمل هناك شيء فاتني هنا.أعرف أن هذا يمكن أن يكون حلها في كود عن طريق الاستماع AppDomain.AssemblyResolve الحدث ولكن أنا أحب أن أرى نقية التكوين الحل.
تحديث: إذا وجدت علة ، كينت يفترض خطأ مطبعي. culture="netural"
يجب أن يكون culture="neutral"
.وقال دون الخطأ المطبعي, حل يعمل كبيرة عند استخدام codeBase
العناصر التي تشير إلى كل إصدار.السبر عنصر لا يبدو أن العمل في هذا السيناريو.
المحلول
دون رؤية حل كامل ، لا أستطيع إلا أن نفترض أن لديك خطأ مطبعي في مكان ما.لقد جربت هذا بنفسي مع مساعدة من fuslogvw, لقد كنت قادرا على الحصول على عمل.
لدي ثلاثة إصدارات الجمعية و تطبيق مضيعة المراجع نسخة قديمة من ذلك في دليل الإخراج.CLR يجد الموجهات و codeBase دخول كميات الصحيح (كبار السن) الإصدار.
يمكنني أن أرسل لك الحل إذا توفر عنوان بريد إلكتروني.
كينت
نصائح أخرى
يمكنك استخدام probepath?نحن نستخدم هذه القوة غير المنضبط (مثلا ، الطرف الثالث محللات - مثل MSTest) للبحث عن الجمعيات حيث يجب لها أن تكون.
<?xml version ="1.0"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="v1.1.1;v1.1.2;"/>
</assemblyBinding>
</runtime>
</configuration>
انظر هنا للحصول على مزيد من المعلومات