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

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

Файл USER

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

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

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

MSBuildExtensionsPath и MSBuildUserExtensionsPath

По соглашению многие файлы базовой логики сборки импортируют

$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\{TargetFileName}\ImportBefore\*.targets

перед своим содержимым и

$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\{TargetFileName}\ImportAfter\*.targets

после него. Это соглашение позволяет установленным пакетам SDK дополнять логику сборки для распространенных типов проектов.

Поиск по той же структуре каталогов выполняется в $(MSBuildUserExtensionsPath), который является папкой конкретного пользователя %LOCALAPPDATA%\Microsoft\MSBuild. Файлы, помещенные в эту папку, импортируются для всех сборок соответствующего типа проекта, выполняемого с использованием учетных данных этого пользователя. Пользовательские расширения можно отключить, задав свойства, имя которых соответствует импортируемому файлу по шаблону 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>