无法加载文件或程序集'System.ComponentModel.Annotations,Version = 4.1.0.0

Dan*_*lis 40 .net visual-studio-2017 .net-standard .net-standard-1.4

我有一个.NET Standard 1.4类库,它引用了System.ComponentModel.Annotations(4.3.0)NuGet包.

然后,我将从.NET Framework 4.6.2测试项目中引用此类库.它构建良好,但在运行时我收到以下错误:

发生System.IO.FileLoadException HResult = 0x80131040
消息= 无法加载文件或程序集'System.ComponentModel.Annotations,Version = 4.1.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)

我尝试从net462项目添加对System.ComponentModel.Annotations(4.3.0)NuGet包的引用,但这没有任何区别.

我尝试从net462项目中添加对.NET标准库的引用,但仍然没有运气.

我在这里错过了什么吗?这是一个已知的错误,如果有的话有解决方法吗?

任何帮助深表感谢!

Mar*_*ich 40

在许多情况下,可以通过添加以下测试项目的csproj文件来解决这个问题:

<PropertyGroup>
  <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
  <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

这会强制构建过程.dll.config在输出目录中创建具有所需绑定重定向的文件.

原因是"经典"csproj测试项目是真正的"库",并且默认情况下不被认为需要绑定重定向.但运行单元测试需要这样做.如果引用的项目需要这些重定向才能正常工作,这只会成为一个问题.这通常适用于直接安装引用库使用的所有NuGet包,但是使用新PackageReference样式的NuGet包时,它不会.

查看此修复程序有帮助的其他实例:

无法加载文件或程序集Microsoft.Extensions.DependencyInjection.Abstractions,Version = 1.1.0.0

在库和.Net framework 4.6.1中使用.Net Standard 1.4和应用程序时,无法加载文件System.IO.FileSystem,Version = 4.0.1.0

  • 这不适用于.NET 4.6.1 Web应用程序.在针对webapp开发时,这个问题似乎是一个持续存在的问题.唯一认为我能做的就是重新编译我的webapp并从解决方案中卸载它,然后手动调试IIS.处理这是一件很痛苦的事情. (5认同)
  • 当您在包管理器中安装高于“4.2.0.0”的任何内容时,对于高于该版本的每个版本,程序集版本实际上是“4.2.1.0”。因此,即使您可能拥有“4.7.0”或“5.0.0” NuGet 包,有效的绑定重定向也是“&lt;bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.1.0" /&gt;”安装。我认为它的版本兼容性问题对于混合框架/标准项目来说是一个痛苦的事情。 (4认同)
  • 我可以确认这在 .Net 4.6.1 网络应用程序中不起作用。 (2认同)

小智 18

我有类似的问题,但上述答案都没有帮助我.事实证明解决方案非常简单,我只是在包管理器中运行以下命令:

Install-Package System.ComponentModel.Annotations -Version 4.1.0

  • 没有一个非常令人满意的解决方案,但这对我有用。 (2认同)
  • 在撰写本文时,我必须使用版本 4.4.1 (2认同)

Gui*_*ume 10

就我而言,我使用的是4.0.0,所以我通过添加来修复它

<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="System.ComponentModel.Annotations"
                      publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="4.1.0.0" newVersion="4.0.0.0"/>
  </dependentAssembly>
Run Code Online (Sandbox Code Playgroud)

适应您所需的版本.

  • 当您在包管理器中安装高于“4.2.0.0”的任何内容时,对于高于该版本的每个版本,程序集版本实际上是“4.2.1.0”。因此,即使您可能拥有“4.7.0”或“5.0.0” NuGet 包,有效的绑定重定向也是“&lt;bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.1.0" /&gt;”安装。我认为它的版本兼容性问题对于混合框架/标准项目来说是一个痛苦的事情。 (6认同)
  • 谢谢我,它是 &lt;bindingRedirect oldVersion="4.2.0.0" newVersion="4.2.1.0"/&gt; (2认同)

Tan*_*pps 10

感谢@MiguelSlv,因为我的案例与使用正确的绑定重定向有关。但是,请确保当您将应用程序部署到测试版或生产环境时,绑定重定向位于您部署的 web.config 中(而不仅仅是在您的开发环境中)。我最终对 NuGet 包System.ComponentModel.Annotations 5.0.0使用以下绑定重定向,该包在我的 **ASP.NET MVC Web 应用程序(.NET Framework 4.7.1)使用的.NET Standard 2.0类项目中使用

<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>
Run Code Online (Sandbox Code Playgroud)

请注意,4.2.1.0 是属性下显示的版本,而 5.0.0 是 NuGet 包版本。

  • 当您在包管理器中安装高于“4.2.0.0”的任何内容时,对于高于该版本的每个版本,程序集版本实际上是“4.2.1.0”。因此,即使您可能拥有“4.7.0”或“5.0.0” NuGet 包,有效的绑定重定向也是“&lt;bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.1.0" /&gt;”安装。我认为它的版本兼容性问题对于混合框架/标准项目来说是一个痛苦的事情。 (3认同)

Mig*_*Slv 5

这通常发生在 Visual Studio 无法找出正确的 bindingRedirect 时。

很可能是因为 nugget 的版本与生成的库的版本不匹配。

要修复这样做:

  1. 从包管理控制台执行:

    Get-Project –All | Add-BindingRedirect

    assemblyBinding在配置文件中重新生成配置

  2. 如果没有修复它,则手动添加绑定重定向:

    <dependentAssembly>
        <assemblyIdentity name="System.ComponentModel.Annotations"    publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-X" newVersion="Y" />
    </dependentAssembly>
    
    Run Code Online (Sandbox Code Playgroud)

    在哪里:

    1. X 是无法加载的版本,来自错误信息
    2. Y 是您的项目参考中的版本。要获取它,请从引用节点中选择库,然后在属性窗格中查找版本。

  • 当您在包管理器中安装高于“4.2.0.0”的任何内容时,对于高于该版本的每个版本,程序集版本实际上是“4.2.1.0”。因此,即使您可能拥有“4.7.0”或“5.0.0” NuGet 包,有效的绑定重定向也是“&lt;bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.1.0" /&gt;”安装。我认为它的版本兼容性问题对于混合框架/标准项目来说是一个痛苦的事情。 (2认同)

归档时间:

查看次数:

25912 次

最近记录:

6 年,3 月 前