我在一个复杂的解决方案中使用 NServiceBus(150 多个项目,其中许多使用 NSB)。直到昨晚,当我无法忍受时,每个项目都有自己的目标目录(./bin/debug 和./bin/release)。由于我的项目之间存在依赖关系,我多次构建和重新构建相同的二进制文件,因此我们决定将整个项目更改为共享输出目录,这极大地缩短了解决方案的构建时间。到目前为止,一切都很好...
但是,当我尝试启动我的项目时,它无法开始给我错误:
Warning 1 : Found conflicts between different versions of the same dependent assembly that could not be resolved. These reference conflicts are listed in the build log when log verbosity is set to detailed. C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets 1697 5 My.Assembly.Goes.Here
哦,哦。因此,我尽职尽责地调高了日志的详细程度,清理并重建了整个混乱,以便在日志输出中找到它:
30>------ Build started: Project: My.Assembly.Goes.Here, Configuration: Debug Any CPU ------
28>Building with tools version "12.0".
<Lots of stuff omitted...>
28> There was a conflict between "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" and "mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes".
28> "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" was chosen because it was primary and "mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes" was not.
28> References which depend on "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" [C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\mscorlib.dll].
<etcetera...>
出来了 Dependency Walker(很棒的工具,顺便说一句)。好的,那么什么取决于旧的 2.0 框架?寻找对 mscorlib 的每一个引用,并且......其中一个与另一个不同......
NServiceBus.Hosting.Azure 依赖于 Ionic.Zip.dll,而后者又依赖于 mscorlib.dll 的 2.0.0.0 版本。哎哟。FWIW,这样做的 NServiceBus.Hosting.Azure 版本是 5.3.2.0。
这在我看来类似于这里的问题:https ://github.com/Particular/NServiceBus/issues/664
我可以通过程序集绑定重定向解决这个问题吗?有什么方法可以让 NSB 告诉 Ionic.Zip.dll 4.0.0.0 版本的 mscorlib.dll 没问题,非常感谢?
或者这是一个 NSB 错误?
提前致谢。