Определение манифеста обнаруженной сборки не соответствует ссылке на сборку

625

Я пытаюсь запустить некоторые модульные тесты в приложении С# Windows Forms (Visual Studio 2005), и я получаю следующую ошибку:

System.IO.FileLoadException: Не удалось загрузить файл или сборку "Утилита, версия = 1.2.0.200, Culture = нейтральная, 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, Culture = neutral, PublicKeyToken = 764d581291d764f7" или одна из ее зависимостей. Расположенное определение манифеста сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)

Я смотрю в своих ссылках, и у меня есть только ссылка на Utility version 1.2.0.203 (другая старая).

Любые предложения о том, как я выясняю, что пытается ссылаться на эту старую версию этого DLL файла?

Кроме того, я не думаю, что у меня даже есть эта старая сборка на моем жестком диске. Есть ли какой-нибудь инструмент для поиска этой старой версии сборки?

Теги:
compiler-errors
dependencies
reference
version

44 ответа

416
Лучший ответ

загрузчик .NET Assembly не может найти 1.2.0.203, но нашел 1.2.0.200. Эта сборка не соответствует запросам, и поэтому вы получаете эту ошибку. Говоря простыми словами, он не может найти ссылку на сборку. Убедитесь, что он может найти нужную сборку, поместив ее в GAC или в путь приложения. Также см. http://blogs.msdn.com/junfeng/archive/2004/03/25/95826.aspx.

  • 15
    но когда я смотрю на ссылки проекта, он указывает на 1.2.0.203 .. кажется, ничто больше не указывает на 1.2.0.200
  • 114
    Точно - он ищет 1.2.0.203, но нашел 1.2.0.200. Узнайте, где находится этот файл, и замените его верной версией.
Показать ещё 13 комментариев
83

Вы можете сделать несколько вещей, чтобы устранить эту проблему. Во-первых, используйте поиск файлов Windows для поиска вашего жесткого диска для вашей сборки (DLL). После того, как у вас есть список результатов, сделайте View-> "Выбрать детали...", а затем отметьте "Версия файла". Это отобразит номер версии в списке результатов, чтобы вы могли видеть, откуда может исходить старая версия.

Кроме того, как сказал Ларс, проверьте свой GAC, чтобы узнать, какая версия там указана. В этой статье Microsoft говорится, что сборки, обнаруженные в GAC, не копируются локально во время сборки, поэтому вам может потребоваться удалить старую версию, прежде чем выполнять восстановление всех. (См. Мой ответ на этот вопрос для заметок о создании командного файла, чтобы сделать это для вас)

Если вы все еще не можете понять, откуда приходит старая версия, вы можете использовать приложение fuslogvw.exe, которое поставляется с Visual Studio, чтобы получить дополнительную информацию о сбоях привязки. Microsoft имеет информацию об этом инструменте здесь. Обратите внимание, что вам нужно включить ведение журнала, установив ключ реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\EnableLog в 1.

  • 16
    Не забывайте, что версия файла не является частью идентичности сборок. Версия сборки есть, но не обязательно должна совпадать с версией файла!
  • 0
    Если вы используете fuslogvw для служб, прочитайте blogs.msdn.com/b/junfeng/archive/2004/02/14/72912.aspx
Показать ещё 2 комментария
55

Я просто столкнулся с этой проблемой сам, и я обнаружил, что проблема была чем-то другим, чем то, с чем другие сталкивались.

У меня было две библиотеки DLL, на которые ссылался мой основной проект: CompanyClasses.dll и CompanyControls.dll. Я получал ошибку во время выполнения:

Не удалось загрузить файл или сборку 'CompanyClasses, Version = 1.4.1.0, Culture = нейтрально, PublicKeyToken = 045746ba8544160c 'или одной из его зависимостей. Расположенные определение манифеста сборки не соответствуют ссылочной ссылке

Проблема была, у меня не было файлов CompanyClasses.dll в моей системе с номером версии 1.4.1. Нет в GAC, ни одного в папках приложений... нигде нет. Я обыскал весь жесткий диск. Все файлы CompanyClasses.dll, которые у меня были, были 1.4.2.

Реальная проблема, я обнаружил, заключается в том, что CompanyControls.dll ссылается на версию 1.4.1 CompanyClasses.dll. Я просто перекомпилировал CompanyControls.dll(после того, как он ссылался на CompanyClasses.dll 1.4.2), и эта ошибка ушла для меня.

  • 1
    +1 Нечто подобное случилось со мной, когда одна из моих библиотек DLL ссылается на более старую версию Caliburn Micro.
  • 0
    я тоже, твой опыт зажег меня, где я должен смотреть, и я решил свою проблему.
