MsBuild передает PropertyGroup между проектами - PullRequest
2 голосов
/ 25 января 2012

У меня есть два проекта базы данных Visual Studio.

Project A
Project B
 - References: Project A

Проект A является независимым проектом базы данных, в то время как Проект B имеет ссылку на A. Когда я собираю проект B, у меня следующий ожидаемый результат от MsBuild:

------ Build started: Project: Project A, Configuration: Debug Any CPU 
--------- Build started: Project: Project B, Configuration: Debug Any CPU ------
========== Build: 2 succeeded or up-to-date, 0 failed, 0 skipped ==========

В Проект B У меня есть свойство, определенное следующим образом:

  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
    <MyProperty>MyValue</MyProperty>
  </PropertyGroup>

Теперь в обоих проектах я создал простую задачу, которая выполняется перед тем, как я создаю проект, и которая печатает значение переменной: Проект А, Б:

  <Target Name="Print" BeforeTargets="Build">
    <Message Text="MyProperty is: $(MyProperty)" Importance="high" />
  </Target>

К сожалению, я получаю такое поведение на MsBuild:

------ Build started: Project: Project A, Configuration: Debug Any CPU 
MyProperty is:
--------- Build started: Project: Project B, Configuration: Debug Any CPU ------
MyProperty is: MyValue
========== Build: 2 succeeded or up-to-date, 0 failed, 0 skipped ==========

У меня есть ссылка на Проект A в Проекте B с этой конфигурацией:

  <ItemGroup>
    <ProjectReference IncludeProjectA.dbproj">
      <Name>ProjectA</Name>
      <Project>{f6546bef-cea7-4e7f-b6f1-cce1c06c7b1a}</Project>
      <Private>True</Private>
    </ProjectReference>
  </ItemGroup>

Можно ли как-нибудь добавить значение MyProperty из проекта B в проект A?

1 Ответ

5 голосов
/ 26 января 2012

Как насчет создания файла "Targets" для совместного использования в обоих проектах? Таким образом, у вас будет что-то вроде "DatabaseProjects.Targets", у которого будет базовый тег заголовка MSBuild, а затем ваша группа свойств.

Затем в Проекте A и Проекте B, после определений конфигурации, импортируйте файл целей с элементом импорта, например <Import Project="DatabaseProjects.Targets" />

Таким образом, свойство не будет ни в одном отдельном проекте, а в общем «импорте целей».

Для большей наглядности вы можете добавить файл целей в свои проекты в виде связанного файла «none» / «not copy».

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