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

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

Ссылки на переменные среды

Все переменные среды, которые являются допустимыми именами свойств MSBuild, доступны в файле проекта Microsoft Build Engine (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>