Показать ещё 3 комментария
46

Следующий вариант перенаправляет любую версию сборки до версии 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) это не будет работать.

  • 1
    Это сработало для меня. Я изменил 'newVersion = 3.3.3' на 'newVersion = 3.1.0'
  • 0
    Лучше не идти по пути переплета, если вы можете избежать этого. Когда эта ошибка укусит вас, она будет сильно кусаться.
Показать ещё 2 комментария
35

Если вы используете Visual Studio, попробуйте "очистить решение", а затем перестройте проект.

  • 43
    Я был бы очень удивлен, если бы это имело значение ...
  • 8
    Это обычно решение для меня. Часто удаление bin и obj делают это. По сути, то, на что я ссылался, все еще сидит там, пытаясь удовлетворить то же самое требование. Например, старая версия - это то, на что я ссылался напрямую, а новая версия - на NuGet.
Показать ещё 3 комментария
32

Если вам не нужна версия, и вы просто хотите, чтобы ваше приложение запускалось, щелкните правой кнопкой мыши ссылку и установите "конкретная версия" в значение false. Другие решения не будут работать для меня. Изображение 1020

  • 3
    Этот параметр действует только во время компиляции . После того, как он скомпилирован, ему потребуется точно такая же версия сборки, с которой вы его скомпилировали. См. Stackoverflow.com/questions/24022134/…
22

Я просто столкнулся с этой проблемой, и проблема в том, что у меня была старая копия .dll в моем каталоге отладки приложений. Вы можете также проверить там (вместо GAC), чтобы увидеть, видите ли вы это.

  • 0
    Мы просто мигрировали на другой сервер, у которого возникла эта проблема, потому что мы сохраняем резервные копии. Сработало после удаления резервных копий. Спасибо :)
17

Я добавил пакет 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>
  • 0
    Я видел это, где, по крайней мере, для модуля Entity Framework, когда вы используете NuGet, если вы щелкнете правой кнопкой мыши по своему решению, перейдите в Управление пакетами NuGet для решения, затем Установленные пакеты> Все, выберите этот модуль, выберите Управление, вы можете как правило, снимите его с вашего проекта. Это должно очистить такие вещи без необходимости делать это вручную - при условии, что поставщик проявил должную осмотрительность. Но хороший улов, как, по-видимому, иногда они не делают, если вы так его удалили.
14

В моем случае это была старая версия DLL в каталоге C:\WINDOWS\Microsoft.NET\Framework\~\Temporary ASP.NET Files \. Вы можете либо удалить, либо заменить старую версию, либо удалить и добавить ссылку на DLL в свой проект. В принципе, в любом случае будет создан новый указатель на временные файлы ASP.NET.

  • 2
    Это сработало для меня, когда я закрыл Visual Studio, остановил IIS и удалил все временные файлы ASP.NET. Обратите внимание, что файлы могут находиться в папке Framework и Framework64 на 64-битной машине, а также в папках .NET 2.0 и 4.0!
  • 0
    Я использовал функцию поиска в меню «Пуск» Windows, чтобы найти все библиотеки DLL, созданные моим решением, а затем удалил всю партию, где бы они ни находились. Я мог бы сделать это без страха, потому что они должны создаваться только во время отладки в Visual Studio. Поскольку VS будет восстанавливать такие недостающие библиотеки DLL, и ничто за пределами моего решения не должно ссылаться на них, это была "безопасная" операция для меня.
13

В моем случае эта ошибка возникла при запуске приложения ASP.NET. Решение заключалось в следующем:

  • Удалите папки obj и bin в папке проекта

