如何在msbuild目标中获取进程id
如何在目标中获取msbuild进程的进程id?我想把它读出来写出来 或者,MSBuild是否具有某种可以捕获的会话id 我想在每次构建运行时只运行一次T4任务,并考虑一种有条件的构建方法。否则它会运行多次如何在msbuild目标中获取进程id,msbuild,Msbuild,如何在目标中获取msbuild进程的进程id?我想把它读出来写出来 或者,MSBuild是否具有某种可以捕获的会话id 我想在每次构建运行时只运行一次T4任务,并考虑一种有条件的构建方法。否则它会运行多次 <TransformOnBuild>false</TransformOnBuild> <TransformOnBuild Condition="'$(SomeCondition)' == 'true'">false</TransformOnBuild&
<TransformOnBuild>false</TransformOnBuild>
<TransformOnBuild Condition="'$(SomeCondition)' == 'true'">false</TransformOnBuild>
false
假的
如果希望在将某个对象包装到目标中后运行该对象,那么无论调用了多少次,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>
请重新表述您的问题(基本上,您的最后一段是q,其余部分是您考虑的可能的解决方案,可能无论如何都不会奏效),并添加更多信息:您的“每次构建一次”是什么意思?您是否正在构建一个包含多个项目的解决方案,并且希望只运行一次任务?或者您正在使用自定义生成文件?还是别的什么?现在每个项目都定义了目标吗?或者为什么它会运行多次?