c# - لا يتطابق تعريف الظاهر في التجميع الموجود مع مرجع التجميع




reference compiler-errors (20)

أحاول تشغيل بعض اختبارات الوحدة في تطبيق C # Windows Forms (Visual Studio 2005) ، وأحصل على الخطأ التالي:

System.IO.FileLoadException: تعذر تحميل الملف أو التجميع 'الأداة المساعدة ، الإصدار = 1.2.0.200 ، الثقافة = محايدة ، PublicKeyToken = 764d581291d764f7' أو أحد تبعياتها. لا يتطابق تعريف الظاهر في التجميع الموجود مع مرجع التجميع. (استثناء من HRESULT: 0x80131040) **

في x.Foo.FooGO ()

في x.Foo.Foo2 (String groupName_) في Foo.cs: سطر 123

في x.Foo.UnitTests.FooTests.TestFoo () في FooTests.cs: سطر 98 **

System.IO.FileLoadException: تعذر تحميل الملف أو التجميع 'الأداة المساعدة ، الإصدار = 1.2.0.203 ، الثقافة = محايدة ، PublicKeyToken = 764d581291d764f7' أو أحد تبعياتها. لا يتطابق تعريف الظاهر في التجميع الموجود مع مرجع التجميع. (استثناء من HRESULT: 0x80131040)

أبحث في المراجع الخاصة بي ، ولدي فقط إشارة إلى Utility version 1.2.0.203 (الآخر هو القديم).

أي اقتراحات حول كيف يمكنني معرفة ما تحاول الإشارة إلى هذا الإصدار القديم من ملف DLL هذا؟

الى جانب ذلك ، لا أعتقد أن لدي حتى هذا التجمع القديم على القرص الصلب. هل هناك أي أداة للبحث عن هذا الإصدار القديم إصدارها؟


أضفت حزمة NuGet ، فقط لإدراك جزء الصندوق الأسود من طلبي كان يشير إلى نسخة قديمة من المكتبة.

أزلت الحزمة وأشرت إلى ملف DLL الثابت الخاص بالإصدار الأقدم ، ولكن لم يتم تحديث ملف web.config أبدًا من:

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" />
    <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="6.0.0.0" />
</dependentAssembly>

إلى ما كان يجب أن تعود إليه عند إلغاء تثبيت الحزمة:

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" />
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.5.0.0" />
</dependentAssembly>

أنا فقط ركض عبر هذه المسألة وكانت المشكلة كان لدي نسخة قديمة من. دلل في الدليل debug التطبيق الخاص بي. قد ترغب أيضًا في التحقق من هناك (بدلاً من GAC) لمعرفة ما إذا كنت تراه.


أود فقط أن أضيف أنني كنت أنشئ مشروعًا أساسيًا ASP.NET MVC 4 وأضفت DotNetOpenAuth.AspNet عبر NuGet. نتج عن هذا الخطأ نفسه بعد الرجوع إلى ملف DLL غير متطابق لـ Microsoft.Web.WebPages.OAuth.

لإصلاحها فعلت Update-Package وتنظيف الحل لإعادة بناء كاملة.

هذا العمل بالنسبة لي ، وهو نوع من طريقة كسول ، ولكن الوقت هو المال :-P


إذا كنت تستخدم Visual Studio ، فجرّب "الحل النظيف" ثم أعد إنشاء المشروع.


إليك طريقي لإصلاح هذه المشكلة.

  1. من رسالة الاستثناء ، احصل على اسم مكتبة "مشكلة" ورقم الإصدار "المتوقع".

  1. العثور على كافة نسخ ذلك .dll في الحل الخاص بك ، انقر بزر الماوس الأيمن فوقها ثم تحقق أي إصدار من .dll.

حسنا ، في هذا المثال ، بلدي .dll هو بالتأكيد 2.0.5022.0 (وبالتالي فإن رقم إصدار استثناء خاطئ).

  1. ابحث عن رقم الإصدار الذي تم عرضه في رسالة الاستثناء في كافة ملفات .csproj في الحل الخاص بك. استبدال رقم الإصدار هذا مع الرقم الفعلي من DLL.

لذا ، في هذا المثال ، سأحل محل هذا ...

<Reference Include="DocumentFormat.OpenXml, Version=2.5.5631.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />

... مع هذا...

<Reference Include="DocumentFormat.OpenXml, Version=2.0.5022.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />

تم إنجاز المهمة !


