Я пытаюсь запустить несколько модульных тестов в приложении C# Windows Forms (Visual Studio 2005) и получаю следующую ошибку:
System.IO.FileLoadException: Could not load file or assembly 'Utility, Version=1.2.0.200, Culture=neutral, PublicKeyToken=764d581291d764f7' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)**
at 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: Could not load file or assembly 'Utility, Version=1.2.0.203, Culture=neutral, PublicKeyToken=764d581291d764f7' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
Я смотрю свои ссылки, и у меня есть только ссылка на Utility version 1.2.0.203 (другой старый).
Есть какие-нибудь предложения о том, как мне выяснить, на что ссылается эта старая версия этого DLL-файла?
Кроме того, я не думаю, что у меня на жестком диске даже есть эта старая сборка. Есть ли какой-нибудь инструмент для поиска этой старой версионной сборки?





Загрузчик сборки .NET:
Эта сборка не соответствует запрошенной, поэтому вы получаете эту ошибку.
Проще говоря, он не может найти сборку, на которую была сделана ссылка. Убедитесь, что он может найти нужную сборку, поместив ее в GAC или в путь к приложению. Также см. https://docs.microsoft.com/archive/blogs/junfeng/the-located-assemblys-manifest-definition-with-name-xxx-dll-does-not-match-the-assembly-reference.
но когда я смотрю на ссылки на проект, он указывает на 1.2.0.203 ... похоже, больше ничего не указывает на 1.2.0.200
Точно - это Ищу для 1.2.0.203, но это нашел 1.2.0.200. Узнайте, где находится этот файл, и замените его нужной версией.
Я задал здесь аналогичный вопрос и получил рабочее решение: stackoverflow.com/questions/4187907/…
Проверьте версию ссылок, а затем посмотрите, совпадает ли она в packages.config и Web.config
подробности о запуске fuslogw, как указано в приведенной выше ссылке на блог JunFeng blogs.msdn.com/b/suzcook/archive/2003/05/29/57120.aspx
Могу ли я просто удалить содержимое GAC и восстановить эти файлы в моем проекте?
В моем случае в разделе «Сборка»> «Публикация» у меня был снят флажок «Удалить все существующие файлы перед публикацией», поэтому он использовал старую версию библиотеки DLL на сервере и не перезаписывал ее более новой версией, которая была у меня локально. Как только я проверил, что он отправил правильную версию в IIS и исправил ее.
Web.config не соответствует packages.confg, спасибо @ zdarsky.peter
У меня была эта ошибка с полностью отсутствующим пакетом nuget. Когда я перешел на nuget и установил пакет, ошибка была исправлена.
@Lars Truijens, как вы узнали, что он нашел 1.0.200? Я не вижу 200, упомянутого в трассировке стека OP?
@ OnlineUser02094: Об этом буквально говорится в сообщении об исключении: Version = 1.2.0.200
@lara Truijens ах да! Не видел этого
Это сообщение меня каждый раз смущает. Вроде написано наоборот. Я ожидал, что он будет жаловаться на версию, которую вы просили загрузить, а не на найденную. Рад, что я не единственный, кто ошибается!
Я поискал в nuget проблемную сборку, установил ее (с новой версией), и проблема исчезла.
У меня была идентичная ошибка в проекте функции Azure, и с помощью fuslogvw.exe @ ra170 я определил, что assemblyIdentity Microsoft.Azure.Storage.Common "отсутствовал в func.exe.Config. Поэтому я добавил это: <dependentAssembly> <assemblyIdentity name = "Microsoft.Azure.Storage.Common" publicKeyToken = "31bf3856ad364e35" culture = "neutral" /> <bindingRedirect oldVersion = "0.0.0.0-9.0.0.0" newVersion = "9.0.0.0" /> </dependentAssembly>
В моем случае каким-то образом файл Web.config просто отсутствовал, и я получаю указанную выше ошибку.
Я думал, что Web.config там, но в учетной записи, которую я использовал на производственном сервере, была настройка, чтобы скрыть известные расширения файлов. Итак, в проводнике Windows я увидел Web.config, который на самом деле был Web.config.txt.
Проблема появляется только при установке поверх существующей установки с помощью установщика VS2019 (при установленном флажке удаления более ранней версии). Кажется, ищет более раннюю установочную версию dll.
Проблема была вызвана ссылкой на DLL с v 106.8.10.0 в более ранней версии проекта и ссылкой на DLL v 105.2.3.0 из DLL2, появившейся в более поздней версии. Поскольку указанная версия из DLL2 (обнаруженная с помощью зависимостей) была раньше, чем уже существующая DLL из более ранней версии, она не была заменена новой версией, поэтому ссылка на DLL2 v 105.2.3.0 не удалась, поскольку ее там не было. Исправление заключалось в том, чтобы загрузить открытый исходный код для DLL2, ссылающейся на DLL 105.2.3.0, и перестроить его до последней версии 106.11.7.0. Это необходимо для обновления nuget.exe!
Вы можете сделать несколько вещей, чтобы устранить эту проблему. Во-первых, воспользуйтесь поиском файлов Windows, чтобы найти на жестком диске вашу сборку (.dll). Когда у вас есть список результатов, нажмите View-> Choose Details ... и затем отметьте «Версия файла». Это отобразит номер версии в списке результатов, чтобы вы могли видеть, откуда могла взяться старая версия.
Кроме того, как сказал Ларс, проверьте свой GAC, чтобы узнать, какая версия там указана. Эта статья Microsoft указывает, что сборки, найденные в GAC, не копируются локально во время сборки, поэтому вам может потребоваться удалить старую версию, прежде чем выполнять полную перестройку. (См. Мой ответ этот вопрос для заметок о создании командного файла, который сделает это за вас)
Если вы все еще не можете определить, откуда взялась старая версия, вы можете использовать приложение fuslogvw.exe, которое поставляется с Visual Studio, чтобы получить дополнительную информацию о сбоях привязки. У Microsoft есть информация об этом инструменте здесь. Обратите внимание, что вам нужно будет включить ведение журнала, установив для ключа реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\EnableLog значение 1.
Не забывайте, что версия файла не является частью идентичности сборки. Версия сборки есть, но не обязательно должна совпадать с версией файла!
Если вы используете fuslogvw для сервисов, прочтите blogs.msdn.com/b/junfeng/archive/2004/02/14/72912.aspx
Поиск имени файла решил мою проблему. У меня была старая версия dll в моей папке Temporary ASP.Net, и InstallShield использовал ее вместо последней версии! Чистое решение, восстановление, перезагрузка ПК ничего не сделали. Работала нормально локально и взрывалась каждый раз при развертывании.
Сразу после сборки мой сайт работает нормально, но через некоторое время возникает эта проблема.
Я отредактировал этот ответ, чтобы вместо этого указать версию сборки.
<add assembly version = "X.X.X.X" ... в файле web.config, установленном на версию файла DLL, в моем случае полностью решила ошибку в теме.
Я только что столкнулся с этой проблемой, и проблема заключалась в том, что у меня была старая копия .dll в каталоге отладки моего приложения. Возможно, вы захотите также проверить там (вместо GAC), чтобы увидеть, видите ли вы это.
Мы просто переходим на другой сервер, у нас возникла эта проблема, потому что мы сохраняем резервные копии. Сработало после удаления резервных копий. Спасибо :)
Я сам столкнулся с этой проблемой и обнаружил, что проблема отличается от того, с чем столкнулись другие.
У меня было две библиотеки DLL, на которые ссылался мой основной проект: CompanyClasses.dll и CompanyControls.dll. Я получал сообщение об ошибке во время выполнения:
Could not load file or assembly 'CompanyClasses, Version=1.4.1.0, Culture=neutral, PublicKeyToken=045746ba8544160c' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference
Проблема была в том, что в моей системе не было файлов 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 Нечто подобное произошло со мной, когда одна из моих DLL ссылается на старую версию Caliburn Micro.
я тоже, ваш опыт подсказал мне, куда мне нужно смотреть, и я исправил свою проблему.
Другой вариант - открыть проект CompanyControls, щелкнув правой кнопкой мыши ссылку CompanyClasses.dll -> свойства -> SpecificVersion = false.
это очень часто случается с приложениями xamarin. У меня был проект xamarin.forms, отличный от проекта xamarin.droid. Я только что увидел твой пост и узнал его.
Если CompanyClasses.dll подписан, то SpecificVersion = false сам по себе не справится. Вам понадобится bindingredirect.
Для нас проблема была вызвана чем-то другим. Файл лицензии для компонентов DevExpress включал две строки, одну для старой версии компонентов, которая не была установлена на этом конкретном компьютере. Удаление старой версии из файла лицензии решило проблему.
Раздражает то, что в сообщении об ошибке не указывается, какая ссылка вызвала проблемы.
В моем случае после обновления до новой версии DevExpress файл .resx формы содержал ссылки на старую неустановленную версию библиотеки. Мне пришлось открыть .resx в представлении кода и либо исправить версию на новую, либо удалить недопустимые записи.
Попробуйте добавить то, чего не хватает, в глобальный кеш сборок.
На самом деле я не получил голосов против. Когда ссылка отсутствует, иногда добавление ее в GAC на самом деле является ответом, ПРЕДПОЛАГАЯ, что ссылка указывается именно на него. Я согласен, что этот ответ можно было бы сформулировать как прямой ответ на вопрос автора, ссылку о том, как получить его в GAC, но давайте не будем наказывать за общий ответ - особенно с другим ветвлением, уже представленным здесь. Я рассматриваю SO как набор возможных ответов на тип ошибки, а не только на конкретный сценарий. И у них нет более 50 представителей, поэтому они не могут добавлять комментарии к вопросу или сообщениям (которые, ИМХО, должны измениться).
Если вы используете Visual Studio, попробуйте «чистое решение», а затем перестройте свой проект.
Обычно это решение для меня. Часто удаление bin и obj делает это. По сути, кое-что, на что я ссылался, все еще сидит, пытаясь удовлетворить то же требование. Например, старая версия - это то, на что я ссылался напрямую, а новая версия находится в NuGet.
Обнаружена эта проблема для нескольких библиотек DLL после извлечения из TFS. Это решение исправило это для меня.
Работал у меня. Удалена папка bin amd obj и проблема решена.
Спасибо, у меня тоже сработало, просто удалив папку bin.
Для меня было достаточно удалить папку bin. Удивительно, но раньше я безуспешно пробовал чистое решение и восстановить решение. Иногда немного странно.
«Чистый раствор» ничего не сделал для меня. (Microsoft ????) Но удаление папок bin и obj исправило это. Спасибо!
Эта точно такая же ошибка возникает, если вы пытаетесь выполнить позднюю привязку с помощью отражения, если сборка, к которой вы привязываете, получает строгое имя или ее токен открытого ключа изменен. Ошибка остается той же, даже если на самом деле не найдена сборка с указанным токеном открытого ключа.
Вам необходимо добавить правильный токен открытого ключа (вы можете получить его с помощью sn -T в dll), чтобы устранить ошибку. Надеюсь это поможет.
Уточните, пожалуйста, что такое sn -T? А где мне добавить токен открытого ключа?
sn.exe - это инструмент, который поставляется с Visual Studio, это инструмент командной строки, который можно запустить из командной строки Visual Studio. Просто запустите командную строку Visual Studio (из меню «Пуск»), перейдите в папку, содержащую вашу сборку, и введите «sn -T <assembly>», где <assembly> - полное имя библиотеки DLL. Это получает информацию о сборке "Token". После этого, когда вы выполняете позднюю привязку с отражением, введите информацию токена в строку идентификатора сборки (т. Е. «Assembly = MyAssembly.dll, токен открытого ключа = <token guid>).
Спасибо за этот ответ. Я получал эту ошибку при обращении к разделу конфигурации в моем App.ini. Я недавно подписал сборку, поэтому PublicKeyToken = null пришлось обновить новым (правильным) токеном.
Моя ситуация была очень похожа на сообщение Натана Бедфорда, но с небольшим поворотом. Мой проект тоже ссылался на измененную dll двумя способами. 1) Непосредственно и 2) Косвенно путем ссылки на компонент (библиотеку классов), который сам имел ссылку на измененную dll. Теперь мой проект Visual Studio для компонента (2) ссылается на правильную версию измененной dll. Однако номер версии самого компонента НЕ был изменен. В результате установка новой версии проекта не смогла заменить этот компонент на клиентской машине.
Конечный результат: прямая ссылка (1) и косвенная ссылка (2) указывали на разные версии измененной библиотеки DLL на клиентском компьютере. На моей машине dev все работало нормально.
Решение: удалить приложение; Удалите все библиотеки DLL из папки приложения; Переустановите. В моем случае все просто.
Щелкните правой кнопкой мыши ссылку в VS, установите для свойства "Определенная версия" значение True.
В моем случае это была старая версия DLL в каталоге C: \ WINDOWS \ Microsoft.NET \ Framework \ ~ \ Temporary ASP.NET Files \. Вы можете удалить или заменить старую версию или удалить и снова добавить ссылку на DLL в своем проекте. По сути, в любом случае будет создан новый указатель на временные файлы ASP.NET.
У меня это сработало, когда я закрыл Visual Studio, остановил IIS и удалил все временные файлы ASP.NET. Обратите внимание, что файлы могут находиться в папках Framework и Framework64 на 64-битной машине, а также в папках .NET 2.0 и 4.0!
Я использовал функцию поиска в меню «Пуск» Windows, чтобы найти все библиотеки DLL, созданные моим решением, а затем удалил всю партию, где бы они ни были найдены. Я мог сделать это без страха, потому что они должны создаваться только во время отладки Visual Studio. Поскольку VS будет восстанавливать такие отсутствующие библиотеки DLL, и ничто, кроме моего решения, не должно ссылаться на них, для меня это была «безопасная» операция.
Я получил это сообщение об ошибке из-за ссылки на сборку, имя которой совпадает с именем сборки, которую я создавал.
Он был скомпилирован, но он заменил указанную сборку сборкой текущего проекта, что привело к ошибке.
Чтобы исправить это, я изменил имя проекта и свойства сборки, доступные при щелчке правой кнопкой мыши по проекту и выборе «Свойства».
Я позволю кому-нибудь извлечь выгоду из моей тупости, связанной с обрезанием. У меня есть некоторые зависимости от совершенно отдельного приложения (назовем это App1). DLL из этого App1 втягиваются в мое новое приложение (App2). Каждый раз, когда я делаю обновления в APP1, мне приходится создавать новые dll и копировать их в App2. Что ж. . . Мне надоело копировать и вставлять между двумя разными версиями App1, поэтому я просто добавил префикс NEW_ к dll.
Что ж. . . Я предполагаю, что процесс сборки сканирует папку / bin и, когда она что-то неправильно соответствует, выдает то же сообщение об ошибке, как указано выше. Я удалил свои "новые_" версии, и все получилось просто шикарно.
Моя проблема заключалась в копировании исходного кода на новую машину без перетягивания какой-либо из упомянутых сборок.
Ничего из того, что я сделал, не исправило ошибку, поэтому я в спешке полностью удалил каталог BIN. Восстановил исходный код, и с тех пор он работал.
Я только что нашел другую причину появления этой ошибки. Я очистил свой GAC от всех версий конкретной библиотеки и построил свой проект со ссылкой на конкретную версию, развернутую вместе с исполняемым файлом. Когда я запускаю проект, я получил это исключение при поиске более новой версии библиотеки.
Причина - политика издателя. Когда я удалил версии библиотеки из GAC, я забыл также удалить сборки политики издателя, поэтому вместо использования моей локально развернутой сборки загрузчик сборок нашел политику издателя в GAC, которая сказала ему искать более новую версию.
У меня была аналогичная проблема при попытке обновить один DLL-файл моего веб-сайта.
Эта ошибка возникла, когда я просто скопировал этот файл DLL в папку bin через FTP.
Я решил эту проблему:
Мой app.config содержит
<bindingRedirect oldVersion = "1.0.0.0" newVersion = "2.0.11.0"/>
для npgsql. Каким-то образом на машине пользователя пропал мой app.exe.config. Я еще не уверен, был ли это глупый пользователь, сбой установщика или отключенный антивирус. Замена файла решила проблему.
Следующее перенаправляет любую версию сборки на версию 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) это не сработает.
Это сработало для меня. Я изменил newVersion = 3.3.3 на newVersion = 3.1.0.
Лучше не идти по маршруту перепривязки, если вы можете этого избежать. Когда этот жук придет укусить вас, он укусит сильно.
Моя проблема заключалась в том, что перенаправления указывали на несуществующие сборки. App.Config содержал информацию о сборках из последних установленных мной пакетов NuGet. Когда я позже понизил эти пакеты, это НЕ убирало. Это была стандартная библиотека классов .NET, попавшая в проект модульного тестирования инфраструктуры 4.7.2. Проблема проекта модульного тестирования, представленная во время выполнения ..
@ D-Sect права. Если ваш исходный элемент управления указывает, что в web.config есть изменения (потому что вы играли со своими NuGets), вам может быть разумно отказаться от этих bindingRedirects. При переходе на более раннюю версию NuGets не удаляются перенаправления привязки.
Для меня конфигурация покрытия кода в файле «Local.testtesttings» «вызвала» проблему. Я забыл обновить файлы, на которые там ссылались.
Я столкнулся с той же проблемой при запуске своих модульных тестов.
Ошибка четко указывает на то, что проблема заключается в следующем: когда мы пытаемся загрузить сборку, загрузчик сборки .NET пытается загрузить упомянутые сборки на основе данных своего манифеста (указанное имя сборки, токен открытого ключа, версия).
Чтобы проверить данные манифеста:
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 отдельно и проверьте, какая зависимая сборка содержит данные манифеста со старой версией сборки. Просто перестройте эту зависимую сборку и верните ее в свой проект.
К сожалению, я не могу перетащить сборку в ildasm, так как ошибка мешает сборке сборки ...
Звучит многообещающе, но я не понимаю, как это исправить. Я обнаружил в своем решении проект, имеющий две версии System.Web.Mvc. Когда я его перестраиваю, он все еще содержит две версии. Как мне избавиться от ссылки на старую версию?
Другие ответы не сработают для меня. Если вам не важна версия, и вы просто хотите, чтобы ваше приложение запускалось, щелкните правой кнопкой мыши ссылку и установите для параметра «конкретная версия» значение false ... Это сработало для меня.

