【发布时间】:2018-03-15 13:11:59
【问题描述】:
我有一个包含多个项目的解决方案,这些项目安装了 nuget 软件包,它们的版本不同。在重建解决方案时看起来,复制到输出目录的 dll 版本不是确定性的,并且由于显而易见的原因,我经常会出现运行时“file not found”异常。我将尝试通过以下示例简单地解决问题:
假设 ProjectA 是 cossole 应用程序并引用程序集 xyz 的 version 1.0.0。
ProjectA 还通过项目参考在同一解决方案中引用 ProjectB。现在假设ProjectB 引用version 2.0.0 的程序集xyz。
我想知道何时重建解决方案,是否确定将哪个版本的xyz dll 复制到输出目录?如果没有,有没有办法确保这一点。我知道在这种情况下我需要使用适当的绑定重定向策略更新配置。
【问题讨论】:
-
这应该由 MSBuild 解决,它会查看引用及其依赖关系并尝试找到解决方案。根据需要将 BindingRedirects 添加到配置文件中,以使 CLR 相信它可能会起作用。如果没有详细的构建跟踪,它只是在猜测为什么没有发生这种情况。考虑链接到一个粘贴箱来回答这个问题。
-
@HansPassant :这里是 link 粘贴 bin。所以它是日志 - projectA(控制台应用程序)指的是 ProjectB 类库。 ProjectB 指的是 Newtonsoft.json.dll 的 8.0.0 版本,而 ProjectA 具有 Newtonsoft.json.dll 的 11.0.0 版本。但是,重建后我的最终 o/p 目录的版本为 11.0.0。我试图从日志中了解 msbuild 是否最初复制了 8.0.0 版本,然后用 11.0.0 版本覆盖它。
标签: c# visual-studio msbuild assembly-resolution