MsBuild在项目之间传递PropertyGroup

时间:2012-01-25 19:36:41

标签: msbuild

我有两个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>

现在,在这两个项目中,我创建了一个简单的任务,在构建项目之前执行并打印变量的值: 项目A,B:

  <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 ==========

我在项目B中使用此配置引用项目A:

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

有什么办法可以将Project B的MyProperty值注入Project A吗?

1 个答案:

答案 0 :(得分:5)

如何创建要在两个项目之间共享的“Targets”文件?因此,您将拥有类似"DatabaseProjects.Targets"的内容,它将具有基本的MSBuild标头标记,然后是您的属性组。

然后在项目A和项目B中 配置定义后,使用import元素导入目标文件,如<Import Project="DatabaseProjects.Targets" />

这样,该属性不会出现在任何单个项目中,而是出现在共享的“目标导入”中。

为了增加可见性,您可以将目标文件作为链接的“无”/“不要复制”文件添加到项目中。