gpt4 book ai didi

c# - .NET 6 如何处理程序集引用冲突?

转载 作者:行者123 更新时间:2023-12-05 05:44:33 26 4
gpt4 key购买 nike

假设我有项目 A、B 和 C。项目 A 引用项目 B (v. 2.0.0.0) 和 C (v. 3.0.0.0)。项目 B 仅引用项目 C (v. 1.0.0.0)。我们遇到了冲突,因为项目 A 和 B 依赖于项目 C 的不同程序集版本。在 .NET 框架中,我们使用绑定(bind)重定向解决了这个问题。在项目 A 的 app.config 文件(作为主项目)中,我们添加:

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

<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>

我相信绑定(bind)重定向不再是 .NET Core 和 .NET 5 forward 中的东西。我们不引用程序集,而是引用 NuGet 包或项目。我的问题是:这个问题在较新版本的 .NET 中是如何解决的?为什么绑定(bind)重定向首先是一件事情?希望我的问题是有道理的。

最佳答案

正如其他人所指出的,包版本与程序集版本完全不同。最后,您的构建仍然指的是一个程序集。恰好程序集以包的形式交付到您的构建环境。

.Net 5+ 不(默认情况下)要求运行时使用的程序集版本与构建时使用的程序集版本相匹配是正确的。

我推测 .Net 的早期设计试图解决“DLL hell ”问题。通过形式化 DLL 版本的概念(通过将版本放在程序集的元数据中),应用程序可以验证它正在获得它期望获得的版本,因此会有可靠的行为。尽管如此,您有时仍希望能够使用较新的版本,而无需重建引用的应用程序,因此提供了

.Net Core 认识到它不是一个成功的设计。新方法 a) 忽略强命名:它不影响行为。 b) 默认在运行时允许任何版本,并且 c) 提供一种新的机制来执行版本策略:AssemblyLoadContext

关于c# - .NET 6 如何处理程序集引用冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71585740/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com