Намагаюсь виконати деякі модульні тести в додатку C# Windows Forms (Visual Studio 2005) і отримую наступну помилку:
System.IO.FileLoadException: Не вдалося завантажити файл або збірку 'Utility, Version=1.2.0.200, Culture=neutral, PublicKeyToken=764d581291d764f7' або одну з її залежностей. Визначення маніфесту знайденої збірки не збігається з посиланням на збірку. (Виняток з HRESULT: 0x80131040)**.
в x.Foo.FooGO()
at x.Foo.Foo2(String groupName_) in Foo.cs:line 123
at x.Foo.UnitTests.FooTests.TestFoo() in FooTests.cs:line 98**
System.IO.FileLoadException: Не вдалося завантажити файл або збірку 'Utility, Version=1.2.0.203, Culture=neutral, PublicKeyToken=764d581291d764f7' або одну з її залежностей. Визначення маніфесту знайденої збірки не збігається з посиланням на збірку. (Виняток з HRESULT: 0x80131040)
Дивлюся в своїх посиланнях, а у мене є тільки посилання на Utility version 1.2.0.203
(інше старе).
Будь-які пропозиції щодо того, як мені з'ясувати, що намагається посилатися на цю стару версію цього файлу DLL?
Крім того, я не думаю, що у мене навіть є ця стара збірка на моєму жорсткому диску. Чи є якийсь інструмент для пошуку цієї старої версії збірки?
Завантажувач .NET збірки не зміг знайти 1.2.0.203, але знайшов 1.2.0.200. Ця збірка не відповідає тому, що було запитано, і тому ви отримуєте цю помилку. Простими словами, він не може знайти збірку, на яку було зроблено посилання. Переконайтеся, що він може знайти потрібну збірку, помістивши її в GAC або в шлях до програми. Також див. http://blogs.msdn.com/junfeng/archive/2004/03/25/95826.aspx.
Ви можете зробити кілька речей, щоб усунути цю проблему. По-перше, скористайтеся пошуком файлів Windows для пошуку вашої збірки (.dll) на жорсткому диску. Після того, як ви отримаєте список результатів, виконайте команду "Перегляд" - "Вибрати відомості...", а потім перевірте "Версію файлу". Це відобразить номер версії в списку результатів, так що ви зможете побачити, звідки може бути стара версія.
Також, як сказав Ларс, перевірте свій GAC, щоб побачити, яка версія там вказана. У цій статті Microsoft зазначено, що збірки, знайдені в GAC, не копіюються локально під час збирання, тому вам може знадобитися видалити стару версію, перш ніж виконувати повну перезбірку. (Див. мою відповідь на це питання для отримання вказівок щодо створення пакетного файлу, який зробить це за вас)
Якщо ви все ще не можете з'ясувати, звідки береться стара версія, ви можете скористатися програмою fuslogvw.exe, яка постачається з Visual Studio, щоб отримати більше інформації про помилки прив'язки. Microsoft має інформацію про цей інструмент тут. Зауважте, що вам доведеться увімкнути ведення журналу, встановивши ключ реєстру HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\EnableLog
у значення 1.
Я щойно зіткнувся з цією проблемою, і проблема полягала в тому, що у мене була стара копія .dll в моєму каталозі налагодження програми. Можливо, ви також захочете перевірити там (замість GAC), щоб побачити, чи бачите ви його.