如何在msbuild中动态定义属性并将其传递给另一个目标?

4

我正在尝试以Ant的方式重用任务:

   <Target Name="Release">
        <Message Text="Env: $(Env)"/>
   </Target>
   <Target Name="ReleaseIntegration">
    <CreateProperty Value="Development">
      <Output TaskParameter="Value" PropertyName="Env" />
    </CreateProperty>
    <Message Text="Env: $(Env)"/>
    <CallTarget Targets="Release"/>
  </Target>

我得到了:
Env: Development
Env: 

有什么办法可以将此属性添加到发布目标中吗?
1个回答

7

动态项和属性存在一个bug:

问题在于在目标执行完成之前无法访问在目标内创建的项和属性。

(更多信息请参见这里)。

解决方法很简单:使用一个单独的目标来创建属性。

<Target Name="Release">
  <Message Text="Env: $(Env)"/>
</Target>

<Target Name="CreateProperty">
  <CreateProperty Value="Development">
    <Output TaskParameter="Value" PropertyName="Env" />
  </CreateProperty>      
</Target>

<Target Name="ReleaseIntegration" DependsOnTargets="CreateProperty">
  <Message Text="Env: $(Env)"/>
  <CallTarget Targets="Release"/>
</Target>

您将获得:

Env: Development
Env: Development

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