Чистый не работал, перестройка не работала, все ссылки были прекрасны, но он не писал одну из библиотек. После удаления этих каталогов все работает отлично.

  • 1
    Спасибо, Леви Фуллер. Этот ответ должен быть выше; для моей ситуации это было точно! Для меня эта ошибка началась, когда я сделал резервную копию своего web.config, и Visual Studio продолжала загружать этот файл конфигурации вместо фактической конфигурации, даже после того, как я удалила дубликатную копию. Это решило это. Благодарю.
  • 0
    У меня тоже работает. Все еще не уверены, почему это работает, хотя :(
8

Для нас проблема была вызвана чем-то другим. Файл лицензии для компонентов DevExpress включал две строки: одну для старой версии компонентов, которая не была установлена ​​на этом конкретном компьютере. Удаление старой версии из файла лицензии решило проблему.

Досадная часть состоит в том, что сообщение об ошибке не указывало на то, какая ссылка вызвала проблемы.

  • 2
    В моем случае после обновления до новой версии DevExpress файл .resx формы содержал ссылки на старую неустановленную версию библиотеки. Мне пришлось открыть .resx в представлении кода и либо исправить версию на новую или удалить недействительные записи.
5

Мина была очень похожей ситуации на посту Натана Бедфорда, но с небольшим завихрением. Мой проект также ссылался на измененную dll двумя способами. 1) Непосредственно и 2) Косвенно путем ссылки на компонент (библиотеку классов), который сам имел ссылку на измененную dll. Теперь мой проект Visual Studio для компонента (2) ссылается на правильную версию измененной dll. Однако номер версии самого compnent не был изменен. И в результате установка новой версии проекта не смогла заменить этот компонент на клиентской машине.

Конечный результат: Прямая ссылка (1) и Косвенная ссылка (2) указывали на разные версии измененной dll на клиентской машине. На моей машине dev она работала нормально.

Разрешение: удалить приложение; Удалите все DLLS из папки приложения; Переустановите. Простой, как в моем случае.

5

Эта точно такая же ошибка возникает, если вы пытаетесь заполучить привязку с использованием отражения, если сборка, для которой вы привязываетесь, получает сильное имя или имеет токен открытого ключа. Ошибка такая же, даже если на самом деле нет какой-либо сборки с указанным токеном открытого ключа.

Вам нужно добавить правильный токен открытого ключа (вы можете получить его с помощью sn -T на dll), чтобы устранить ошибку. Надеюсь, это поможет.

  • 1
    Пожалуйста, уточните - что такое "sn-T"? И куда мне добавить токен открытого ключа?
  • 3
    «sn.exe» - это инструмент, который поставляется вместе с Visual Studio, это инструмент командной строки, который можно запустить из командной строки Visual Studio. Просто запустите командную строку Visual Studio (из меню «Пуск»), перейдите в папку, содержащую вашу сборку, и введите «sn -T <assembly>», где <assembly> - полное имя библиотеки DLL. Это получает сборку «Токен» информации. Если у вас есть это, когда вы выполняете позднюю привязку с отражением, введите информацию о токене в строку идентификатора сборки (т. Е. «Assembly = MyAssembly.dll, Открытый ключ Token = <token guid>)
Показать ещё 1 комментарий
4

Я получил эту ошибку, опираясь на сборку Team Foundation Server. Оказалось, что у меня было несколько проектов в моем решении, используя разные версии той же библиотеки, добавленной в NuGet. Я удалил все старые версии с помощью NuGet и добавил новую в качестве ссылки для всех.

Team Foundation Server помещает все DLL файлы в один каталог, и в то же время может быть только один DLL файл определенного имени.

  • 0
    Другой способ - нажать «Управление пакетами NuGet для решения ...» и обновить тестовый проект и тестируемый проект до одной и той же (самой новой) версии.
4

Я хотел бы просто добавить, что я создавал базовый проект ASP.NET MVC 4 и добавлял DotNetOpenAuth.AspNet через NuGet. Это привело к той же ошибке после того, как я ссылался на несоответствующий DLL файл для Microsoft.Web.WebPages.OAuth.

Чтобы исправить это, я сделал Update-Package и очистил решение для полной перестройки.

Это сработало для меня и немного ленив, но время - деньги:-P

  • 1
    Подобный ответ для меня. Update-Package -reinstall переустанавливает все пакеты NuGet той же версии.
  • 1
    Это замечательно; спасибо за публикацию. Я попробовал все эти отличные предложения, но это было решением, которое помогло. Слава Богу за людей, которые все еще готовы опубликовать альтернативное решение, даже если их доступно 80
4

Все вышеизложенное меня смутило, однако это спасло мой день: http://runtingsproper.blogspot.in/2010/04/solved-located-assemblys-manifest.html

4

Мой app.config содержит

<bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.11.0"/>

для npgsql. Как-то на машине пользователя мой app.exe.config пропал. Я не уверен, что это был глупый пользователь, глюк установщика или пропавший антивирус. Замена файла решила проблему.

4

Моя проблема заключалась в том, чтобы копировать исходный код на новую машину, не перетягивая ни одну из ссылочных сборок.

