Свойства MSBuild
Свойства представляют собой пары "имя-значение", с помощью которых выполняется настройка построений. Свойства используются для передачи значений задачам, оценки условий и сохранения значений, на которые будут указывать ссылки в файле проекта.
Определение свойств и ссылки на них в файле проекта
Для объявления свойств создается элемент с именем свойства, который является дочерним по отношению к элементу PropertyGroup. Например, в следующем XML-коде создается свойство BuildDir со значением Build.
<PropertyGroup>
<BuildDir>Build</BuildDir>
</PropertyGroup>
Для ссылки на свойства в файле проекта используется синтаксис $(PropertyName). Например, ссылка на свойство из предыдущего кода создается с помощью выражения $(BuildDir).
Значения свойств можно изменять переопределением свойств. Свойству BuildDir можно присвоить новое значение с помощью следующего XML-кода:
<PropertyGroup>
<BuildDir>Alternate</BuildDir>
</PropertyGroup>
Свойства оцениваются в порядке их расположения в файле проекта. Новое значение свойства BuildDir необходимо объявить после присвоения прежнего значения.
Зарезервированные свойства
MSBuild резервирует определенные имена свойств для хранения сведений о файле проекта и бинарный MSBuild. В ссылках на эти свойства используется нотация $, как и для любых других свойств. Например, с помощью выражения $(MSBuildProjectFile) возвращается полное имя файла проекта, включая его расширение.
Дополнительные сведения см. в разделах Практическое руководство. Использование ссылки на имя или расположение файла проекта и Зарезервированные и стандартные свойства MSBuild.
Свойства среды
Ссылки на переменные среды в файлах проектов выполняются так же, как ссылки на зарезервированные свойства. Например, чтобы использовать переменную среды PATH в файле проекта, укажите $(Path). Если в файле проекта содержится определение свойства, имя которого совпадает со свойством среды, свойство из файла проекта переопределяет значение переменной среды.
В каждом проекте MSBuild имеет блок изоляции: он видит только для чтения и записи к собственному блок. MSBuild только считывает переменные среды, когда она инициализирует коллекцию свойств, прежде чем оценка или создан файл проекта. После этого свойства среды статическим, т е в начале каждого порожданные средств с теми же именами и значениями.
Для получения текущего значения переменных среды из порожданного средства используйте Функции свойств System.Environment.GetEnvironmentVariable. Предпочтительный метод, использовать параметр EnvironmentVariables. Свойства среды, заданные в этот массив строк можно передать порожданному средство без влияния на системных переменных среды.
Совет
Не считываются, что в будут все переменные среды начальными свойствами.Любая переменная среды имя которой нет допустимых имен свойства MSBuild, например «386», пропускается.
Для получения дополнительной информации см. Практическое руководство. Использование переменных среды в построении.
Свойства реестра
Для чтения значений системного реестра можно использовать представленный ниже синтаксис, где Hive — это куст реестра (например, HKEY_LOCAL_MACHINE ), Key — имя раздела, SubKey — имя подраздела, а Value — значение подраздела.
$(registry:Hive\MyKey\MySubKey@Value)
Чтобы получить значение подраздела по умолчанию, не указывайте параметр Value.
$(registry:Hive\MyKey\MySubKey)
Данное значение реестра можно использовать для инициализации свойства построения. Например, чтобы создать свойство построения, представляющее домашнюю страницу Visual Studio в веб-браузере, используйте следующий код:
<PropertyGroup>
<VisualStudioWebBrowserHomePage>
$(registry:HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0\WebBrowser@HomePage)
</VisualStudioWebBrowserHomePage>
<PropertyGroup>
Глобальные свойства
MSBuild позволяет свойств в командной строке с помощью /property (или /p) для переключения. Эти глобальные значения свойств переопределяют значения, заданные в файле проекта. Это правило относится к свойствам среды, но не к зарезервированным свойствам, которые нельзя изменить.
В следующем примере для глобального свойства Configuration задается значение DEBUG.
msbuild.exe MyProj.proj /p:Configuration=DEBUG
Глобальные свойства можно также задавать или изменять для дочерних проектов многопроектных построений, используя атрибут Properties задачи MSBuild. Для получения дополнительной информации см. Задача MSBuild.
Если указывается свойство с помощью атрибута TreatAsLocalProperty в теге проекта, то глобальное значение свойства не переопределяет значение свойства, которое задано в файле проекта. Дополнительные сведения см. в разделах Элемент Project (MSBuild) и Практическое руководство. Построение одинаковых исходных файлов с различными параметрами.
Функции свойств
Начиная с .NET Framework 4, функции свойств можно использовать для оценки скрипты MSBuild. С помощью скриптов построения можно считывать системное время, сравнивать строки, вести поиск по регулярным выражениям и выполнять многие другие действия, не используя задачи MSBuild.
Можно применять методы String (методы экземпляров) для работы с любыми значениями свойств и вызывать статические методы многих системных классов. Например, в следующем коде свойству построения задается текущая дата:
<Today>$([System.DateTime]::Now.ToString("yyyy.MM.dd"))</Today>
Дополнительные сведения и полный список функций свойств см. в разделе Функции свойств.
Создание свойств во время выполнения
Свойствам, размещенным за пределами элемента Target, значения присваиваются на этапе оценки построения. Свойства могут создаваться или изменяться и на последующем этапе выполнения с помощью перечисленных ниже методов.
Можно создать свойство посредством любой задачи. Для этого элемент Task должен содержать дочерний элемент Output с атрибутом PropertyName.
Можно создать свойство посредством задачи CreateProperty. Этот метод не рекомендуется использовать.
Начиная с версии .NET Framework 3.5 элементы Target могут содержать элементы PropertyGroup, в состав которых, в свою очередь, могут входить объявления свойств.
Сохранение XML в свойствах
Свойства могут содержать произвольные XML-элементы, предназначенные для передачи значений задачам или отображения информации журналов. В следующем примере показано свойство ConfigTemplate, значение которого содержит XML-код и ссылки на другие свойства. MSBuild заменяет ссылки на свойства соответствующими значениями свойств. Значения свойств присваиваются в порядке их расположения. Поэтому в данном примере свойства $(MySupportedVersion), $(MyRequiredVersion) и $(MySafeMode) должны быть уже определены.
<PropertyGroup>
<ConfigTemplate>
<Configuration>
<Startup>
<SupportedRuntime
ImageVersion="$(MySupportedVersion)"
Version="$(MySupportedVersion)"/>
<RequiredRuntime
ImageVersion="$(MyRequiredVersion)
Version="$(MyRequiredVersion)"
SafeMode="$(MySafeMode)"/>
</Startup>
</Configuration>
</ConfigTemplate>
</PropertyGroup>
См. также
Задачи
Практическое руководство. Использование переменных среды в построении
Практическое руководство. Использование ссылки на имя или расположение файла проекта
Практическое руководство. Построение одинаковых исходных файлов с различными параметрами
Ссылки
Зарезервированные и стандартные свойства MSBuild