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

时间:2009-07-21 15:00:11

标签: c# .net msbuild properties

我正在尝试以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: 

如何将此属性转换为Release目标?

1 个答案:

答案 0 :(得分:7)

动态项目和属性存在错误:

  

问题与在目标执行实际完成之前无法访问目标中创建的项和属性有关

(更多信息here)。

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

<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