Поделиться через


Настройка локальной сборки

При работе с общим кодом в репозитории кода, например GitHub, в системе управления версиями или с любой общей базой кода, можно использовать MSBuild для временной настройки сборок на локальном компьютере. Может потребоваться временно воспроизвести ошибку или проверить другую конфигурацию и сохранить эти настройки отдельно от файлов в общем репозитории кода. В этой статье описываются некоторые расширения сборки, доступные в MSBuild, которые позволяют создавать пользовательские или локальные пользовательские конфигурации сборки.

Предпосылки

  • Проект Visual Studio, который строится с помощью MSBuild.

Использование пользовательского файла

Вы можете использовать $(MSBuildProjectFullPath).user, называемый также файлом пользователя в этом контексте, для хранения расширений, параметров или переменных, относящихся к локальному компьютеру. Файл пользователя не предназначен для отправки в систему управления версиями и автоматически проверяется на .gitignore. Для более обширных изменений измените сам проект, поэтому будущие обслуживающие не должны знать об этом механизме расширения.

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

<Import Project="$(MSBuildProjectFullPath).user" Condition="Exists('$(MSBuildProjectFullPath).user')"/>

Использование MSBuildExtensionsPath и MSBuildUserExtensionsPath

По соглашению многие файлы логики сборки ядра импортируют файл $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\TargetFileName\ImportBefore\*.targets перед содержимым, а файл $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\TargetFileName\ImportAfter\*.targets после содержимого. Это соглашение позволяет установленным пакетам SDK расширить логику сборки распространенных типов проектов.

Такая же структура каталогов используется для поиска в папке каждого пользователя $(MSBuildUserExtensionsPath). Файлы, размещенные в этой папке, импортируются для всех сборок соответствующего типа проекта, выполняющегося под учетными данными этого пользователя.

Расширения пользователя можно отключить, задав свойства с именем, взятым из файла импорта, в шаблоне ImportUserLocationsByWildcardBefore\<ImportingFileNameWithNoDots>. Например, установка ImportUserLocationsByWildcardBeforeMicrosoftCommonProps на false предотвращает импорт $(MSBuildUserExtensionsPath\$(MSBuildToolsVersion)\Imports\Microsoft.Common.props\ImportBefore\*.

Создание настраиваемых условий на основе языка проекта

Если требуется другое поведение в зависимости от языка .NET: C#, Visual Basic или F#, вы можете добавить группы свойств с условиями, которые зависят от расширения файла проекта, в <MSBuildProjectExtension>, чтобы определить языковые свойства и их значения.

<PropertyGroup Condition="'$(MSBuildProjectExtension)' == '.vbproj'">
   <!-- Put VB-only property definitions here -->
</PropertyGroup>
<PropertyGroup Condition="'$(MSBuildProjectExtension)' == '.fsproj'">
   <!-- Put F#-only property definitions here -->
</PropertyGroup>
<PropertyGroup Condition="'$(MSBuildProjectExtension)' == '.csproj'">
   <!-- Put C#-only property definitions here -->
</PropertyGroup>