我有一个.Net标准库,我在尝试使用其中一个依赖库时遇到错误,我认为这是因为版本冲突。在旧式.Net类库中,我可能会添加如下内容:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
但是,我显然不能在Net Standard库中这样做;那么,我的问题是,在.Net标准世界中解决此类问题的策略是什么?
答案 0 :(得分:22)
绑定重定向是.NET框架概念,.NET Standard和.NET Core上没有绑定重定向。
但是,应用程序(实际的.NET Framework或.NET Core应用程序)需要解析要使用的文件。在.NET Core上,这是通过基于构建输入生成deps.json
文件并且.NET Framework应用程序使用绑定重定向来完成的。
如果需要绑定重定向,则必须将它们添加到使用.NET标准库的.NET Framework应用程序(或库)中。
这些绑定重定向也是在构建期间根据编译期间使用的程序集自动生成的,请参阅documentation on automatic binding redirects。当使用NuGet的新PackageReference
样式的NuGet包时,这是自动完成的。由于正确配置会因项目类型而异,请参阅公告Issues with .NET Standard 2.0 with .NET Framework & NuGet以获取详细说明。
确保使用正确的绑定重定向的最简单方法是确保.NET Framework应用程序或库设置这些属性(在csproj / vbproj中。对于生成.exe可执行文件的项目,不需要第二个属性)单元测试项目所需的):
<PropertyGroup>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>