MSBuild + Visual Studio:自定义解决方案中所有项目的默认“复制本地副本”

3

我对MSBuild了解甚少。

最近,我读到了一个关于对于大型解决方案将“copy local”设置为false可以显著减少编译时间的方法。 我找到了一种方法,通过在MSBuild扩展路径中设置一个名为CustomAfterMicrosoftCommon.targets的机器级文件来将默认设置设置为false。

这个方法很有效,但是存在一些问题。

-这个默认值设置是系统范围内的,我希望它只针对特定的解决方案。我不想在项目级别上设置它,因为我在几个不同的解决方案中有很多项目。

-我希望这个默认值应用于“非输出项目”。我的意思是说,类库项目不应该将copy local设置为true。然而,主应用程序项目需要将copy local设置为true以便运行类库依赖项。 理想情况下,对于那些输出项目,我希望回退到更智能的开箱即用的默认值,它足够聪明,可以确定引用是否应该是私有的。我想我可以将默认值设置为Copy Local false,然后在必要的地方明确地将Copy Local设置为true。鉴于通常没有太多的输出项目,这并不太糟糕,但我想知道是否有人提出了更好的解决方案。

有什么想法吗?


你能详细解释一下你使用CustomAfterMicrosoftCommon文件的解决方案吗? - Petar Ivanov
1个回答

1

Msbuild会像这样查找目标扩展名:%MSBuildExtensionsPath%\v4.0\CustomAfterMicrosoftCommon.targets

因此,解决第一个问题的一种方法是在只有你想应用自己默认值的解决方案中设置MSBuildExtensionsPath

我用另一种方式解决了第二个问题。我仍然在“主应用程序项目”上保持copylocal=false。相反,我将其他项目的输出路径添加到DEVPATH环境变量中。

SET DEVPATH=C:\Proj1\Output;C:\Proj2\Output

(并根据此处指定的进行必要的更改)

编辑:

这里有一个关于如何使用项目或解决方案范围进行设置的好页面


你能详细解释一下如何仅为解决方案设置MSBuildExtensionsPath吗?那是一个环境变量吗?如果我打开命令提示符并键入echo %MSBuildExtensionsPath%,它看起来像这个变量甚至没有被定义。 - Clement
这是一个环境变量。如果未定义,msbuild将查找默认文件夹。(类似于c:\ Program Files \ MSBuild \ v4) - adrianm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接