ChatGPT解决这个技术问题 Extra ChatGPT

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

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

查询

为什么绑定重定向只显示主要版本而不是次要版本号和修订号?新旧版本是否只有在主要版本发生变化时才会发生变化?

它可以是任何版本,而不仅仅是主要版本。例如:oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0"
@Evk:我看到的所有示例仅显示主要版本。
好吧,这些只是示例,并且没有任何地方说这是唯一可能的方法。

L
Little Endian

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

<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" />  

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

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


这些文件放在哪个文件和哪个部分?有人可以提供指向 MSDN 或类似资源的链接以供参考吗?请记住,人们会从整个搜索引擎领域登陆您的 SO Q/A 文章,并且参考是至关重要的。我有一位同事告诉我“只需将程序集重定向添加到您的 exe 文件”就在休假一周之前,我降落在这里,虽然这个答案看起来不错,但缺乏上下文和参考。
@AlexanderDerck 在应用程序 A 的配置文件中 - 它们在库的配置文件中没有任何影响(据我所知),除非这个库是单元测试库并且在某种意义上由单元测试运行器“执行”。
@AlexanderDerck 几周前有一个问题,有很多人赞成甚至赏金,这正是在问这个问题,但没有人能够提供令人信服的答案 - stackoverflow.com/q/48377474/5311735
@CodeEngine publicKeyToken 标识程序集 C。只有签名程序集具有标识它们的公钥令牌。下面是一个相关问题,如果您有程序集,如何找出该令牌:stackoverflow.com/q/3045033/5311735
@PaulMcCarthy 我认为.NET 团队知道这是垃圾。值得庆幸的是,他们没有将这个“功能”带到 .NET Core。 nickcraver.com/blog/2020/02/11/binding-redirects
A
Amyth

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

[Reflection.AssemblyName]::GetAssemblyName('C:\development\bin\Newtonsoft.Json.dll').Version

上面的结果是。

Major  Minor  Build  Revision

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

9      0      0      0

请参阅参考资料:

How can i see the assembly version of a .NET assembly in Windows Vista and newer (WIndows 7, 2008)?

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

https://i.stack.imgur.com/jR6cv.jpg