将bindingRedirect添加到.Net标准库

Pau*_*els 17 .net dependencies assembly-binding-redirect .net-standard

我有一个.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>
Run Code Online (Sandbox Code Playgroud)

但是,我显然不能在Net Standard库中这样做; 所以,我的问题是,在.Net标准世界中解决此类问题的策略是什么?

Mar*_*ich 26

绑定重定向是.NET框架概念,.NET Standard和.NET Core上没有绑定重定向.

但是,应用程序(实际的.NET Framework或.NET Core应用程序)需要解析要使用的文件.在.NET Core上,这是通过deps.json基于构建输入生成文件并且.NET Framework应用程序使用绑定重定向来完成的.

如果需要绑定重定向,则必须将它们添加到使用.NET标准库的.NET Framework应用程序(或库)中.

这些绑定重定向也可以在构建期间根据编译期间使用的程序集自动生成,请参阅有关自动绑定重定向的文档.当使用NuGet PackageReference使用NuGet包的新风格时,这是自动完成的.由于正确配置会因项目类型而异,因此请参阅.NET Framework与NuGet的.NET Standard 2.0公告,以获取详细说明.

确保使用正确的绑定重定向的最简单方法是确保.NET Framework应用程序或库设置这些属性(在csproj/vbproj中.对于生成.exe可执行文件但需要单元的项目,不需要第二个属性测试项目):

<PropertyGroup>
    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
    <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

  • 我是否遗漏了某些内容,或者这个答案只是描述了如何在 .NET Framework 中使用绑定重定向,而实际上并没有解释可以在 .NET Core 中使用哪些等效功能?答案意味着我需要对“.deps.json”文件做“一些事情”,但我仍然完全不知道“一些事情”可能是什么。 (4认同)
  • 我同意上面的问题,如何使用或修改 .deps.json? (3认同)
  • 将这些属性应用到我的 .Net Framework 库(不是 exe)不会导致添加绑定重定向。我有一个使用 `&lt;PackageReference&gt;` 条目的 .Net Framework 类库。该项目有一个app.config。尽管构建抱怨我应该添加绑定重定向,但绑定重定向仍然没有自动添加。我可以手动添加它们,但如果能自动添加就更好了。 (2认同)
  • 我的构建正确创建了 .deps.json,但可执行文件无法加载正确的依赖项,并出现以下错误:“无法加载文件或程序集...找到的程序集的清单定义与程序集引用不匹配。” (0x80131040)`。我需要使用不同版本的依赖项运行我的应用程序,但修改 deps.json 似乎毫无用处 (2认同)