MsBuild传递PropertyGroup给不同的项目

4

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

我在Project B中有对Project A的引用,配置如下:

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

有没有办法将B项目中的MyProperty值注入到A项目中?
1个回答

6
如何创建一个“Targets”文件,可在两个项目之间共享?因此,您将拥有类似于“DatabaseProjects.Targets”的内容,其中将具有基本的MSBuild头标记,然后是您的属性组。
然后在Project A和Project B中,在配置定义之后,使用import元素导入目标文件,例如<Import Project="DatabaseProjects.Targets" /> 这样,属性就不会在任何单个项目中,而是在共享的“targets import”中。
为了增加可见性,您可以将目标文件作为链接的“none”/“don't copy”文件添加到项目中。

1
没错,这就是我所做的。我创建了一个自定义目标,可以构建多个项目,并在每个项目中使用<MsBuild>标签传递所需的变量。 - Raffaeu
你能分享一下那个在多个项目中被重复使用的工程文件吗? - gap
1
其实这没什么特别的,你只需要一个标准的MSBuild项目文件根元素 - <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">。然后在其中添加任何你想要的属性,比如 PropertyGroup - Snixtor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接