Порядок событий сборки MSBuild в Visual Studio 2019

Согласно этой документации Microsoft, для каждого проекта в решении Visual Studio 2019 события сборки выполняются в следующем порядке с другими шагами сборки (включая настраиваемые шаги сборки и инструменты):

  • Событие перед сборкой
  • Пользовательские инструменты сборки для отдельных файлов
  • МИДЛ
  • Компилятор ресурсов
  • Компилятор C/C++
  • Событие перед связыванием
  • Линкер или библиотекарь (в зависимости от ситуации)
  • Инструмент манифеста
  • BSCMake
  • Шаг пользовательской сборки в проекте
  • Событие после сборки

Шаг пользовательской сборки в проекте и событие после сборки запускаются последовательно после завершения всех других процессов сборки.

Однако, когда установлен WDK v10.0.19041.0, StampInf и InfVerif выполняются перед Pre-Build Event.

Об этом свидетельствует следующий код Microsoft:

<Target Name = "StampInf"
          Condition = "'@(Inf)' != ''"
          BeforeTargets = "InfVerif">

...

<Target Name = "InfVerif"
          Condition = "'@(Inf)' != '' and '$(IsDriverAppToolset)' != 'true'"
          AfterTargets = "StampInf"
          BeforeTargets = "PreBuildEvent">

Приведенный выше код Microsoft взят из:
C:\Program Files (x86)\Windows Kits\10\build\WindowsDriver.Common.targets

Обратите внимание, как директивы AfterTargets и BeforeTargets устанавливают порядок выполнения StampInf, InfVerify и PreBuildEvent.

Вопрос 1. Является ли выполнение StampInf и InfVerify перед Pre-Build Event ошибкой в ​​реализации или ошибкой в ​​документации Microsoft?
Вопрос 2: Как выполнить пользовательскую команду перед InfVerif переносимым способом (без изменения исходных файлов Microsoft Visual Studio или WDK)?

Что означает ошибка в вашем вопросе 1? Вы имеете в виду, что StampInf и InfVerify не включены в список в документации? Вы хотите определить, где в сборке будет выполняться пользовательский шаг сборки.

Jingmiao Xu-MSFT 18.11.2022 07:25

Ошибка — это Pre-Build Event. выполнение после инструментов StampInf и InfVerify.

Pavel Stepanek 18.11.2022 10:50

Вы можете создать проблему на DC или щелкнуть ссылку github внизу страницы, чтобы сообщить о проблеме с документацией.

Jingmiao Xu-MSFT 21.11.2022 03:23
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
108
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже на ошибку, из-за которой InfVerif явно ссылается на то, что находится перед целью PreBuildEvent. WDK не должен мешать семантике PreBuildEvent.

Однако MSBuild будет игнорировать ссылку на цель, которая не существует в текущем проекте. Вы можете установить цель BeforeTargets = "PreBuildEvent;InfVerif;StampInf", и для проектов, у которых нет цели InfVerif или StampInf, ошибки быть не должно. Вам не нужно изменять код Microsoft MSBuild, чтобы обойти эту проблему.

Другие вопросы по теме