“复制本地”对于项目引用是否具有传递性?

2024-01-03

沃特。拟议的骗局:因为这里的问题表明了相反的情况链接问题 https://stackoverflow.com/questions/12386523/visual-studio-not-copying-content-files-from-indirectly-referenced-project,我宁愿认为是not a dupe.

First,我确实读过“复制本地”和项目参考的最佳实践是什么? https://stackoverflow.com/questions/280751/what-is-the-best-practice-for-copy-local-and-with-project-references (also this https://stackoverflow.com/questions/602765/when-should-copy-local-be-set-to-true-and-when-should-it-not)无论如何我都必须尝试一下,但是获得对此的一般反馈似乎是必要的,因为docs http://msdn.microsoft.com/en-us/library/vstudio/t1zz5y8c%28v=vs.100%29.aspx这些东西太可怕了,我只使用 VS2010,也许他们在新版本中改变了一些东西,很高兴知道。

Second,我只感兴趣project参考


似乎区分文件依赖项也很重要,其中依赖项引用 dll 程序集文件和项目依赖项(即我要问的),其中依赖项引用项目并隐式引用该项目的输出文件。

不完全是,不。

MSBuild 并不真正关心引用是否指向解决方案中的另一个项目或 DLL。

If ProjectA依赖于取决于ProjectB建造ProjectA ProjectB必须已经构建(并且是最新的),MSBuild 将提取其 DLL(不是其 C# 代码)并将其链接到ProjectA.

为了方便起见,添加项目引用而不是 DLL 是“语法糖”:这样 MSBuild 就知道它必须选择引用项目的输出,无论输出是什么。

否则,您必须手动预构建依赖项,找到其 DLL 并将其链接到项目,每当您切换构建配置、移动或重命名内容时都要重复该过程。不太实用。

另外两个dll也会被复制到输出目录吗?

如果直接从引用程序集的项目中使用依赖项中的任何类型的元素,则将复制该引用。

一个例子是这个解决方案布局:

  • 我的解决方案
  • MySolution.控制台应用程序
  • MySolution.FirstDependency
  • MySolution.第二个依赖项
  • MySolution.第三个依赖项
  • MySolution.FourthDependency

有了这个依赖链:

  • MySolution.控制台应用程序
  • MySolution.FirstDependency
    • MySolution.SecondDependency
      • MySolution.第三个依赖项
      • MySolution.FourthDependency

如果您构建此解决方案,您会注意到MySolution.ConsoleApplication输出目录将包含 DLLMySolution.FirstDependency, MySolution.SecondDependency and MySolution.ThirdDependency但没有 DLLMySolution.FourthDependency.

为什么会这样呢?当 MSBuild 构建时MySolution.SecondDependency它注意到有一个依赖项被声明为MySolution.FourthDependency,但因为它无法从中找到任何类型元素的任何用法MySolution.FourthDependency in MySolution.SecondDependency它决定执行一些“优化”并省略的代码MySolution.FourthDependency集会从输出。

过去,当我通过 NuGet AutoMapper 添加到“深度依赖项”时,同样的问题困扰着我:添加 AutoMapper 会添加两个程序集引用,AutoMapper and AutoMapper.Net4,当需要对 .NET Framework 4 引入的新集合对象执行某种操作时,第二个程序集由第一个程序集通过反射加载。由于第二个程序集是通过反射加载的,因此 MSBuild 认为它未使用,因此不会懒得复制它。

So, yes,只要您直接使用它们,它们就会被复制而不是通过反思。

这有记录在某处吗?

这种行为似乎是 MSBuild 的一个“功能”,当我遇到这个问题时,我设法找到了 Microsoft 一些人的博客文章,但目前我无法再次找到它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“复制本地”对于项目引用是否具有传递性? 的相关文章

随机推荐