是否有一种方法可以在msbuild中使用Import指令,使项目属性的值是一个变量,并且该变量在目标中定义?
在我看来,Import指令是在任何目标之前求值的。
例如:<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PublishDir>none</PublishDir>
<AutomatedTestsTarget>none</AutomatedTestsTarget>
</PropertyGroup>
<Target Name="GetPublishDir">
...
</Target>
<Target Name="BeforeCompile" DependsOnTargets="GetPublishDir">
<PropertyGroup>
<AutomatedTestsTarget>$(PublishDir)automated_tests.build</AutomatedTestsTarget>
</PropertyGroup>
</Target>
<Import Project="$(AutomatedTestsTarget)"/>
</Project>
Frankensolution
快速解决方案(根据注释),两个msbuild调用,首先写一个文件。第二步是这样导入的(通过从文件中读取路径):
<PropertyGroup>
<AppRootDir>$([System.IO.File]::ReadAllText($(MSBuildProjectDirectory)directory.txt))..automation</AppRootDir>
</PropertyGroup>
No。导入发生在"评估阶段",而不是"执行阶段"。
在构建的评估阶段…导入的文件按照它们出现的顺序合并到构建中…属性是按照它们出现的顺序定义和修改的。
http://msdn.microsoft.com/en-us/library/dd997067.aspx
你可以拆分你的配置集合&在不同的msbuild项目中执行,其中一个调用另一个。
ie:使用MSBuild生成目标,然后在同一会话中导入它们