是否可以导入msbuild目标,其中其位置是目标中定义的属性



是否有一种方法可以在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生成目标,然后在同一会话中导入它们

最新更新