【问题标题】:Is Visual Studio optimizing transitive references?Visual Studio 是否在优化传递引用?
【发布时间】:2014-01-26 15:37:48
【问题描述】:

对于这个不太清楚的标题,我很抱歉。

我在 Visual Studio (2010) 中遇到了一个奇怪的行为。

假设我的解决方案中有三个项目:A、B 和 C。

A has a reference on B

B has a reference on C

C has a reference on an assembly (log4net.dll)

全部配置为Copy Local True

我负责项目 A,另外两个开发人员负责项目 B 和 C。

项目 B 在其一个类中使用了驻留在项目 C 中的多个(静态)方法。我正在使用 B 中的其他类,它们没有使用 C 中的任何东西。

当我构建解决方案时(项目A配置为主项目),我希望在项目A的输出文件夹中看到C的结果及其引用的程序集。实际发生的是C的结果被复制了到 B 的输出文件夹,但在 A 的输出文件夹中不存在。

我花了一些时间才弄清楚这是因为 A 没有使用 C 中的任何东西(直接或间接)。

所以问题是:它是 Visual Studio 的内置优化功能还是我做错了什么?

【问题讨论】:

  • 是的,MSBuild 肯定知道如何做到这一点。很多程序员都有超过 10 个项目的解决方案,如果该功能不起作用,他们的工作将相当悲惨。您问题中的信息没有给出任何提示可能有什么问题,请将 MSBuild 详细程度更改为“诊断”以获取详细跟踪。由于您刚刚开始将这些项目放在一起,因此实际上不使用参考是简单的解释。
  • @HansPassant:很多程序员确实有 10 多个项目的解决方案,但这并不意味着其中一个会在显式引用链中引用所有其他的。
  • 当然,这正是重点。如果存在这些链很容易,但它们在实际解决方案中几乎从不存在。但一切仍然被正确复制。
  • @HansPassant 谢谢,问题是可以独立于 A 使用项目 B。我希望将 A 和 B 一起部署并节省一些空间。但是 B 需要 C 独立运行,所以我无法做到这一点。
  • 你可以通过这个[链接](stackoverflow.com/questions/280751/…)。可能对你有帮助。

标签: c# visual-studio-2010


【解决方案1】:

是的,这是一项功能。如果您不使用引用程序集中的任何类型,则不会复制它。

【讨论】:

  • 这里的解决方案可以是更改项目的属性,以便所有项目使用相同的文件夹进行输出。
  • 您好,谢谢!你对此有什么参考吗?我可以禁用此行为吗?
猜你喜欢
  • 2014-05-21
  • 2013-03-03
  • 2015-05-17
  • 2011-01-03
  • 2019-05-12
  • 1970-01-01
  • 1970-01-01
  • 2012-11-15
  • 2011-09-04
相关资源
最近更新 更多