Ничего, что я сделал, исправил ошибку, поэтому в спешке я полностью удалил каталог BIN. Восстановил исходный код, и с этого момента он работал.

4

Я позволю кому-то извлечь выгоду из моей глупой глупости. У меня есть некоторые зависимости к полностью отдельному приложению (позвольте этому App1). DLL из этого приложения 1 загружается в мое новое приложение (App2). Каждый раз, когда я делаю обновления в APP1, мне нужно создать новую dll и скопировать их в App2. Что ж., Я устал копировать и вставлять между двумя различными версиями App1, поэтому я просто добавил префикс "NEW_" для dll.

Ну., Я предполагаю, что процесс сборки сканирует папку /bin и когда он что-то неправильно соответствует, он заносит с тем же сообщением об ошибке, как указано выше. Я удалил свои "новые" версии и создал просто dandy.

3

очистить и перестроить решение, возможно, не заменит всю DLL из выходного каталога.

я предлагаю попробовать переименовать папку из "bin" в "oldbin" или "obj" в "oldobj",

а затем попробуйте снова создать свое молчание.

если вы используете сторонние DLL файлы, которые вам нужно будет скопировать во вновь созданную папку "bin" или "obj" после успешной сборки.

надеюсь, что это сработает для вас.

3

Мне конфигурация покрытия кода в файле "Local.testtesttings" "вызвала" проблему. Я забыл обновить файлы, на которые они ссылались.

3

Я просто нашел другую причину, по которой можно получить эту ошибку. Я очистил свой GAC из всех версий конкретной библиотеки и построил свой проект со ссылкой на определенную версию, развернутую вместе с исполняемым файлом. Когда я запускаю проект, я получил это исключение, ищущее более новую версию библиотеки.

Причина была политика издателя. Когда я удалил библиотечные версии из GAC, я забыл также удалить сборку политик издателя, чтобы вместо использования моей локально развернутой сборки сборщик сборок нашел политику издателя в GAC, которая рассказала ему о поиске более новой версии.

1

Я собираюсь взорвать все мысли прямо сейчас. , ,

Удалите все ссылки <assemblyBinding> из файла .config, а затем выполните эту команду из консоли диспетчера пакетов NuGet:

Get-Project -All | Add-BindingRedirect
  • 1
    Это правильно. Работает.
1

Просто удалив содержимое папки проекта bin и восстановив решение, решила мою проблему.

  • 1
    Ну что ты знаешь, ты только что помог мне избавиться от моих страданий
1

Здесь мой метод исправления этой проблемы.

  • Из сообщения об ошибке получите имя библиотеки проблем и номер ожидаемой версии.

Изображение 1021

  1. Найдите все копии.dll в своем решении, щелкните их правой кнопкой мыши и проверьте, какая именно версия .dll это.

Изображение 1022

Хорошо, поэтому в этом примере моя .dll определенно 2.0.5022.0 (поэтому номер версии Exception ошибочен).

  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" />

Задание выполнено!

  • 0
    Что делать, если мои файлы csproj не имеют ссылки на версию?
1

У меня такая же ошибка... В моем случае это было разрешено следующим образом:

  • Сначала, когда приложение было установлено, люди здесь использовали Microsoft Enterprise Library 4.1 в приложении.
  • На предыдущей неделе моя машина была отформатирована, и после этого сегодня, когда я построил это приложение, это дало мне ошибку, что сборка Enterprise Library отсутствует.
  • Затем я установил Microsoft Enterprise Library 5.0, который я получил в Google в качестве первой записи поиска.
  • Затем, когда я построил приложение, он дал мне вышеприведенную ошибку, то есть обнаруженное определение манифеста сборки не соответствует ссылке на сборку.
  • После большей части поиска и анализа я обнаружил, что приложение ссылается на 4.1.0.0, а DLL в папке bin - версии 5.0.0.0
  • Что я сделал, тогда я установил Microsoft Enterprise Library 4.1.
  • Удалена предыдущая ссылка (5.0) и добавлена ​​ссылка 4.0.
  • Построено приложение и вуаля... он работал.
1

В моем случае проблема была между стулом и клавиатурой :-)

Could not load file or assembly 'DotNetOpenAuth.Core, Version=4.0.0.0,
Culture=neutral, PublicKeyToken=2780ccd10d57b246' or one of its dependencies.
The located assembly manifest definition does not match the assembly reference.
(Exception from HRESULT: 0x80131040)

