我尝试将我的项目更新为.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)时 - 此测试运行良好。
答案 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文件。