如何在目标中获取msbuild进程的proc-id?我想读它并把它写出来?
或者,MSBuild是否有某种我们可以捕获的会话ID?
我想在每次构建运行时只运行一次T4任务,并考虑构建它的条件方式。否则它会多次运行
<TransformOnBuild>false</TransformOnBuild>
<TransformOnBuild Condition="'$(SomeCondition)' == 'true'">false</TransformOnBuild>
答案 0 :(得分:3)
如果你想将它包装在一个目标中,那么无论它被调用多少次,MSBuild都不会执行两次相同的目标。如果您想要一个简单的互斥锁,您可以使用通常的锁定文件技术,使用内置WriteLinesToFile
和Delete
任务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>