一尘不染

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

c#

这不是问题问题,而是有关程序集绑定重定向工作的一般理解问题。

查询

  1. 为什么绑定重定向仅显示主要版本而不显示次要版本,内部版本和修订版本号?
  2. 仅当主要版本发生变化时,旧版本和新版本才会更改吗?
    <dependentAssembly>
    <assemblyIdentity name="FooBar"  
                      publicKeyToken="32ab4ba45e0a69a1"  
                      culture="en-us" />
    
    <bindingRedirect oldVersion="7.0.0.0" newVersion="8.0.0.0" />
    


阅读 495

收藏
2020-05-19

共1个答案

一尘不染

为什么根本需要绑定重定向?假设您有引用库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>

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

<bindingRedirect oldVersion="0.0.0.0-1.1.1.0" newVersion="1.1.2.5" />

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

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

2020-05-19