Этот параметр действует только в время компиляции. После компиляции ему потребуется та же самая версия сборки, с которой вы ее скомпилировали. См. stackoverflow.com/questions/24022134/…
Я хотел бы просто добавить, что я создавал базовый проект ASP.NET MVC 4 и добавил DotNetOpenAuth.AspNet через NuGet. Это привело к той же ошибке после того, как я сослался на несоответствующий файл DLL для Microsoft.Web.WebPages.OAuth.
Чтобы исправить это, я сделал Update-Package и очистил решение для полной перестройки.
Это сработало для меня, и это отчасти ленивый способ, но время - деньги :-P
Аналогичный ответ для меня. Update-Package -reinstall переустанавливает все пакеты NuGet той же версии.
Отлично; спасибо за публикацию. Я попробовал все эти другие замечательные предложения, но это было то, что помогло. Слава богу, люди, которые все еще готовы опубликовать альтернативное решение, даже когда их 80 доступны.
В файле AssemblyVersion в файле AssemblyInfo.cs используйте фиксированный номер версии вместо указания *. Значок * изменит номер версии для каждой компиляции. В моем случае это было проблемой для этого исключения.
Я столкнулся с этой проблемой при использовании внутреннего репозитория пакетов. Я добавил во внутренний репозиторий основной пакет, но не зависимости пакета. Убедитесь, что вы добавили все зависимости, зависимости зависимостей, рекурсивные и т. д. Во внутренний репозиторий.
Я добавил пакет 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>
Я видел это, когда, по крайней мере, для модуля Entity Framework при использовании NuGet, если вы щелкните правой кнопкой мыши свое решение, перейдите в раздел «Управление пакетами NuGet для решения», затем «Установленные пакеты»> «Все», выберите этот модуль, выберите «Управление», вы можете обычно снимают выделение с него в своем проекте. Это должно убрать подобные вещи без необходимости делать это вручную - при условии, что поставщик проявил должную осмотрительность. Но хороший улов, так как, по-видимому, иногда они этого не делают, если вы так его удалили.
Может помочь ручное удаление старой сборки из папки и последующее добавление ссылки на новые сборки.
Сегодня у меня была такая же проблема, из-за которой я не смог выполнить Add-Migration после внесения изменений в Entity Framework.
В моем решении было два проекта, назовем их «Клиент» и «Данные» - проект библиотеки классов, который содержал мои модели EF и контекст. Клиент сослался на проект данных.
Я подписал оба проекта, а затем внес изменения в модель EF. После того, как я удалил подпись, я смог добавить миграции, а затем подписал проект заново.
Надеюсь, это может быть кому-то полезно и избавит от длительного разочарования.
У меня возникла эта проблема после начала использования InstallShield. Несмотря на то, что порядок сборки показал, что проект установки был последним, он строился из строя.
Я исправил это, сделав любой другой проект зависимым от него - это заставило установку собираться последней и тем самым устранило несоответствие моей сборки. Надеюсь, это поможет.
В моем случае проблема была между креслом и клавиатурой :-)
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's 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 для рабочего сервера, вам необходимо синхронизировать этот раздел зависимой сборки после использования NuGet.
У меня такая же ошибка ... В моем случае это разрешилось следующим образом:
Я получил эту ошибку при создании службы сборки Team Foundation Server. Оказалось, что в моем решении было несколько проектов, использующих разные версии одной и той же библиотеки, добавленной с помощью NuGet. Я удалил все старые версии с помощью NuGet и добавил новую как ссылку для всех.
Team Foundation Server помещает все файлы DLL в один каталог, и, конечно же, одновременно может быть только один файл DLL с определенным именем.
Другой способ - нажать «Управление пакетами NuGet для решения ...» и обновить тестовый проект и тестируемый проект до одной и той же (самой новой) версии.
Это также может произойти, если вы используете как AssemblyInfo.cs с тегами AssemblyVersion, так и ваш файл .csproj с другим значением. Если сопоставить AssemblyInfo или удалить весь раздел, проблема исчезнет.
В моем случае эта ошибка произошла при запуске приложения ASP.NET. Решение было:
obj и bin в папке проекта.Очистка не сработала, перестройка не сработала, все ссылки были в порядке, но не было написано ни одной из библиотек. После удаления этих каталогов все работало отлично.
Спасибо, Леви Фуллер. Этот ответ должен быть выше; для моей ситуации это было правильно! Для меня эта ошибка началась, когда я сделал резервную копию своего web.config, и Visual Studio продолжала загружать этот файл конфигурации вместо фактической конфигурации даже после того, как я удалил дублирующую копию. Это решило это. Спасибо.
У меня тоже работает. Все еще не уверен, почему это работает :(
Вот мой метод решения этой проблемы.
Хорошо, в этом примере моя .dll определенно 2.0.5022.0 (поэтому номер версии Exception неверен).
Итак, в этом примере я бы заменил это ...
<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" />
Дело сделано !
что, если в моих файлах csproj нет ссылки на версию?
Хорошо, еще один ответ. Я ранее создавал свое приложение как 64-битное и соответственно изменил путь вывода (Project / Properties / Build / Output / Output Path). Недавно я изменил приложение на 32-битное (x86), создав новый путь вывода. Я создал ярлык для мысль скомпилированного .exe. Независимо от того, что я изменил в источнике, он получил ошибку несоответствия манифеста. Примерно через час разочарования я случайно проверил дату / время файла .exe и увидел, что он старый, очевидно, ссылаясь на старые .dll. Я компилировал приложение в старый каталог, и мой ярлык ссылался на более новый. Изменил выходной путь туда, где находится .exe должен, запустил ярлык, и ошибка исчезла. (хлопает по лбу)
Простое удаление содержимого папки bin вашего проекта и восстановление решения решило мою проблему.
Ну, что вы знаете, вы только что помогли мне избавиться от моих страданий, действительно спасибо
очистить и перестроить решение может не заменить все библиотеки DLL из выходного каталога.
я предлагаю попробовать переименовать папку с «bin» в «oldbin» или «obj» в «oldobj»
а затем попробуйте снова построить силюцию.
Если вы используете какие-либо сторонние библиотеки DLL, которые вам нужно будет скопировать во вновь созданную папку «bin» или «obj» после успешной сборки.
надеюсь, это сработает для вас.
Проблема со мной заключалась в том, что были старые dll dployed, которые были удалены в новой сборке. Чтобы исправить это, я просто установил флажок, чтобы удалить дополнительные файлы в месте назначения при публикации. Удалить дополнительные файлы в месте назначения
Если вы когда-нибудь получите сообщение об ошибке типа «Определение манифеста обнаруженной сборки не соответствует ссылке на сборку» и если вы обновились через Проект> Управление пакетами NuGet и вкладка "Обновление" в VS, первое, что вы можете сделать, это попробовать установить другую версию пакета после проверки версий из Страница галереи NuGet и выполнения следующей команды из консоли диспетчера пакетов:
PM> Install-Package YourPackageName -Version YourVersionNumber
//Example
PM> Install-Package Microsoft.Extensions.FileProviders.Physical -Version 2.1.0
Хотя ответ не имеет прямого отношения к рассматриваемому пакету и был задан давно, он носит общий характер, все еще актуален и надеюсь, что он кому-то поможет.
Упоминалась ли аналогичная проблема в этом посте «Есть предложения, как мне выяснить, на что ссылается эта старая версия этого DLL-файла?»
Требуется, какая сборка по-прежнему относится к старому клиенту ODATA 6.15.0, ildasm помог мне сузить круг вопросов (без доступа к базовому коду, только через развернутый pkg на сервере).
Снимок экрана ниже для краткого обзора.
DeveloperPackge, если у вас нет ildasm.exe https://www.microsoft.com/net/download/visual-studio-sdks
Я собираюсь поразить всех прямо сейчас. . .
Удалите все ссылки <assemblyBinding> из файла .config, а затем запустите эту команду из консоли диспетчера пакетов NuGet:
Get-Project -All | Add-BindingRedirect
У меня тоже сработало. Спасибо
ты сэкономил мне время ??
это работает, только когда формат управления пакетами - packages.config, если вы используете 2017 csproj без packages.config, он работает :(
Разум официально взорван
Я считаю, что проекты csproj нового стиля будут автоматически генерировать перенаправления привязки в файлах app.config при сборке (перенаправления не нужно добавлять в файлы проекта app.config, но они будут существовать на выходе).
Я обновлял этот продукт с течением времени ... иногда нужно просто смыть артефакты и переделать. Я думаю, что единственное, что я мог бы сделать иначе, - это создать новый проект и вручную выбрать в него элементы ... эта команда избавила меня от этого ... Когда-нибудь мне придется выплатить технический долг? Может быть, но не сегодня зло.
Эта же ошибка возникла у меня в моем проекте модульных тестов и привела к сбою некоторых тестов. Я дважды проверил, какую версию сборки я использовал в проводнике сборок, проверил содержимое тегов runtime / independentassembly и понял, что там все еще есть ссылка на другую версию сборки, которую я использовал. Поскольку это была единственная директива в моем тестовом проекте app.config, я просто попытался удалить весь файл app.config, перестроить решение, и это помогло! Больше никаких справочных ошибок для меня :)
Я получал:
Could not load file or assembly 'XXX-new' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
Это произошло потому, что я изменил название сборки с XXX.dll на XXX-new.dll. Возврат имени к исходному устранил ошибку.
проверьте licenses.licx в свойствах проекта, вы найдете там неправильную версию .... это сработало для меня в активных ссылках на отчет
Получилось у меня за System.ValueTuple
Unexpected Error Could not load file or assembly 'System.ValueTuple, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' or one of its dependencies. The system cannot find the file specified.
Решил, установив .NET Framework 4.7.2 Runtime на машину, на которой произошла ошибка. Просто и не нужно добавлять bindingRedirect, изменять GAC или понижать пакеты NuGet и т. д.
https://dotnet.microsoft.com/download/dotnet-framework/net472
У меня не сработало ни одно решение. Я попробовал очистить проект, удалить корзину, обновить пакет, перейти на более раннюю версию и так далее ... Через два часа я загрузил App.config по умолчанию из проекта со сборками, и там я изменил неправильную эталонную версию с:
<dependentAssembly>
<assemblyIdentity name = "Microsoft.IdentityModel.Logging" publicKeyToken = "31bf3856ad364e35" culture = "neutral" />
<bindingRedirect oldVersion = "0.0.0.0-5.5.0.0" newVersion = "5.5.0.0" />
</dependentAssembly>
к:
<dependentAssembly>
<assemblyIdentity name = "Microsoft.IdentityModel.Logging" publicKeyToken = "31bf3856ad364e35" culture = "neutral" />
<bindingRedirect oldVersion = "0.0.0.0-3.14.0.0" newVersion = "5.5.0.0" />
</dependentAssembly>
После этого я очистил проект, построил его снова, и он заработал. Нет предупреждений - нет проблем.
Запустите код в отладчике Visual Studio. Пожалуйста, бегите, пока не получите исключение. Будет пользовательский интерфейс исключения Visual Studio. Пожалуйста, прочтите «Полная информация» / «Показать подробности» внизу Visual Studio Exception. В разделе Полные сведения / Показать подробности он сказал мне, что один из моих проектов (который относился к моему основному проекту, имеет другую версию Microsoft.IdentityModel.Clients.ActiveDirectory). В моем случае проект модульного тестирования вызывал мой проект. Мой проект модульного тестирования и мой проект имеют другую версию Microsoft.IdentityModel.Clients.ActiveDirectory. Я получаю ошибку во время выполнения, когда выполнялся мой модульный тест.
Я только что обновил версию своего проекта модульного тестирования той же версией основного проекта. У меня это сработало.
Что такое «Полная информация»?
Начните отладку в Visual Studio. Visual Studio выдаст исключение при достижении фрагмента кода. См. «Показать подробности» в пользовательском интерфейсе исключений Visual Studio внизу. Я также отредактировал свой ответ, добавив больше деталей.
У меня была аналогичная проблема, но у меня ничего не получилось.
Решение, которое сработало для меня, заключалось в удалении части publicKeyToken из файла проекта (YourProject.csproj) вручную.
Раньше было:
<Reference Include = "Utility, Version=0.0.0.0, Culture=neutral, PublicKeyToken=e71b9933bfee3534, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>dlls\Utility.dll</HintPath>
</Reference>
После изменения было:
<Reference Include = "Utility, Version=1.0.1.100, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>dlls\Utility.dll</HintPath>
</Reference>
Убедитесь, что SpecificVersion - это False.
Решил мою проблему таким образом с помощью грубой силы.
Я понял, что вручаю несколько копий DLL по всему решению и две разные версии.
Зашел в решение в проводнике, поискал проблемную DLL и удалил их все. Затем добавили ссылки на DLL обратно, используя одну версию DLL.
Некоторое время я был в тупике. Я мог собрать и запустить в выпуске, не смог отладить из-за ссылки, которая не соответствовала манифесту. Я, должно быть, сотни раз проверял ссылки и удалил все библиотеки DLL. Я заметил, что сгенерированный манифест при отладке и выпуске отличается.
Я удалил app.manifest в своем проекте / свойствах, и проблема была устранена. Это не включало упоминания о вызывающих нарушение ссылках DLL - поэтому я не знаю, почему это вызывало проблему.
Попробовав многие из вышеперечисленных решений без каких-либо исправлений, нужно было убедиться, что в вашем приложении в Visual Studio включен параметр «Автоматическое создание перенаправления привязки».
Более подробную информацию о включении автоматического перенаправления привязки можно найти здесь: https://docs.microsoft.com/en-us/dotnet/framework/configure-apps/how-to-enable-and-disable-automatic-binding-redirection
Попробуйте удалить ссылку на сборку из своего веб-файла Config / appConfig.
<dependentAssembly>
<assemblyIdentity name = "System.IO" publicKeyToken = "B03F5F7F11D50A3A" culture = "neutral" />
<bindingRedirect oldVersion = "0.0.0.0-4.1.2.0" newVersion = "4.3.0.0" />
</dependentAssembly>
Общий ответ на эту проблему - использовать перенаправления привязки, как и в других ответах. Однако это только часть проблемы - вам нужно знать правильную версию файла сборки, который вы используете. Свойства Windows не всегда точны, и nuget также не всегда точен.
Единственный способ получить правильную информацию о версии - это проанализировать сам файл. Один из полезных инструментов - dotPeek. По моему опыту, имя сборки, указанное в dotPeek, всегда является точным.
Так, например, правильная привязка для этого файла следующая:
<dependentAssembly>
<assemblyIdentity name = "System.ComponentModel.Annotations" publicKeyToken = "b03f5f7f11d50a3a" culture = "neutral"/>
<bindingRedirect oldVersion = "0.0.0.0-4.2.1.0" newVersion = "4.2.1.0"/>
</dependentAssembly>
Проводник Windows говорит, что это файл 4.6.26515.06, nuget говорит, что это файл 5.0.0.0. dotPeek говорит, что это 4.2.1.0, и это версия, которая корректно работает в нашем программном обеспечении. Также обратите внимание, что открытый ключ и культура важны, и dotPeek также показывает эту информацию.
Это довольно старый вопрос, и недавно у меня было такое же сообщение об ошибке с конвейерами Azure DevOps Yaml и Dotnet Core 3.1. Проблема была несколько иной, чем другие ответы, которые пытаются решить, поэтому я поделюсь своим решением.
У меня было решение со многими проектами для моих собственных пакетов nuget. Я случайно добавил тег версии в файлы * .csproj, например:
<Project Sdk = "Microsoft.NET.Sdk">
<PropertyGroup>
<Version>1.0.0</Version>
</PropertyGroup>
Я упаковал пакеты nuget для всех проектов, использующих Yaml, с помощью задачи DotnetCoreCLI @ 2:
- task: DotNetCoreCLI@2
displayName: 'pack'
inputs:
command: pack
nobuild: true
configurationToPack: 'Release'
includesource: true
includesymbols: true
packagesToPack: 'MyNugetProject1.csproj;**/MyNugetProject2.csproj'
versioningScheme: 'byEnvVar'
versionEnvVar: 'GitVersion.SemVer'
Проблема заключалась в том, что версия в файлах * .csproj не соответствовала версии в переменной среды GitVersion.SemVer (заданной параметром input- «versionEnvVar»).
После удаления всех тегов <Version>1.0.0</Version> в файлах * .csproj сборка / версия файла для dll была автоматически назначена переменной среды, и как nuget, так и dll (сборка / версия файла) имели одинаковую версию, и проблема была решена.
Возможно, у вас неправильные версии слепков в assemblyBinding попробуйте:
<assemblyBinding xmlns = "urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name = "Microsoft.Extensions.Logging.Abstractions" publicKeyToken = "adb9793829ddae60" culture = "neutral" />
<bindingRedirect oldVersion = "0.0.0.0-3.1.3.0" newVersion = "3.1.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name = "Microsoft.Extensions.DependencyInjection" publicKeyToken = "adb9793829ddae60" culture = "neutral" />
<bindingRedirect oldVersion = "0.0.0.0-3.1.3.0" newVersion = "3.1.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name = "System.ComponentModel.Annotations" publicKeyToken = "b03f5f7f11d50a3a" culture = "neutral" />
<bindingRedirect oldVersion = "0.0.0.0-4.2.1.0" newVersion = "4.2.1.0" />
</dependentAssembly>
</assemblyBinding>
В моем случае это произошло потому, что у меня было два проекта, загружающих одну и ту же DLL с разными версиями. (надеюсь, это кому-то поможет!)