Предварительная и последующая цель в Visual Studio не срабатывают
Я делаю следующее:
- Я создал проект файла класса по умолчанию
- Отредактирован файл csproj для включения Pre и Post BuildEvents
- Раскомментируйте отмеченные по умолчанию объекты BeforeBuild и AfterBuild
Цели BeforeBuild и AfterBuild не называются в Visual Studio, но из командной строки msbuild, почему?
Я предпочел бы использовать цели msbuild, а не PostBuildEvent, как будто это дает мне больше мощности и гибкости, если он работает.
Приветствия,
адам
Я сократил некоторые из путей на выходе, поэтому, если они непоследовательны, поэтому
ClassLibrary1.csproj изменяет
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="BeforeBuild">
<Message Text="### BeforeBuild ###" />
</Target>
<Target Name="AfterBuild">
<Message Text="### AfterBuild ###" />
</Target>
<PropertyGroup>
<PreBuildEvent>echo PRE_BUILD</PreBuildEvent>
</PropertyGroup>
<PropertyGroup>
<PostBuildEvent>echo POST_BUILD</PostBuildEvent>
</PropertyGroup>
Мой вывод сборки из VS 2010
------ Rebuild All started: Project: ClassLibrary1, Configuration: Debug Any CPU ------
PRE_BUILD
ClassLibrary1 -> c:\ClassLibrary1\bin\Debug\ClassLibrary1.dll
POST_BUILD
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========
и из командной строки
#>msbuild ClassLibrary1.sln
Microsoft (R) Build Engine Version 4.0.30319.1
[Microsoft .NET Framework, Version 4.0.30319.239]
Copyright (C) Microsoft Corporation 2007. All rights reserved.
Build started 09/05/2012 13:27:42.
Project "c:.sln" on node 1 (default targets).
ValidateSolutionConfiguration:
Building solution configuration "Debug|Any CPU".
Project "c:.sln" (1) is building "c:\ClassLibrary1.csproj" (2) on node 1 (default targets).
BeforeBuild:
### BeforeBuild ###
PreBuildEvent:
echo PRE_BUILD
PRE_BUILD
GenerateTargetFrameworkMonikerAttribute:
Skipping target "GenerateTargetFrameworkMonikerAttribute" because all output files are up-to-date with respect to the input files.
CoreCompile:
Skipping target "CoreCompile" because all output files are up-to-date with respect to the input files.
CopyFilesToOutputDirectory:
ClassLibrary1 -> c:\bin\Debug\ClassLibrary1.dll
PostBuildEvent:
echo POST_BUILD
POST_BUILD
AfterBuild:
### AfterBuild ###
Done Building Project "c:\ClassLibrary1.csproj" (default targets).
Done Building Project "c:.sln" (default targets).
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:00:00.18
Ответы
Ответ 1
Ваши события сборки запускаются, вы просто не видите их в Visual Studio.
По умолчанию VS устанавливает многословность msbuild на minimal
. Вы можете получить сообщение, изменив значение сообщения на high
<Target Name="BeforeBuild">
<Message Text="### BeforeBuild ###" Importance="high" />
</Target>
<Target Name="AfterBuild">
<Message Text="### AfterBuild ###" Importance="high" />
</Target>
Вы также можете изменить настройку подробностей в VS в разделе "Инструменты- > Параметры" в разделе "Проекты и решения" → "Сборка и запуск".
Ответ 2
Просто для других, когда они сталкиваются с подобной проблемой, но причина может быть иной.
Если у вас есть импорт после цели, то также AfterBuild может не работать.
Убедитесь, что весь импорт, который у вас есть, должен быть до определения цели, определение цели должно быть в конце