簡體   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