如何在msbuild目标中获取进程ID

时间:2014-08-09 06:15:38

标签: msbuild

如何在目标中获取msbuild进程的proc-id?我想读它并把它写出来?

或者,MSBuild是否有某种我们可以捕获的会话ID?

我想在每次构建运行时只运行一次T4任务,并考虑构建它的条件方式。否则它会多次运行

<TransformOnBuild>false</TransformOnBuild>
<TransformOnBuild Condition="'$(SomeCondition)' == 'true'">false</TransformOnBuild>

1 个答案:

答案 0 :(得分:3)

如果你想将它包装在一个目标中,那么无论它被调用多少次,MSBuild都不会执行两次相同的目标。如果您想要一个简单的互斥锁,您可以使用通常的锁定文件技术,使用内置WriteLinesToFileDelete任务InitialTargets。如果您想要实际进程ID,即正在执行任务的MSBuild节点(许多),您可以编写内联任务,请参阅下面的示例。

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <UsingTask TaskName="Process" TaskFactory="CodeTaskFactory" AssemblyName="Microsoft.Build.Tasks.v12.0">
    <ParameterGroup>
      <Id ParameterType="System.Int32" Output="true" />
    </ParameterGroup>
    <Task>
      <Code>Id = System.Diagnostics.Process.GetCurrentProcess().Id;</Code>
    </Task>
  </UsingTask>

  <Target Name="Foo">
    <Process>
      <Output PropertyName="Id" TaskParameter="Id" />
    </Process>
    <Message Text="Process $(Id)" />
  </Target>
</Project>