程序集绑定重定向:如何以及为什么?

Nik*_*wal 102 c# assembly-binding-redirect

这不是一个问题问题,而是关于装配绑定重定向工作的一般性理解问题.

查询

  1. 为什么绑定重定向只显示主要版本而不显示次要,构建和修订号?
  2. 只有主要版本发生变化时,旧版本和新版本才会更改吗?

    <dependentAssembly>
        <assemblyIdentity name="FooBar"  
                          publicKeyToken="32ab4ba45e0a69a1"  
                          culture="en-us" />  
    
        <bindingRedirect oldVersion="7.0.0.0" newVersion="8.0.0.0" />  
    </dependentAssembly>
    
    Run Code Online (Sandbox Code Playgroud)

Evk*_*Evk 126

为什么需要绑定重定向?假设您有引用库B的应用程序A,以及版本1.1.2.5的库C. 库B反过来也引用库C,但是引用版本1.1.1.0.现在我们遇到了冲突,因为您无法在运行时加载同一程序集的不同版本.要解决此冲突,您可以使用绑定重定向,通常使用新版本(但也可以使用旧版本).您可以通过将以下内容添加到应用程序A的app.config文件的下面configuration > runtime > assemblyBinding部分(请参阅此处获取完整配置文件的示例):

<dependentAssembly>
    <assemblyIdentity name="C"  
                      publicKeyToken="32ab4ba45e0a69a1"  
                      culture="en-us" />  

    <bindingRedirect oldVersion="1.1.1.0" newVersion="1.1.2.5" />  
</dependentAssembly>
Run Code Online (Sandbox Code Playgroud)

您还可以指定要映射的版本范围:

<bindingRedirect oldVersion="0.0.0.0-1.1.1.0" newVersion="1.1.2.5" />  
Run Code Online (Sandbox Code Playgroud)

现在,库B,参考版本1.1.1.0的C编译,将在运行时使用版本1.1.2.5的C. 当然,您最好确保库C向后兼容,否则可能会导致意外结果.

您可以重定向任何版本的库,而不仅仅是主要版本.

  • @PaulMcCarthy 我认为 .NET 团队知道这是垃圾。值得庆幸的是,他们没有将这个“功能”带到 .NET Core 中。https://nickcraver.com/blog/2020/02/11/binding-redirects/ (3认同)
  • @AlexanderDerck 在应用程序 A 的配置文件中 - 它们在库的配置文件中没有影响(据我所知),除非这个库是单元测试库并且在某种意义上被单元测试运行器“执行”。 (2认同)

小智 32

我们遇到了NewtonSoft.Json的绑定重定向问题.我们在win 10文件属性"9.0.1.19813"中查找了文件版本,查找了数字并且重定向仍然失败.进一步调查,发现我们正在查看文件版本而不是汇编版本.所以,我想知道人们是否误解了文件版本(经常更改)和汇编版本(在Windows 10文件资源管理器中看不到).要查看dll的Assembly版本,可以在powershell中运行它.将dll名称替换为您要查找版本的名称.

[Reflection.AssemblyName]::GetAssemblyName('C:\development\bin\Newtonsoft.Json.dll').Version
Run Code Online (Sandbox Code Playgroud)

上面的结果是.

Major  Minor  Build  Revision

-----  -----  -----  --------

9      0      0      0
Run Code Online (Sandbox Code Playgroud)

参见参考文献:

我怎样才能在Windows Vista和更新版本中看到.NET程序集的汇编版本(WIndows 7,2008)?

https://support.microsoft.com/en-nz/help/556041

在此输入图像描述

  • 支持提出文件版本和程序集版本之间的差异! (7认同)