MSBuild + Visual Studio:为解决方案中的所有项目自定义默认“复制本地”
Posted
技术标签:
【中文标题】MSBuild + Visual Studio:为解决方案中的所有项目自定义默认“复制本地”【英文标题】:MSBuild + Visual studio: Customize default "Copy Local" for all projects in the solution 【发布时间】:2011-09-09 01:46:03 【问题描述】:我对 MSBuild 知之甚少。
最近我读到将大型解决方案的“本地复制”设置为 false 可以显着减少编译时间。 我找到了一种将默认设置设置为 false 的方法,方法是在 MSBuild 扩展路径中设置一个名为 CustomAfterMicrosoftCommon.targets 的机器范围文件。
这种方法效果很好,但是这种方法存在一些问题。
-此默认值设置是系统范围的,我希望它仅适用于特定解决方案。我不在项目级别这样做,因为我在几个不同的解决方案中有很多。
-我希望将此默认值应用于“非输出项目”。我的意思是类库项目不应该将本地复制设置为true。但是,主应用程序项目需要将类库依赖项复制为 true,因为它需要运行。 理想情况下,对于那些输出项目,我想回退到更智能的开箱即用默认值,该默认值足够聪明,可以确定引用是否应该是私有的。我想我可以将默认的 Copy Local 设为 false,然后在需要的地方明确地将 Copy Local 设置为 true。鉴于您通常没有很多输出项目,这还不错,但我想看看是否有人提出了更好的解决方案。
有什么想法吗?
【问题讨论】:
您能否使用 CustomAfterMicrosoftCommon 文件更详细地解释您的解决方案? 【参考方案1】:Msbuild 像这样找到目标扩展
%MSBuildExtensionsPath%\v4.0\CustomAfterMicrosoftCommon.targets
因此,解决您的第一个问题的一种方法是以某种方式仅将 MSBuildExtensionsPath
设置为您想要应用自己的默认值的解决方案。
我用另一种方式解决了第二个问题。我还在“主应用程序项目”中保留了copylocal=false
。相反,我将另一个项目的输出路径添加到 DEVPATH 环境变量中。
SET DEVPATH=C:\Proj1\Output;C:\Proj2\Output
(并按照here 的规定对 machine.config 进行必要的更改)
编辑:
Here is nice page about how to make settings with project or solution scope
【讨论】:
您能否更详细地解释您如何仅为解决方案设置 MSBuildExtensionsPath ?那是环境变量吗?如果我打开命令提示符并键入 echo %MSBuildExtensionsPath%,看起来这个变量甚至没有定义。 它是一个环境变量。如果未定义,msbuild 将在默认文件夹中查找。 (类似于 c:\Program Files\MSBuild\v4)以上是关于MSBuild + Visual Studio:为解决方案中的所有项目自定义默认“复制本地”的主要内容,如果未能解决你的问题,请参考以下文章
如何找出Visual Studio发送给MSBuild的命令?
MSBuild、未解决的外部和 Visual Studio 2005
MSBuild 是不是需要安装 Visual Studio?