MSBuild: directory.build.props и directory.build.targets не работает с * .wixproj - PullRequest
0 голосов
/ 10 июня 2019

directory.build.props и directory.build.targets не работает с проектами Wix установщика Windows.* .wixproj

Как решить эту проблему?

1 Ответ

2 голосов
/ 10 июня 2019

Фон

Неявный импорт directory.build.props и directory.build.targets является встроенной функцией MSBuild 15.0+.Он не должен быть в новом формате стиля проекта SDK, чтобы он работал.Волшебство magic происходит при импорте microsoft.common.props , который автоматически выполняется в стиле SDK, и большинство проектов более старого стиля включают в качестве первого импорта в файл проекта.Это задокументировано здесь .

К сожалению, проекты WiX не включают этот импорт, поэтому он не берется (как показано здесь в источнике Votive).Я не могу сказать почему, но может быть причина того, что microsoft.common.props исключен.

Поскольку неясно, импортируется ли microsoft.common.props может вызвать у вас горе, рекомендуемый подход - импортировать расширения вручную, используя новую функцию GetPathOfFileAbove .Вам нужно сделать это только один раз.

Решение

  1. Выгрузить проект с помощью Щелкните правой кнопкой мыши проект → Выгрузить {имя}…
  2. Щелкните правой кнопкой мыши на проекте → Изменить {имя}…
  3. Добавьте следующее в Строка 3 (должен быть первым элементом в <Project>):

    <Import Project="$([MSBuild]::GetPathOfFileAbove(directory.build.props))"
            Condition="Exists('$([MSBuild]::GetPathOfFileAbove(directory.build.props))')" />
    
  4. Добавьте в конец файла перед следующие объекты WiX:

    <Import Project="$([MSBuild]::GetPathOfFileAbove(directory.build.targets))"
            Condition="Exists('$([MSBuild]::GetPathOfFileAbove(directory.build.targets))')" />
    

Если вам нужно подключиться к процессу или целям сборки WiX, используйте свойства сборки CustomBeforeWixTargets и CustomAfterWixTargets , которые могут ссылаться на каталог .Сам файл build.targets через зарезервированное свойство MSBuildThisFileFullPath .Это гарантирует, что вещи будут импортированы WiX в соответствующее время.

После того, как вы настроите использование directory.build.props и directory.build.targets будет как положено.Если WiX когда-либо изначально поддерживает эти расширения сборки, вы выровняетесь и сможете удалить этот явный импорт на досуге.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...