如何在MSBuild中执行自定义exe以在属性评估阶段设置环境变量

时间:2016-02-03 19:40:39

标签: visual-studio visual-c++ msbuild msbuild-task msbuild-4.0

我正在尝试从目录导入一些道具和目标文件,该目录是用户指定的位置。为了确定这个目录,我有一些自定义逻辑,我试图在其中一个道具中找到一种方法来执行它。我无法使用标准的MSBUILD属性函数来实现此目的。

我的最终目标是拥有一个允许用户指定此目录的小UI,并且该目录的范围必须绑定到项目,即,可能有两个不同的项目指向解决方案中的两个不同目录

1 个答案:

答案 0 :(得分:1)

在摆弄完所有要求后再次调用构建脚本怎么样?每次调用将MSBuild作为$(MSBuildProjectFile)值的Projects任务,都会再次调用您的构建文件,并且该调用将有一个新的环境副本。

<Project DefaultTargets="EntryPoint" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">   
    <Target Name="SetProperties">
        <PropertyGroup>
            <PropA>Something</PropA>
        </PropertyGroup>
    </Target>

    <Target Name="EntryPoint">
        <MSBuild
            Projects="$(MSBuildProjectFile)"
            Properties="Configuration=$(Configuration);OutputPath=$(OutputPath);"
            Targets="SetProperties;EntryPoint"
            Condition="$(PropA) == ''"/>
        <Message
            Text="Everything is set!"
            Condition="$(PropA) != ''"/>
    </Target>
</Project>

可以轻松扩展此设置以执行某些Exec任务逻辑,并将该输出转发到对入口点的新调用。