繁体   English   中英

如何在编译主项目之前编译另一个项目?

[英]How to compile another project before compiling main project?

我有一个包含两个执行项目的解决方案。 用户可以通过按一个按钮从项目 A 执行项目 B。 项目 A Debug 文件夹包含项目 B Debug 文件夹,因此它通过该文件夹的硬编码路径执行项目 B。 如果我想在项目 B 中进行一些更改 - 我需要重新编译项目 B 并在项目 A 的 Debug 文件夹中替换它的 Debug 文件夹。 我认为从架构的角度来看,这不是一种聪明而舒适的方式。 所以我想在项目 A 构建事件中包含这样的操作,但我以前从未这样做过,所以我很高兴听到你的建议。

最简单的实现方式是创建一个从A到B的引用,这样你就可以从项目A访问B的(公共)成员。这样,你也可以在A的过程中运行B的代码,消除了需要启动一个单独的进程。

如果您确实需要为在单独进程中运行的 B 提供单独的 exe,则还有另一种方法需要更多努力:

  1. 不要创建从 A 到 B 的引用,而是使用Project Dependency*来确保 B 在 A 之前编译。您可以在解决方案的上下文菜单或应用程序菜单 Project 中访问的对话框中配置项目依赖项-> 项目依赖。 设置依赖项后,您可以在对话框的第二个选项卡上检查构建顺序。
  2. 调整 A 的构建以将 B 的输出复制到输出文件夹。 有几种方法可以做到这一点,更高级的选项之一是将构建目标添加到 A 的项目文件中,以执行文件的复制和清理。 您必须卸载项目 A 并编辑项目文件(请参阅上下文菜单)并添加类似于以下内容的代码:

  <Target Name="AfterBuild">
    <ItemGroup>
      <AdditionalFiles Include="$(MSBuildProjectDirectory)\..\ProjectB\bin\$(Configuration)\ProjectB.*" />
    </ItemGroup>
    <Copy SourceFiles="@(AdditionalFiles)" DestinationFolder="$(OutputPath)" />
  </Target>
  <Target Name="AfterClean">
    <ItemGroup>
      <AdditionalFilesToDelete Include="$(OutputPath)\ProjectB.*" />
    </ItemGroup>
    <Delete Files="@(AdditionalFilesToDelete)" />
  </Target>

请参阅有关构建目标文档,并注意上面的代码只是您需要根据特定需求进行调整的示例。 例如,它仅适用于标准输出路径。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM