Практическое руководство. Указание событий сборки (C#)

Практическое руководство. Указание событий сборки (C#)

Используйте события сборки для указания команд, которые выполняются до начала сборки или после ее завершения.

При сборке проекта события перед сборкой добавляются в файл PreBuildEvent.bat, а события после сборки — в файл PostBuildEvent.bat. Если вы хотите обеспечить проверку ошибок, добавьте собственные команды проверки ошибок в шаги сборки.

Указание события сборки

В обозревателе решений выберите проект, для которого необходимо задать событие сборки.

В меню Проект выберите Свойства.

Откройте вкладку События построения.

В поле Командная строка события перед сборкой укажите синтаксис события сборки.

События перед сборкой не выполняются, если проект актуален и сборка не запускается.

В поле Командная строка события после сборки укажите синтаксис события сборки.

Добавьте оператор call перед всеми командами после сборки, запускающими BAT-файлы. Например, call C:\MyFile.bat или call C:\MyFile.bat call C:\MyFile2.bat .

В поле Выполнить событие после сборки укажите при каких условиях должно выполняться событие после сборки.

Чтобы добавить длинный синтаксис или выбрать макросы сборки из диалогового окна Командная строка события "После построения" или "Командная строка события "До построения"", нажмите кнопку с многоточием (. ) для отображения поля редактирования.

В обозревателе решений выберите проект, для которого необходимо задать событие сборки.

В меню Проект выберите пункт Свойства (или из Обозревателя решений нажмите клавиши ALT+ВВОД).

Выберите элементы Сборка > События.

В разделе Событие перед сборкой укажите синтаксис события сборки.

События перед сборкой не выполняются, если проект актуален и сборка не запускается.

В разделе Событие после сборки укажите синтаксис события сборки.

Добавьте оператор call перед всеми командами после сборки, запускающими BAT-файлы. Например, call C:\MyFile.bat или call C:\MyFile.bat call C:\MyFile2.bat .

В разделе Когда выполнять событие после сборки укажите условия, при которых должно выполняться событие после сборки.

Синтаксис события сборки может включать любую команду, допустимую в командной строке или в BAT-файле. Для имени пакетного файла необходимо указать префикс call , чтобы гарантировать выполнение всех последующих команд.

Если событие перед сборкой или после сборки завершается ошибкой, можно прервать сборку, задав завершение действия события с кодом, отличным от нуля (0), что означает успешное выполнение действия.

Макросы

Распространенные "макросы" (фактически свойства MSBuild) перечислены в статье Общие свойства MSBuild. Для проектов пакета SDK для .NET (.NET Core или .NET 5 и более поздних версий) дополнительные свойства перечислены в статье Справочник по MSBuild для проектов пакета SDK для .NET.

В скриптах для событий сборки может потребоваться сослаться на значения некоторых переменных уровня проекта, например имя проекта или расположение выходной папки. В предыдущих версиях Visual Studio они назывались макросами. Аналогом макросов в последних версиях Visual Studio являются свойства MSBuild. MSBuild — это механизм сборки, который Visual Studio использует для обработки файла проекта при выполнении сборки. Событие сборки в интегрированной среде разработки приводит к созданию целевого объекта MSBuild в файле проекта. Вы можете использовать любое свойство MSBuild, доступное в целевом объекте в файле проекта (например, $(OutDir) или $(Configuration) ). Свойства MSBuild, доступные в этих событиях, зависят от файлов, которые неявным или явным образом импортированы в файл проекта, такие как файлы .props и .targets , и свойства, заданные в файле проекта, например в элементах PropertyGroup . Будьте внимательны, чтобы использовать точное написание каждого свойства. При неправильном написании свойства ошибка не возникает. Вместо этого неопределенное свойство оценивается как пустая строка.

Например, вы указали событие перед сборкой следующим образом:

Это событие перед сборкой приводит к следующей записи, называемой Target в файле проекта:

Событие сборки отображается как целевой объект, включающий задачу Exec со входными данными, указанными как Command . Символы новой строки кодируются в XML.

При сборке проекта в этом примере событие перед сборкой выводит значения некоторых свойств. В этом примере $(CscToolPath) не создает никаких выходных данных, поскольку оно не определено. Это необязательное свойство, которое можно определить в файле проекта, чтобы предоставить путь к настраиваемому экземпляру компилятора C# (например, при тестировании другой версии csc.exe или экспериментального компилятора).

Выходные данные событий сборки записываются в выходные данные сборки, которые можно найти в окне выходных данных. В раскрывающемся списке Показать выходные данные из выберите Сборка.

Пример

В следующей процедуре показано, как задать минимальную версию операционной системы в манифесте приложения с помощью команды EXE, вызываемой из события после сборки (файл exe.manifest в каталоге проекта). Минимальная версия операционной системы — число из четырех частей, например 4.10.0.0. Чтобы задать минимальную версию операционной системы, команда изменит раздел <dependentOS> манифеста:

Создание команды EXE для изменения манифеста приложения

Создайте проект Консольное приложение для команды. Назовите проект ChangeOSVersionCS.

В Program.cs добавьте следующую строку для других директив using в верхней части файла:

В пространстве имен ChangeOSVersionCS замените реализацию класса Program следующим кодом:

Команда принимает два аргумента: путь к манифесту приложения (то есть папка, в которой в процессе сборки создается манифест, обычно Projectname.publish) и новую версию операционной системы.

Скопируйте файл EXE в каталог, например C:\TEMP\ChangeOSVersionVB.exe.

Затем вызовите эту команду в событии после сборки для изменения манифеста приложения.

Вызов события после сборки для изменения манифеста приложения

Создайте проект Приложение Windows Forms с именем CSWinApp.

Выберите проект в обозревателе решений, а затем в меню Проект выберите пункт Свойства.

В конструкторе проектов найдите страницу Публикация и для параметра Расположение публикации задайте значение C:\TEMP.

Опубликуйте проект, щелкнув Опубликовать сейчас.

Создается файла манифеста, который сохраняется в каталоге C:\TEMP\CSWinApp_1_0_0_0\CSWinApp.exe.manifest. Чтобы просмотреть манифест, щелкните правой кнопкой мыши файл и выберите пункт Открыть с помощью, затем выберите Выбрать программу из списка и щелкните Блокнот.

Найдите в файле элемент <osVersionInfo> . Например, версия может быть следующей:

Вернитесь в конструктор проектов и перейдите на вкладку События сборки.

В разделе Событие после сборки введите следующую команду:

C:\TEMP\ChangeOSVersionCS.exe "$(TargetPath).manifest" 5.1.2600.0

При сборке проекта выполнение этой команды приводит к изменению минимальной версии операционной системы в манифесте приложения на 5.1.2600.0.

Так как макрос $(TargetPath) выражает полный путь к создаваемому исполняемому файлу, файл $(TargetPath).manifest будет указывать манифест приложения, созданный в каталоге bin. При публикации этот манифест копируется в заданное ранее расположение публикаций.

Опубликуйте проект еще раз.

Версия манифеста должна иметь следующий вид:

Для некоторых сценариев могут потребоваться более интеллектуальные действия сборки, отличающиеся большими возможностями, чем события сборки. Например, для большинства распространенных сценариев создания кода необходимо выполнять операции очистки и перестроения. Вам также, возможно, потребуется включить инкрементную сборку для шагов создания кода, чтобы шаг выполнялся только в том случае, если выходные данные устарели по отношению к входным данным. Для таких сценариев рекомендуется создать пользовательский целевой объект, который указывает AfterTargets или BeforeTargets , чтобы выполнение происходило в определенной точке процесса сборки. Для дальнейшего контроля в сложных сценариях рекомендуется создать пользовательскую задачу.

📎📎📎📎📎📎📎📎📎📎