【问题标题】:Could not load file or assembly Autofac无法加载文件或程序集 Autofac
【发布时间】:2018-12-07 13:28:18
【问题描述】:
我有一个 CLI 程序,它每晚在数据库上运行不同的任务。尝试手动运行程序时,我收到以下错误消息。代码甚至还没有命中 Program.cs,因为它会向控制台输出一些消息。
无法加载文件或程序集“Autofac,Version=4.0.0.0,Culture=neutral,PublicKeyToken=17863af14b0044da”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。 (HRESULT 异常:0x80131040)
但是,当在本地数据库上通过 Visual Studio 进行调试时,问题不会发生,仅在我们的测试和生产服务器上发生。 Autofac 版本 (4.8.1) 之间没有不匹配或 CLI 项目中缺少引用。
我查看了Could not load file or assembly 'Autofac, Version=3.0.0.0,但这不是解决方案。我试过清理和重建,但没有成功。
我们之前没有遇到过这个问题;它发生在我们的最新版本之后。但是,我们并未对 Autofac 的工作方式、版本更新等进行任何重大更改。
【问题讨论】:
标签:
c#
.net
dependency-injection
autofac
【解决方案1】:
问题似乎毕竟是版本不匹配。该程序似乎无法识别要运行的版本并默认返回 4.0.0.0,但它应该运行 4.8.1.0。
App.config 在为发布而构建时不会被保留,但还有另一个与程序同名的 .config 文件(例如 CLIProgram.exe.config)。
App.config 包含以下行,这些行在构建时不转移到 CLIProgram.exe.config:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Autofac" publicKeyToken="17863af14b0044da" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.8.1.0" newVersion="4.8.1.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
如果我手动将这些行添加到 CLIProgram.exe.config 中,它会再次起作用。