【问题标题】:Adding a bindingRedirect to a .Net Standard library将 bindingRedirect 添加到 .Net 标准库
【发布时间】:2018-02-17 02:25:28
【问题描述】:

我有一个 .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 标准世界中解决此类问题的策略是什么?

【问题讨论】:

标签: .net dependencies .net-standard assembly-binding-redirect


【解决方案1】:

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

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

如果需要绑定重定向,则必须将它们添加到使用 .NET Standard 库的 .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>

【讨论】:

  • 将这些属性应用于我的 .Net Framework 库(不是 exe)不会导致添加绑定重定向。我有一个使用&lt;PackageReference&gt; 条目的.Net Framework 类库。该项目有一个 app.config。尽管构建抱怨我应该添加它们,但仍然没有自动添加绑定重定向。我可以手动添加它们,但最好能自动添加。
  • PackageReference 与这些重定向并没有太大关系。有了这些 nuget 就不再触及 app.config 并且 msbuild 执行重定向生成并将它们添加到输出中生成的 TheApp.config 中。如果 app.config 中已经存在重定向,则不确定如何交互
  • 确保您的根应用程序项目不使用packages.config,而是将PackageReference 用于NuGet 包。 Issues with .NET Standard 2.0 with .NET Framework & NuGet
  • 我是否遗漏了什么,或者这个答案只是描述了如何在 .NET Framework 中使用绑定重定向,而实际上并没有解释在 .NET Core 中可以使用哪些等效功能?答案暗示我需要对.deps.json 文件做something,但我仍然完全不知道那个something 可能是什么。
  • 我第二个上面的问题,如何使用或修改.deps.json?
猜你喜欢
  • 2018-11-28
  • 1970-01-01
  • 2011-10-15
  • 2016-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-12
相关资源
最近更新 更多