Я столкнулся с этой ошибкой в контексте, где я использовал Autofac и много динамической сборки погрузка.
Выполняя операцию разрешения Autofac, среда выполнения не смогла загрузить одну из сборок. Сообщение об ошибке жаловалось, что Method 'MyMethod' in type 'MyType' from assembly 'ImplementationAssembly' does not have an implementation
. Симптомы возникли при работе на виртуальной машине Windows Server 2012 R2, но не произошли на виртуальных машинах Windows 10 или Windows Server 2016.
ImplementationAssembly
ссылка System.Collections.Immutable
1.1.37, и содержит реализации интерфейса IMyInterface<T1,T2>
, который был определен в отдельном DefinitionAssembly
. DefinitionAssembly
ссылка System.Collections.Immutable
1.1.36.
Методы от IMyInterface<T1,T2>
, которые были «не реализованы», имели параметры типа IImmutableDictionary<TKey, TRow>
, который определен в System.Collections.Immutable
.
Реальная копия System.Collections.Immutable
, найденная в каталоге программ, была версией 1.1.37. На моей Windows Server 2012 R2 VM, GAC содержала копию System.Collections.Immutable
1.1.36. В Windows 10 и Windows Server 2016 GAC содержал копию System.Collections.Immutable
1.1.37. Ошибка загрузки произошла только тогда, когда GAC содержал более старую версию DLL.
Таким образом, основной причиной сбоя сборочной нагрузки является несоответствие ссылок на System.Collections.Immutable
. Определение интерфейса и реализация имели идентичные сигнатуры методов, но на самом деле зависели от разных версий System.Collections.Immutable
, а это означало, что среда выполнения не учитывала класс реализации в соответствии с определением интерфейса.
Добавления следующего связывающей переадресации файл приложение конфигурация исправил проблему:
<dependentAssembly>
<assemblyIdentity name="System.Collections.Immutable" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.1.37.0" newVersion="1.1.37.0" />
</dependentAssembly>
Мне нравится, как вы делились своим опытом с сообществом, чтобы помочь всем нам, и даже побудили нас прочитать другие ответы тоже, спасибо. К сожалению, ни один из предложений не помог мне. Хотите знать, что в итоге работает для меня? Перезапуск Visual Studio. Почему я не попробовал это первым? –
Спасибо, Пол, прочитав ваш комментарий, я сначала попробовал это.Работал как шарм :-) –
спасибо Пол, спасите меня несколько часов, постоянно царапая мою голову, как обезьяна ... –