无法加载文件或程序集“System.ValueTuple,Version = 0.0.0.0”或其依赖项之一

问题描述 投票:18回答:2

我尝试将我的项目更新为.NET Standard 2.0,在测试期间我遇到了异常:

System.IO.FileLoadException:'无法加载文件或程序集“System.ValueTuple,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = cc7b13ffcd2ddd51”或其依赖项之一。找到的程序集清单的定义与程序集的引用不匹配。

这是assambly存在于package.config中并存在于包的文件夹中。我尝试了一些版本的System.ValueTuple包,结果是一个。

为什么依赖的版本«0.0.0.0»?

有没有人对这个问题有所了解?

VS 2017 Preview,UnitTestApp,.NET Framework 4.7。

在单元测试应用程序中,我创建EF模型(Microsoft.EntityFrameworkCore,Microsoft.EntityFrameworkCore.SqlServer 2.0.0-preview2-final,它需要在.NET Standard应用程序中)。 Unit测试方法 - 使用EF db模型在表中插入一些行,然后调用'savechanges',然后抛出此异常。

当我使用EntityFrameworkCore 1.1.2(带有EF模型的dll - 标准1.4,单元测试框架4.6.2)时 - 这个测试运行良好。

.net-standard
2个回答
19
投票

我通过在我的.NET Framework 4.7项目(引用.NET Standard 2.0库)中启用Automatic Binding Redirection解决了这个问题。绑定重定向可以通过手动编辑项目的.csproj文件和addind跟随片段Project元素的子代来启用:

<PropertyGroup>
  <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
  <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>

Visual Studio然后在构建期间生成必要的程序集重定向到项目的app.config,类似于:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
  </dependentAssembly>
</assemblyBinding>

允许加载正确的装配。


0
投票

我一直在尝试类似的东西 - 在构建之后,在webapi2 sln的bin文件夹中的dll。我删除了一个dll列表并每次刷新 - 错误转移到另一个dll。最后,删除8个dll后,网站正常启动。我的下一步是编写一个构建后的脚本来从bin文件夹中删除这些dll。有点破解,但优雅的解决方案可以在以后出现。

© www.soinside.com 2019 - 2024. All rights reserved.