MSBuild извлекает свойства из одного проекта в другой - PullRequest
3 голосов
/ 05 июня 2009

Скажем, у меня есть два файла проекта "Parent.proj" и "Child.proj". Если я объявляю свойство в Parent.proj с именем MyProp, я могу передать его в Child.proj со следующим кодом:

<MSBuild Projects="Child.proj" Targets="dostuff" Properties="MyProp=MyValue" />

Это нормально, но я хочу знать, есть ли способ ссылаться на MyProp в Child.proj без вызова Child.proj из Parent.proj.

Я знаю, что могу объявить то же свойство в Child.proj, и оно будет переопределено, когда Child.proj вызывается Parent.proj, но я хочу избежать повторения значения свойства.

1 Ответ

8 голосов
/ 05 июня 2009

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

Вот очень простые файлы свойств с именем orders.properties, над которыми я сейчас работаю.

<Project  xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <!-- always include the root properties -->
  <Import Project="$(root)\root.properties.proj"/>
  <PropertyGroup>

    <!-- Version numbers/names for this branch -->
    <orders_ver_major>99</orders_ver_major>
    <orders_ver_minor>0</orders_ver_minor>
    <orders_ver_release>0</orders_ver_release>
    <orders_ver>$(orders_ver_major).$(orders_ver_minor).$(orders_ver_release)</orders_ver>
    <orders_ver_db>$(orders_ver_major)_$(orders_ver_minor)_$(orders_ver_release)</orders_ver_db>

    <!-- setup folders specific to the orders project -->
    <orders_database>$(orders_root)\btq.orders.database</orders_database>

    <!-- 
      Setup order database default properties, can be overriden if passed in when called from
      the command line or from other build scripts.
    -->
        <orders_force_create    Condition="'$(orders_force_create)' == ''">false</orders_force_create>
    <orders_db_server           Condition="'$(orders_db_server)' == ''"   >.\sqlexpress</orders_db_server>
    <orders_db_username     Condition="'$(orders_db_username)' == ''" >yyyyyyyy</orders_db_username>
    <orders_db_password     Condition="'$(orders_db_password)' == ''" >xxxxxx</orders_db_password>
    <orders_db_name             Condition="'$(orders_db_name)' == ''"     >$(COMPUTERNAME)_btq_orders_v$(orders_ver_db)</orders_db_name>
  </PropertyGroup>
</Project>

В моем основном проекте сборки я импортирую свойства заказа в файл orders.build.proj и любые подпроекты, которым это требуется.

Вот начальный раздел основного файла сборки.

<Project DefaultTargets="build"  xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <!-- 
    Always setup the path to the root and also the orders root folder.
    We then include the orders properties, which includes the root properties
    For this project the orders folder is in the same folder as this build file
    so can just reference the ms build project directory property as the orders_root.
  -->
  <PropertyGroup>
    <root>$(MSBuildProjectDirectory)\..\..</root>
    <orders_root>$(MSBuildProjectDirectory)</orders_root>
  </PropertyGroup>

  <!--
      Once we have the roots configured we can now include all the standard properties,
      this also includes the root.properties also.
  -->
  <Import Project="$(orders_root)\orders.properties.proj"/>

Надеюсь, это ответит на ваш вопрос.

С уважением Noel

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...