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

时间:2013-05-07 00:05:30

标签: msbuild

有没有办法在msbuild中使用Import指令,以便Project属性的值是一个变量,并且该变量是在目标中定义的?

就目前而言,在我看来,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>

1 个答案:

答案 0 :(得分:0)

没有。进口发生在“评估阶段”,而不是“执行阶段”。

  

在构建的评估阶段...导入的文件按照它们出现的顺序合并到构建中...属性按它们出现的顺序定义和修改。

     

http://msdn.microsoft.com/en-us/library/dd997067.aspx

您可以拆分配置收集&amp;执行到单独的msbuild项目中,一个调用另一个。

ie:Generate targets with MSBuild then import them in same session