0

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

就目前而言,在我看来,导入指令是在任何目标之前评估的。

例如:

<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>

弗兰肯解决方案

快速解决方案(根据评论),两个 msbuild 调用,首先写入一个文件。其次以这种方式导入(通过从文件中读取路径):

<PropertyGroup>
    <AppRootDir>$([System.IO.File]::ReadAllText($(MSBuildProjectDirectory)\directory.txt))\..\automation\</AppRootDir>
</PropertyGroup>
4

1 回答 1

0

不会。导入发生在“评估阶段”,而不是“执行阶段”。

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

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

您可以将您的配置收集和执行拆分为单独的 msbuild 项目,一个调用另一个。

即:使用 MSBuild 生成目标,然后在同一会话中导入它们

于 2013-05-07T01:25:51.753 回答