gpt4 book ai didi

c# - 托管类库中的版本独立引用依赖项

转载 作者:行者123 更新时间:2023-11-30 21:24:43 24 4
gpt4 key购买 nike

我正在为 log4net 开发一个 appender,我面临着如何管理我的类库所针对的 log4net 版本与站点上部署的实际版本的依赖关系的问题。我的类库必须引用 log4net dll,因此它与我在构建时引用的版本相关联。但是,将部署此组件的站点将有各种 log4net 版本,有些比我的旧,有些会更新。我应该如何处理这个问题?我不想为每个 log4net 新版本发布我的 appender 的新版本,并将正确匹配它们的负担放在我的用户身上。我也不想让我的 appender 用户做复杂的并排 list 技巧。我只希望将我的 appender 简单地复制到最终用户位置,并开箱即用地使用那里存在的任何 log4net 版本。

这可以实现吗?我是否遗漏了一些明显的东西?

更新:

唯一可行的解​​决方案是使用 list 。我测试了两个“自制”log4net 构建并添加以下配置部分解决了我的问题:

<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="log4net"
publicKeyToken="..."
culture="neutral" />
<bindingRedirect oldVersion="1.2.10.0"
newVersion="..."/>
</dependentAssembly>
</assemblyBinding>
</runtime>

其中 publicKeyToken 是真实 log4net 程序集的实际 key token ,1.2.10 是我的 appender 构建时使用的版本,newVersion 是现场当前部署的版本。该部分可以添加到已部署的 appconfig 或 webconfig(也可以在机器配置中完成,但我不建议这样做...)。

最佳答案

很多项目都存在您刚才描述的相同问题。据我所知,这不是您作为发布者可以控制的事情。你可以设置一个 publisher policy这允许您在引用旧版本程序集时自动指定应使用程序集的特定版本,但无法为您无法控制的程序集(如 log4net)指定此版本。

在您的用户端,管理员可以通过 assembly redirect 重定向到特定版本来指定对旧版本 log4net(您的程序集可能引用)的请求。 .

关于c# - 托管类库中的版本独立引用依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1066950/

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