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

时间:2017-06-30 10:55:38

标签: .net-standard

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

  

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

这是package.config中存在的assambly 并存在于包的文件夹中。我尝试了一些版本的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)时 - 此测试运行良好。

5 个答案:

答案 0 :(得分:18)

我在.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>

允许加载正确的装配。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

在我的案例中

将dotnet框架从4.6更新到4.7 问题解决后

答案 3 :(得分:0)

使用 #23 答案,我修改了 web.config 并添加: (在主根目录下配置

<runtime>
    <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>
</runtime>

吉列尔莫

答案 4 :(得分:0)

我遇到了同样的问题,只有当我在服务器上运行控制台应用程序时。最终我从服务器上的那个目录中删除了所有文件并再次上传。然后它起作用了。可能是过去上传的旧dll文件。