Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
При работе с общим кодом в репозитории кода, например 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>