我尝试将我的项目更新为.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 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>
允许加载正确的装配。
我一直在尝试类似的东西 - 在构建之后,在webapi2 sln的bin文件夹中的dll。我删除了一个dll列表并每次刷新 - 错误转移到另一个dll。最后,删除8个dll后,网站正常启动。我的下一步是编写一个构建后的脚本来从bin文件夹中删除这些dll。有点破解,但优雅的解决方案可以在以后出现。