我正在寻找一种方法来运行我定义的Target
只一次每个构建过程,而不是每个项目得到构建。
我在Directory.Build.props
<Target Name="MyTarget" AfterTargets="AfterBuild" >
<Message Text="Hello World!!!" Importance="High" />
</Target>
应该只运行一次,无论msbuild
进程正在构建多少个项目,目前它对每个项目都发生。
如果我在Visual Studio中击中(Re-)Build Soltution
或(Re-)Build [ProjectName]
或击中F5
,只要任何构建发生,我只想执行MyTarget
一次,这都不重要。
回答这个问题:
如果我的猜测是正确的,纯粹的msbuild函数是不够的,你必须使用外部文件来帮助它工作。
在解决方案文件夹中创建一个名为test.txt
的文件,并将0
写入txt文件。
Directory.Build.props
:
<Project>
<PropertyGroup>
<Record></Record>
</PropertyGroup>
<ItemGroup>
<File Include="..test.txt"></File>
</ItemGroup>
<Target Name="GetConditionValue" BeforeTargets="PrepareForBuild">
<ReadLinesFromFile File="@(File)">
<Output TaskParameter="Lines" PropertyName="Record"/>
</ReadLinesFromFile>
</Target>
<Target Name="MyTarget" AfterTargets="Build" Condition="'$(Record)'=='0'">
<WriteLinesToFile File="@(File)" Lines="2" Overwrite="true"></WriteLinesToFile>
<Message Text="Hello World!!!" Importance="High" />
</Target>
</Project>
,当你开始一个新的构建过程,你应该清除test.txt文件到0
来重新开始。