Две или несколько разных сборок хотели использовать другую версию библиотеки DotNetOpenAuth, и это не было бы проблемой. Кроме того, на моем локальном компьютере web.config автоматически обновлялся NuGet:

<dependentAssembly>
    <assemblyIdentity name="DotNetOpenAuth.AspNet" publicKeyToken="2780ccd10d57b246" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
    </dependentAssembly>
    <dependentAssembly>
        <assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
</dependentAssembly>

Затем я понял, что забыл скопировать/развернуть новый web.config на производственный сервер. Поэтому, если у вас есть ручной способ развертывания web.config, проверьте, обновляется ли он. Если у вас есть совершенно другой web.config для производственного сервера, вы должны объединить секцию dependAssembly в синхронизации после использования NuGet.

1

В ручном режиме удаление старой сборки из папки и добавление ссылки на новые сборки могут помочь.

0

Эта же ошибка возникла для меня в моем проекте модульных тестов и привела к неудачным тестам. Я дважды проверил, какая версия сборки я использовал в проводнике сборок, и проверил содержимое тегов runtime/зависимой сборки и понял, что на другую версию сборки, которую я использовал, все еще ссылаются. Поскольку это была единственная директива в моем тестовом проекте app.config, я просто попытался удалить весь файл app.config, перестроить решение, и это помогло! Нет больше ссылок на ошибки для меня :)

0

Имел ли подобная проблема, упомянутая в этой статье "Любые предложения о том, как я выясняю, что пытается ссылаться на эту старую версию этого DLL файла?"

Нужно, какая сборка по-прежнему относится к старому клиенту ODATA 6.15.0, ildasm помог мне сузить (без доступа к базовому коду, только через развернутый pkg на сервере).

Снимок экрана для быстрого сводки.

DeveloperPackge, если у вас нет ildasm.exe https://www.microsoft.com/net/download/visual-studio-sdks

Изображение 1023

0

Если вы когда-нибудь получите сообщение об ошибке "Определенное определение манифеста сборки не соответствует ссылке на сборку", и если вы обновили страницу Project> Manage NuGet Packages и Update в VS, первое, что вы могли бы сделать, это попытаться установить другую версию пакет после проверки версий с страницы галереи NuGet и выполнения следующей команды из консоли диспетчера пакетов:

PM> Install-Package YourPackageName -Version YourVersionNumber 
//Example
PM> Install-Package Microsoft.Extensions.FileProviders.Physical -Version 2.1.0

Хотя ответ напрямую не связан с рассматриваемым пакетом, и его попросили вернуться назад, он носит общий характер, по-прежнему актуальный и надеется, что он кому-то поможет.

0

Проблема со мной состояла в том, что в новой сборке были удалены старые dll, которые были удалены. Чтобы исправить это, я просто установил флажок для удаления дополнительных файлов в месте назначения при публикации. Удаление дополнительных файлов в пункте назначения

0

Вопрос уже имеет ответ, но если проблема возникла в пакете NuGet в разных версиях в том же решении, вы можете попробовать следующее.

Откройте диспетчер пакетов NuGet, так как вы видите, что моя версия проекта сервиса отличается от других.

Затем обновите проекты, содержащие старую версию вашего пакета.

Изображение 1024

0

ОК, еще один ответ. Я ранее создал свое приложение как 64 бит и соответствующим образом изменил выходной путь (Project/Properties/Build/Output/Output Path). Недавно я изменил приложение на 32 бит (x86), создав новый путь вывода. Я создал ярлык, где я думал, что скомпилированный .exe собирается. Независимо от того, что я изменил об источнике, он получил манифест, не соответствующий ошибке. Примерно через час разочарования мне довелось проверить дату/время файла .exe, увидев, что он старый, ссылаясь на старые .dll. Я компилировал приложение в старый каталог, и мой ярлык ссылался на нового. Изменен путь вывода туда, куда должен идти .exe, запустить ярлык и ошибка исчезла. (похлопывает лоб)

0

Это также может произойти, если вы используете как AssemblyInfo.cs с тегами AssemblyVersion, так и ваш .csproj файл имеет другое значение. При совпадении с AssemblyInfo или удалении раздела все вместе проблема исчезает.

0

У меня возникла эта проблема после того, как я начал использовать InstallShield. Несмотря на то, что порядок сборки показал, что проект установки был последним, он строил не в порядке.

Я исправил это, сделав каждый другой проект зависимым от него - это заставило установку построить последний и тем самым устранить несоответствие сборки. Надеюсь, это поможет.

