我对MSBuild知之甚少。
最近我读到,对于大型解决方案,将'copy local'设置为false可以显着减少编译时间。 我找到了一种方法,通过在MSBuild扩展路径中设置名为CustomAfterMicrosoftCommon.targets的计算机范围文件,将默认设置设置为false。
这很有效,但是这种方法存在一些问题。
- 这个默认值设置是系统范围的,我希望它只适用于特定的解决方案。我不是在项目层面,因为我有很多不同的解决方案。
- 我希望将此默认值应用于“非输出项目”。我的意思是类库项目不应该将本地设置复制为true。但是,主应用程序项目需要将类本地副本复制为类,因为它需要运行。 理想情况下,对于那些输出项目,我想回退到更智能的开箱即用默认值,该值足够聪明,以确定引用是否应该是私有的。我想我可以将默认值设置为Copy Local false,然后在任何需要的地方明确地将Copy Local设置为true。考虑到你通常没有很多输出项目但是我想看看是否有人提出了更好的解决方案,这并不算太糟糕。
有什么想法吗?
答案 0 :(得分:1)
Msbuild找到这样的目标扩展
%MSBuildExtensionsPath%\v4.0\CustomAfterMicrosoftCommon.targets
因此解决第一个问题的一种方法是以某种方式仅为要应用自己默认值的解决方案设置MSBuildExtensionsPath
。
我以另一种方式解决了第二个问题。我还在“主要应用程序项目”上保留了copylocal=false
。相反,我将另一个项目的输出路径添加到DEVPATH环境变量。
SET DEVPATH=C:\Proj1\Output;C:\Proj2\Output
(并按照指定here对<。p>进行必要的更改。)
修改强>
Here is nice page about how to make settings with project or solution scope