MSBuild - 从命令行获取调用的目标

14

有人知道如何从MSBuild命令行中获取被调用的TARGET(/t)的名称吗?有几种类型的目标可以被调用,我想在通知用户时使用该属性。

示例:

msbuild Project.proj /t:ApplicationDeployment /p:Environment=DEV

我想在我的.proj文件中访问目标词语 ApplicationDeployment。 是否有可以访问的属性? 你知道如何做吗?

修改:我不想再传入属性来获取这个。

更新: 这是基于使用MSBuild脚本的部署脚本。 我的构建服务器不用于部署代码,只用于构建。 构建服务器本身具有可选择的构建通知。

4个回答

11
我不确定如何准确地完成您的要求,但您可以使用/p选项传递该字符串。
msbuild Project.proj /t:ApplicationDeployment /p:Environment=DEV;MyValue=ApplicationDeployment

我唯一能想到的另一种方法是在每个目标中使用条件属性,从而确立要调用的第一个目标。
<Target Name="ApplicationDeployment">
<PropertyGroup>
  <InvokedTarget Condition="'${InvokedTarget}'==''">ApplicationDeployment</InvokedTarget>
</PropertyGroup>

...
</Target>

我能做到,但我想知道如何访问目标本身。 - ferventcoder
谢谢你的反对票。我确实阅读了MSBuild文档以进行检查,并且我不认为MSBuild提供此信息。提供了解决方法。 - Tim Booker
属性组在目标内部无法工作。这太棒了,是吗? - ferventcoder
嗯,在Microsoft.TeamFoundation.Build.targets中有很多示例,其中PropertyGroup在target内部使用。也许这只是TeamBuild的特性。 - Tim Booker
这可能是一个 MSBuild 2008 的问题? - ferventcoder

8

我找到了答案!

<Target Name="ApplicationDeployment" >
    <CreateProperty Value="$(MSBuildProjectName) - $(Environment) - Application Deployment Complete">
      <Output TaskParameter="Value" PropertyName="DeploymentCompleteNotifySubject" />
    </CreateProperty>

我想要部分归功于apathetic,但不确定如何做到这一点。


4
这怎么回答你的问题了?这不会给你命令行上调用的目标列表,而是在特定任务执行时创建新属性。你的问题有误吗? - Franci Penov
本质上,这实现了相同的最终结果。这将允许您设置一个属性,可以告诉您所调用的目标是什么(在我的情况下是AppDeploy vs DBDeploy)。在到达每个目标的每个实例中,您都可以设置此相同的属性。我通过向我创建的值添加一些内容进行了更详细的阐述。 - ferventcoder

5

我不知道有什么方法可以做到这一点。MSBuild没有一个属性来列出所请求构建的目标。

然而,如果你找到了一种方法,请记住它可能不是单一的目标,而是要构建的目标列表。


-3

我建议使用像CCNET这样的服务器来处理构建执行和通知。当然,您可以对MSBuild脚本进行一些操作以发送通知,但该领域属于构建服务器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接