【问题标题】:Is it possible to import an msbuild target where its location is property defined in a target?是否可以导入一个 msbuild 目标,其位置是在目标中定义的属性?
【发布时间】:2013-05-08 13:05:05
【问题描述】:

有没有办法在 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>

弗兰肯解决方案

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

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

【问题讨论】:

  • 为了它的价值,我通过两个 msbuild 调用解决了这个问题;第一个将文件(包含路径)写入磁盘。第二个调用读取文件并以这种方式检索发布目录。

标签: msbuild


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多