从msbuild中的命令行导入.targets文件

Law*_*nce 9 msbuild command-line target

我目前正在使用msbuild构建多个项目.我对由.targets文件处理的构建进行了一个小的自定义.一种解决方案是添加代码段

<Import Project="MyTargets.targets"/>
Run Code Online (Sandbox Code Playgroud)

到每个项目文件.但是,理想情况下我不想触摸项目文件,并能够将此信息作为参数传递给msbuild.这样我就可以轻松控制是否从命令行运行此自定义,而且我不必触摸现有的项目文件.

这可能吗?

Ale*_*bak 6

您可以使用MSBuild 4.0轻松完成此操作(通过顶级属性ToolsVersion ="4.0"检查您的版本):

在加载Common.targets和/或CSharp.targets之前和之后,可以使用多个属性来导入目标.

最简单的方法是使用2组自解释属性.第一套是:$(CustomBeforeMicrosoftCommonTargets)$(CustomAfterMicrosoftCommonTargets)

第二个:

$(CustomBeforeMicrosoftCSharpTargets)
$(CustomAfterMicrosoftCSharpTargets)
Run Code Online (Sandbox Code Playgroud)

属性名称非常自我解释.

只需通过msbuild.exe将完整文件名传递给任何此属性即可

msbuild.exe /p:CustomBeforeMicrosoftCSharpTargets=c:\mytargets\custom.targets
Run Code Online (Sandbox Code Playgroud)

如果需要导入多个文件,可以使用其他"ImportByWildcard(Before | After)...."属性.但在这种情况下,您需要将更多参数传递给命令行.