【问题标题】:How to compile another project before compiling main project?如何在编译主项目之前编译另一个项目?
【发布时间】:2020-03-22 16:59:57
【问题描述】:

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

【问题讨论】:

  • 这不是 Build Solution 默认做的吗?或者,您必须创建了多个构建配置,您从构建中排除了项目。如果要在构建后复制文件,可以编辑 *.csproj 文件并在 AfterBuild 目标中添加复制任务。这些在您的 csproj 文件中被注释掉。
  • 如果您添加项目 B 作为对项目 A 的引用,您会告诉编译器依赖项,因此它确实知道它应该在 A 之前构建 B。然后在解决方案资源管理器中右键单击项目 A - 依赖项- 项目 - 项目 B,选择属性并将 Reference Output Assembly 设置为 false。

标签: c# visual-studio build


【解决方案1】:

实现这一点的最简单方法是创建从 A 到 B 的引用,这样您就可以从项目 A 访问 B 的(公共)成员。这样,您还可以在 A 的进程中运行 B 的代码,无需启动单独的进程。

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

  1. 不要创建从 A 到 B 的引用,而是使用 Project Dependency* 来确保 B 在 A 之前编译。您可以在上下文中访问的对话框中配置项目依赖项解决方案的菜单或应用程序菜单 Project -> Project Dependencies。设置依赖后,您可以在对话框的第二个选项卡上查看构建顺序。
  2. 调整 A 的构建,将 B 的输出复制到输出文件夹。有几种方法可以做到这一点,更高级的选项之一是将 Build Targets 添加到 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>

请参阅documentation on build targets 并注意上面的代码只是一个示例,您需要根据自己的特定需求进行调整。例如,它仅适用于标准输出路径。

【讨论】:

  • 非常感谢,看起来很有帮助,但是据我了解,项目A必须依赖项目B。现在项目B依赖A,我无法更改。如果我从 A 中删除依赖项 B - VS 说,依赖项已由项目系统设置并且无法删除。
  • 是的,我需要分开 B
  • @ХарламовДаниил 所以你有一个从 B 到 A 的参考;您无法更改由于项目引用而存在的依赖项。因此,如果您想遵循该方法,则必须创建一个包含 A 和 B 都需要的组件的类库项目 C。 A 和 B 引用 C,但 B 不再引用项目 A。然后就可以根据需要设置依赖了。
  • 我现在明白了,在我的解决方案中,我将项目 B 的 Debug 文件夹复制到项目 A 的 Debug 文件夹中,所以项目 A 只是执行 B。所以项目的顺序无关紧要被建造。非常感谢您的回答)
猜你喜欢
  • 2023-03-28
  • 1970-01-01
  • 2014-07-03
  • 1970-01-01
  • 1970-01-01
  • 2021-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多