我可以为一个解决方案配置构建多个项目吗?

12
我希望在同一个解决方案配置下构建两个相同的项目,通过切换一些#define标记来切换功能。 这两个二进制文件将使用不同的名称部署。
我知道能够实现这个目标的解决方案:
1. 添加一个解决方案配置 - 但我需要构建两次解决方案,而我更倾向于避免这种情况。因为两个项目配置都将被构建。
2. 复制该项目 - 但是这样我需要维护一个新项目的开销,而我只想维护一个不同的配置。
3. 批量构建 - 我不想使用批量构建,因为我既要用devenv进行本地开发,也要使用msbuild进行持续集成。
还有其他想法或建议吗?
1个回答

6
我刚刚想到了一种方法来实现你所要求的功能。创建一个 msbuild 文件(我将其命名为 multiple.proj),并添加以下脚本。
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Choose>
    <When Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
      <ItemGroup>
        <ProjectToBuild Include="$(MSBuildProjectName).csproj">
          <Properties>Configuration=Release</Properties>
        </ProjectToBuild>
      </ItemGroup>
    </When>
  </Choose>
  <Target Name="BeforeBuild">
    <Message Text="Building configuration $(Configuration)..." />
  </Target>
  <Target Name="AfterBuild">
    <MSBuild Projects="@(ProjectToBuild)"/>
  </Target>
</Project>

</type>
</this>

将脚本导入您的项目(csproj或vbproj):

<Import Project="..\multiple.proj" />

这个脚本告诉msbuild在构建完成后使用另一个配置再次构建您的项目。我使用Debug/Release进行示例,但是您可以轻松更改脚本以支持其他配置,或者根据其他变量决定是否重新构建。

请注意,因为您同时运行了两个构建,所以构建错误可能更难理解。

希望这有所帮助。


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