1

我有一个包含三个项目的 Visual Studio 2012 解决方案。结构的简单依赖图是:

  • 控制台UI
    • 子项目
      • Newtonsoft.Json.dll
      • RestSharp.dll
      • ...
    • ...

我遇到的问题是在编译 ConsoleUI 时,RestSharp 未复制到输出,但 Newtonsoft.Json 在我的应用程序中导致运行时错误。

我已经在 SubProject 的项目属性中检查了 Copy Local 是否设置为 true。

我已经完成了完整的清理和构建,但无济于事。

任何人都可以在不手动将所需程序集包含在 ConsoleUI 中的情况下想出一个解决方案吗?

4

2 回答 2

2

这听起来像是 MSBuild 中长期存在的行为。当您构建 ConsoleUI 时,哪些程序集实际上会在本地复制,计算基于:

  • 项目的主要参考资料(在本例中为子项目)
  • 任何编译器检测到的从您的主要引用到它们的引用的引用(在这种情况下,SubProject -> Newtonsoft.Json 被检测到,但 * -> RestSharp 没有被检测到)。

解决此问题的两种方法是:

  1. 添加一个从 SubProject 到 RestSharp 的显式调用(因为任何其他 DLL 都不受您的控制),编译器无法忽略。这可能并不理想,因为它是一次性代码。
  2. 使 RestSharp 成为 ConsoleUI 的主要参考。
于 2012-09-26T00:15:15.173 回答
0

清理你的项目,删除所有对 RestSharp 的引用,关闭 Visual Studio,手动删除 bin 和 obj 文件夹。然后重新启动您的项目并添加一个 Nuget 包参考:它肯定会解决您的问题。

于 2012-09-25T20:23:16.030 回答