المنجم كان وضعا مشابها جدا لهذا المنصب من قبل ناثان بيدفورد ولكن مع لمسة طفيفة. مشروع بلدي أيضا أشارت إلى تغيير DLL بطريقتين. 1) مباشرة و 2) بشكل غير مباشر عن طريق الإشارة إلى مكون (مكتبة الصف) التي كان لها في حد ذاته إشارة إلى تغيير دلل. الآن مشروع الاستوديو المرئي للمكون (2) المشار إليها في الإصدار الصحيح من دلل تغير. ومع ذلك ، لم يتم تغيير رقم إصدار compnent نفسه. ونتيجة لذلك فشل تثبيت الإصدار الجديد من المشروع في استبدال هذا المكون على جهاز العميل.

النتيجة النهائية: يشير المرجع المباشر (1) والمرجع غير المباشر (2) إلى إصدارات مختلفة من dll الذي تم تغييره في جهاز العميل. على جهاز ديف بلدي عملت على ما يرام.

القرار: إزالة التطبيق ؛ حذف كافة DLLS من مجلد التطبيق؛ إعادة تثبيت. بسيط كما في حالتي.


بالنسبة لي تكوين تغطية التعليمات البرمجية في ملف "Local.testtesttings" "تسبب" المشكلة. لقد نسيت تحديث الملفات التي تم الإشارة إليها هناك.


تلقيت رسالة الخطأ هذه بسبب الإشارة إلى تجميع له نفس الاسم مثل التجميع الذي كنت أبنيه.

هذا تجميع ولكن الكتابة فوق المجموعة المشار إليها مع تجميع المشاريع الحالية - مما تسبب في الخطأ.

لإصلاحها قمت بتغيير اسم المشروع ، وخصائص التجميع المتاحة من خلال النقر بزر الماوس الأيمن على المشروع واختيار "خصائص".


حصلت على نفس الخطأ ... في حالتي تم حلها على النحو التالي:

  • في البداية عند تثبيت التطبيق ، استخدم الأشخاص هنا Microsoft Enterprise Library 4.1 في التطبيق.
  • في الأسبوع السابق تم تنسيق الجهاز الخاص بي & بعد ذلك اليوم عندما قمت ببناء هذا التطبيق ثم أعطاني خطأ أن تجميع مكتبة المؤسسة مفقود.
  • ثم قمت بتثبيت Microsoft Enterprise Library 5.0 التي حصلت عليها على Google كأول إدخال بحث.
  • ثم عندما بنيت التطبيق ثم أعطاني الخطأ أعلاه أي تعريف البيان التجميعي الموجود لا يتطابق مع مرجع التجميع.
  • بعد الكثير من أعمال البحث والتحليل ، وجدت أن هذا التطبيق كان يشير إلى 4.1.0.0 وكان DLL في المجلد bin من الإصدار 5.0.0.0
  • ما فعلته هو ثم قمت بتثبيت مكتبة Microsoft Enterprise 4.1.
  • تمت إزالة المرجع السابق (5.0) وإضافة المرجع 4.0.
  • بنيت التطبيق و voila ... عملت.

حصلت على هذا الخطأ أثناء البناء على بناء الخدمة Team Foundation Server. اتضح أن لدي عدة مشاريع في حلّي باستخدام إصدارات مختلفة من نفس المكتبة المضافة مع NuGet. أزلت جميع الإصدارات القديمة مع NuGet وأضفت الجديد كمرجع للجميع.

يضع Team Foundation Server كافة ملفات DLL في دليل واحد ، ولا يمكن أن يكون هناك سوى ملف DLL واحد لاسم معين في وقت معين.


في حالتي ، حدث هذا الخطأ أثناء تشغيل تطبيق ASP.NET. كان الحل هو:

  1. احذف مجلدات obj و bin في مجلد المشروع

لم تنجح عملية التنظيف ، ولم تنجح عملية إعادة البناء ، وكانت جميع المراجع على ما يرام ، ولكنها لم تكن تكتب إحدى المكتبات. بعد حذف هذه الدلائل ، كل شيء يعمل على أكمل وجه.


في حالتي كان إصدار قديم من DLL في C: \ WINDOWS \ Microsoft.NET \ Framework \ ~ \ Temporary ASP.NET Files \ directory. يمكنك إما حذف أو استبدال الإصدار القديم ، أو يمكنك إزالة وإرجاع المرجع إلى DLL في المشروع الخاص بك. بشكل أساسي ، في كلتا الحالتين سيتم إنشاء مؤشر جديد إلى ملفات ASP.NET المؤقتة.