0

У меня была такая же проблема сегодня, что помешало мне выполнить Add-Migration после внесения изменений в Entity Framework.

У меня было два проекта в моем решении, позвоните им "Клиент" и "Данные" - проект библиотеки классов, в котором хранятся мои модели и контекст EF. Клиент ссылался на проект данных.

Я подписал оба проекта, а затем внес изменения в EF-модель. После того, как я удалил подпись, я смог добавить миграции, а затем мог бы снова подписаться на проект.

Я надеюсь, что это может быть полезно для кого-то, избавив их от длительных разочарований.

0

Я столкнулся с этой проблемой при использовании внутреннего репозитория пакетов. Я добавил основной пакет во внутренний репозиторий, но не в зависимости от пакета. Убедитесь, что вы добавили все зависимости, зависимости зависимостей, рекурсивные и т.д. В свой внутренний репозиторий.

0

В вашей AssemblyVersion в файле AssemblyInfo.cs используйте номер фиксированной версии вместо указания *. * Будет изменен номер версии на каждой компиляции. Это было проблемой для этого исключения в моем случае.

0

Я столкнулся с такой же проблемой во время работы моих тестовых модулей.

В этой ошибке явно указано, что проблема заключается в следующем: когда мы пытаемся загрузить сборку, сборщик сборок.NET пытается загрузить свои упомянутые сборки на основе его данных манифеста (имя связанной сборки, токен открытого ключа, версия).

Чтобы проверить данные манифеста:

  1. Откройте командную строку Visual Studio,
  2. Введите "ildasm" и перетащите необходимую сборку в окно ILDASM и откройте представление MANIFEST. Иногда MANIFEST содержит одну сборку с двумя версиями старой версии, а также с новой версией (например, Utility, Version=1.2.0.200 и Utility, Version=1.2.0.203). На самом деле упомянутая сборка - Utility, Version=1.2.0.203(new version), но поскольку манифест содержит даже Utility, Version=1.2.0.200(old version), сборщик сборок.NET пытается выяснить этот файл с версией DLL, не удается найти и выдает исключение.

Чтобы решить эту проблему, просто перетащите каждую из зависимых от проекта сборок в окно ILDASM отдельно и проверьте, какая зависимая сборка содержит данные манифеста со старой версией сборки. Просто перестройте эту зависимую сборку и верните ее в свой проект.

  • 0
    К сожалению, я не могу перетащить сборку в ildasm, поскольку ошибка не позволяет собрать сборку ...
  • 0
    Это звучит многообещающе, но я не понимаю, как это исправить. Я нашел проект в моем решении, которое имеет две версии System.Web.Mvc. Когда я перестраиваю его, он все еще содержит две версии. Как мне избавиться от ссылки на старую версию?
0

У меня была аналогичная проблема при попытке обновить один DLL файл моего веб-сайта.

Эта ошибка произошла, когда я просто скопировал этот DLL файл в папку bin по FTP.

Я решил эту проблему:

  1. остановка веб-сайта;
  2. копирование необходимых файлов DLL/DLL;
  3. начало веб-сайта
0

Я получил это сообщение об ошибке из-за ссылки на сборку с тем же именем, что и сборка, которую я строю.

Это скомпилировано, но оно перезаписало ссылочную сборку с текущей сборкой проектов, что вызвало ошибку.

Чтобы исправить это, я изменил имя проекта и свойства сборки, доступные щелчком правой кнопки мыши по проекту и выбрав "Свойства".

-3

Щелкните правой кнопкой мыши ссылку в VS, установите свойство "Специфическая версия" на "Истина".

  • 4
    Я думаю, что вы имеете в виду ложь.
-3

Попробуйте добавить все, что отсутствует в глобальный кеш сборки.

  • 0
    На самом деле, я не получаю отрицательных голосов. Когда ссылка отсутствует, иногда добавление ее в GAC на самом деле является ответом, ПРИНИМАЯ на то, что ссылка указана. Я согласен, что этот ответ мог бы быть сформулирован как прямой ответ на вопрос автора, ссылка на то, как получить его в GAC, но давайте не будем наказывать за общий ответ - особенно с другим ответвлением здесь, уже. Я вижу SO как набор возможных ответов на тип ошибки, а не только на конкретный сценарий. И у них не более 50 представителей, поэтому они не могут добавлять комментарии к вопросу или сообщениям (что, по-моему, должно измениться).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню