Я ищу способ запускать определенный Target только один раз для каждого процесса сборки, а не для каждого проекта, который получает сборку.
Я определил следующее в Directory.Build.props
<Target Name="MyTarget" AfterTargets="AfterBuild" >
<Message Text="Hello World!!!" Importance="High" />
</Target>
Должен запускаться только один раз, независимо от того, сколько проектов создает msbuild процесс, в настоящее время это происходит для каждого проекта.
Не имеет значения, нажму ли я (Re-)Build Soltution, (Re-)Build [ProjectName] или F5 в Visual Studio, пока выполняется любая сборка, я хочу выполнить MyTarget только один раз.
Ответ 1 · рейтинг 1 · Mr Qian
Просто ответьте на эту ситуацию:
Если мое предположение верно, чистой функции msbuild недостаточно, и вам нужно использовать внешний файл, чтобы она работала.
создайте файл с именем test.txt в папке решения и напишите 0 в текстовом файле.
Затем измените свой 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, чтобы начать новый процесс.