في ملف AssemblyVersion في AssemblyInfo.cs ، استخدم رقم إصدار ثابت بدلاً من تحديد *. سيغير * رقم الإصدار في كل تصنيف. كانت هذه المسألة لهذا الاستثناء في حالتي.


قد يساعد حذف التجميع القديم من موقع المجلد ثم إضافة المرجع إلى التجميعات الجديدة.


لقد واجهت هذه المشكلة أثناء استخدام مستودع حزمة داخلي. لقد أضفت الحزمة الرئيسية إلى المستودع الداخلي ، ولكن ليس تبعيات الحزمة. تأكد من إضافة جميع الاعتماديات ، تبعيات التبعيات ، العودية وغيرها إلى مستودعك الداخلي أيضًا.


لقد واجهت هذه المشكلة بنفسي ، ووجدت أن هذه المسألة كانت مختلفة عما واجهه الآخرون.

كان لي اثنين من DLLs أن مشروعي الرئيسي كان الرجوع إلى: CompanyClasses.dll و CompanyControls.dll. كنت أتلقى خطأ في وقت التشغيل قائلاً:

تعذر تحميل الملف أو التجميع 'CompanyClasses أو الإصدار = 1.4.1.0 أو Culture = neutral أو PublicKeyToken = 045746ba8544160c' أو إحدى تبعياته. لا يتطابق تعريف الظاهر في التجميع الموجود مع مرجع التجميع

المشكلة ، لم يكن لدي أي ملفات CompanyClasses.dll على النظام الخاص بي مع رقم إصدار 1.4.1. لا شيء في GAC ، لا شيء في مجلدات التطبيق ... لا شيء في أي مكان. لقد بحثت في القرص الصلب بالكامل. جميع ملفات CompanyClasses.dll كان لي 1.4.2.

كانت المشكلة الحقيقية ، وجدت ، أن CompanyControls.dll المشار إليها بالإصدار 1.4.1 من CompanyClasses.dll. أنا فقط recompiled CompanyControls.dll (بعد وجود مرجع لها CompanyClasses.dll 1.4.2) ، وهذا الخطأ اختفت بالنسبة لي.


واجهت نفس المشكلة اليوم التي منعتني من إجراء "إضافة للهجرة" بعد إجراء تغييرات في "إطار عمل الكيان".

كان لديّ مشروعان في حلّي ، دعنا نسميهم "العميل" و "البيانات" - مشروع مكتبة الصفّية الذي أقيم نماذج وسياقات EF الخاصة بي. أشار العميل إلى مشروع البيانات.

قمت بتوقيع كلا المشروعين ، ثم قمت بعد ذلك بإجراء تغييرات على نموذج EF. بعد أن قمت بإزالة التوقيع ، تمكنت من إضافة عمليات الترحيل ، ثم قمت بعد ذلك بتوقيع المشروع من جديد.

آمل أن يكون هذا مفيدا لشخص ما ، مما يجنبهم الإحباط المطول ..


يتم إلقاء هذا الخطأ نفسه إذا حاولت الربط المتأخر باستخدام الانعكاس ، إذا كان التجميع الذي تلزمه للحصول على اسم قوي أو تم تغيير رمز المفتاح العام الخاص به. الخطأ هو نفسه على الرغم من عدم وجود أي تجميع موجود بالفعل مع رمز المفتاح العام المحدد.

تحتاج إلى إضافة رمز المفتاح العام الصحيح (يمكنك الحصول عليه باستخدام sn-t على dll) لحل الخطأ. أتمنى أن يساعدك هذا.


يعيد توجيه أي إصدار التجميع إلى الإصدار 3.1.0.0 التالية. لدينا برنامج نصي يقوم دائمًا بتحديث هذا المرجع في App.config ، لذا لن نضطر أبدًا للتعامل مع هذه المشكلة مرة أخرى.

من خلال الانعكاس يمكنك الحصول على التجميع publicKeyToken وإنشاء هذا الحظر من ملف .dll نفسه.

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
 <dependentAssembly>
    <assemblyIdentity name="Castle.Core" publicKeyToken="407dd0808d44fbdc" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="3.1.0.0" />
  </dependentAssembly>
</assemblyBinding>

لاحظ أنه بدون سمة مساحة اسم XML (xmlns) لن يعمل ذلك.


يمكن أن يحدث هذا أيضًا إذا كنت تستخدم كل من AssemblyInfo.cs مع علامات AssemblyVersion ويكون ملف .csproj الخاص بك بقيمة مختلفة. إما بمطابقة AssemblyInfo أو إزالة القسم كله ، فإن المشكلة تختفي.





version