Подтвердить что ты не робот

Не удалось загрузить файл или сборку Autofac, версия = 3.3.0.0

После обновления моего проекта от Autofac 2.6.3.862 до 3.4.0.0 у меня была следующая ошибка. Я даже не добавлял никаких ссылок на Autofac 3.3.0.0 в любом проекте в решении.

=== Pre-bind state information ===
LOG: DisplayName = Autofac, Version=3.3.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da
 (Fully-specified)
LOG: Appbase = file:///C:/Projects/Drive/temp/drive/Src/Web/
LOG: Initial PrivatePath = C:\Projects\Drive\temp\drive\Src\Web\bin
Calling assembly : Autofac.Configuration, Version=3.3.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Projects\Drive\temp\drive\Src\Web\web.config
LOG: Using host configuration file: C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet.config
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Post-policy reference: Autofac, Version=3.3.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da
LOG: Attempting download of new URL file:///c:/temp/root/79371609/925ee10/Autofac.DLL.
LOG: Attempting download of new URL file:///c:/temp/root/79371609/925ee10/Autofac/Autofac.DLL.
LOG: Attempting download of new URL file:///C:/Projects/Drive/temp/drive/Src/Web/bin/Autofac.DLL.
WRN: Comparing the assembly name resulted in the mismatch: Minor Version
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.

Stack Trace: 


[FileLoadException: Could not load file or assembly 'Autofac, Version=3.3.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da' or one of its dependencies. The located assembly manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)]
   Fairfax.Classifieds.Drive.Web.Global.RegisterTypesWithAutofac() in c:\Projects\Drive\temp\drive\Src\Web\Global.asax.cs:375
   Fairfax.Classifieds.Drive.Web.Global.Application_Start(Object sender, EventArgs e) in c:\Projects\Drive\temp\drive\Src\Web\Global.asax.cs:102

[HttpException (0x80004005): Could not load file or assembly 'Autofac, Version=3.3.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da' or one of its dependencies. The located assembly manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)]
   System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +9936485
   System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +118
   System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +172
   System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +336
   System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +296

[HttpException (0x80004005): Could not load file or assembly 'Autofac, Version=3.3.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da' or one of its dependencies. The located assembly manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)]
   System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +9950728
   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +101
   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +254

UPDATE: Я также добавил привязку переадресации сборки к web.config, но все еще имел ошибку.

<runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
                <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="5.2.2.0" />
            </dependentAssembly>
    <dependentAssembly>
                <assemblyIdentity name="Autofac" publicKeyToken="17863af14b0044da" />
                <bindingRedirect oldVersion="1.0.0.0-3.4.0.0" newVersion="3.4.0.0" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>

Я также попытался добавить Autofac 3.3.0.0 в GAC, но он не был эффективным.

4b9b3361

Ответ 1

Вероятно, вам понадобится переадресация привязки в вашем web.config. Шахта для версии 3.5 выглядит следующим образом:

  <dependentAssembly>
    <assemblyIdentity name="Autofac" publicKeyToken="17863af14b0044da" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.5.0.0" newVersion="3.5.0.0" />
  </dependentAssembly>

Ответ 2

Ему нужен файл <role name>.dll.config, добавленный в ваше решение (тот же уровень, что и файл web.config или app.config), и установите для свойства "Копировать в выходной каталог" значение "Копировать всегда". Этот файл должен содержать настройки bindingRedirect. У меня была такая же ошибка: FileLoadException: Не удалось загрузить файл или сборку в WebRole (экземпляр утилизации)

Дополнительная информация в Роли облачных служб с ошибкой" System.IO.FileLoadException: не удалось загрузить файл или сборку

Ответ 3

У меня возникла проблема с библиотекой unit test, которую я перенес из старых сборников XAML в новые сборки vNext. Я настроил перенаправление привязки версии сборки для всех библиотек, которые используют AutoFac. Я все еще закончил проблему с выходом.

В конце концов я обнаружил, что информация перенаправления привязки выводится только (в папке bin) для DLL, соответствующей проекту, а не для всех других DLL, которые включены. В моем случае у меня была ссылка на другую (unit test) библиотеку, которая также нуждалась в AutoFac. В этой библиотеке были модульные тесты, которые также были обнаружены процессом сборки и не выполнялись при запуске. Проблема заключалась в том, что переадресация привязки, определенная в указанной библиотеке, не применялась, потому что указанный файл .config библиотеки ссылок не присутствовал в папке bin.

Поэтому я решил это, не имея библиотек unit test, ссылаясь на другие библиотеки unit test. Для работы используйте общий проект кода или общую библиотеку проектов С# для общего кода.

Существует дополнительная информация о том, почему для AutoFac требуется привязка сборки для AutoFac: Почему все пакеты Autofac не нацелены на самое последнее ядро ​​Autofac?