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


Использование переменных среды в сборке

При сборке проектов часто необходимо задать параметры сборки, используя сведения, не содержащиеся в файле проекта или файлах, составляющих проект. Эта информация обычно хранится в переменных среды.

Замечание

MSBuild обрабатывает переменные среды как доверенные входные данные. Они могут привести к загрузке логики сборки MSBuild, например задач, .targets или .props файлов из пользовательских расположений, а также изменению процесса выполнения сборки.

Эталонные переменные среды

Все переменные среды, которые являются допустимыми именами свойств MSBuild, доступны в файле проекта MSBuild в качестве свойств. Допустимые имена свойств описаны в свойствах MSBuild. Например, переменные среды, начинающиеся с числа, недоступны в MSBuild.

Замечание

Если файл проекта содержит явное определение свойства, которое имеет то же имя, что и переменная среды, свойство в файле проекта переопределяет значение переменной среды.

Использование переменной среды в проекте MSBuild

  • Ссылайтесь на переменную среды так же, как переменную, объявленную в файле проекта. Например, следующий код ссылается на переменную среды BIN_PATH:

    <FinalOutput>$(BIN_PATH)\MyAssembly.dll</FinalOutput>

    Атрибут можно использовать Condition для предоставления значения по умолчанию для свойства, если переменная среды не была задана.

Указание значения по умолчанию для свойства

  • Condition Используйте атрибут для свойства, чтобы задать значение только в том случае, если свойство не имеет значения. Например, следующий код задает ToolsPath для свойства значение c:\tools , только если ToolsPath переменная среды не задана:

    <ToolsPath Condition="'$(TOOLSPATH)' == ''">c:\tools</ToolsPath>

    Замечание

    Имена свойств не учитывает регистр, поэтому $(ToolsPath)$(TOOLSPATH) и ссылаются на одну и ту же переменную свойства или среды.

Пример

Следующий файл проекта использует переменные среды для указания расположения каталогов.

<Project DefaultTargets="FakeBuild">
    <PropertyGroup>
        <FinalOutput>$(BIN_PATH)\myassembly.dll</FinalOutput>
        <ToolsPath Condition=" '$(ToolsPath)' == '' ">
            C:\Tools
        </ToolsPath>
    </PropertyGroup>
    <Target Name="FakeBuild">
        <Message Text="Building $(FinalOutput) using the tools at $(ToolsPath)..."/>
    </Target>
</Project>