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

R.D*_*R.D 2 msbuild

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

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

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

<TransformOnBuild>false</TransformOnBuild>
<TransformOnBuild Condition="'$(SomeCondition)' == 'true'">false</TransformOnBuild>
Run Code Online (Sandbox Code Playgroud)

Ily*_*kov 5

如果您想在可以将其包装在目标中后运行某些内容,则无论调用多少次,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>
Run Code Online (Sandbox Code Playgroud)