gpt4 book ai didi

c# - C# 库的绑定(bind)重定向

转载 作者:行者123 更新时间:2023-11-30 14:27:16 25 4
gpt4 key购买 nike

我有一个需要绑定(bind)重定向的 C# 库。该库本身引用了一个可执行文件,我已将重定向放在该可执行文件将使用的配置文件中:

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

exe 运行得非常好并读取重定向。问题是编译器抛出警告(冲突程序集),因为在编译时库不查看配置文件,因此不知道绑定(bind)重定向。

很遗憾,我的域中没有警告。关于如何抑制它的任何想法?或者我如何“强制”我的图书馆知道重定向?

警告的类型为 MSB3277。

最佳答案

The library itself references an executable

这似乎不太可能,EXE 项目肯定引用了该库。

The problem is the compiler throws a warning

这似乎不太可能,这看起来像是 MSBuild 而不是编译器显示的警告。

Warning is of type MSB3277

此警告通常包含更多有用的信息,如果您只看到这些信息,则需要修理您的机器。否则请尝试遵循警告中显示的提示并更改构建的详细程度。使用工具 > 选项 > 项目和解决方案 > 生成并运行 >“MSBuild 项目生成输出详细信息”> 更改为诊断。

使用 Build > Rebuild,您现在将在“输出”窗口中获得跟踪。您现在应该会看到类似于以下内容的诊断消息:

There was a conflict between "foobar, Version=1.42.0.0, Culture=neutral, PublicKeyToken="null" and "foobar, Version=1.666.0.0, Culture=neutral, PublicKeyToken="null".

"foobar, Version=1.42.0.0, Culture=neutral, PublicKeyToken="null" was chosen because it was primary and "foobar, Version=1.666.0.0, Culture=neutral, PublicKeyToken="null" was not.

或者一些这样的废话,显然你看到的确切文本对于决定下一步做什么非常重要,当你向任何人寻求帮助时不应该遗漏。


general 中,当您的项目依赖于某个库但不是同一版本的库时,就会显示这种警告。当它们未安装在 GAC 中时,这是一个问题,DLL 被复制到您的构建目录,一个将覆盖另一个。只有一个能活下来。

MSBuild 是为处理这个问题而编写的,它会根据“最佳猜测”选择其中一个可能造成最少麻烦的问题。它必须告诉你这件事,而不是那种你应该压制的警告,因为你的一个项目将获得一个它没有预料到的库版本。注意 <bindingRedirect>您使用抑制了这导致的通常致命的运行时错误。它非常不健康,需要进行彻底测试。

消除警告的唯一体面的方法是更改​​项目使用的依赖项,以便版本一致。请注意,这并不总是在您的控制之下,它可能不是您自己创建的库。特别是 Nuget 库的问题。在这种情况下,您必须咬紧牙关。如果公司政策禁止 checkin 使用此警告构建的项目(请记住,这不是编译器警告),那么您可以做的唯一合理的事情就是停止使用第 3 方库。

关于c# - C# 库的绑定(bind)重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33300563/

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