簡體   English   中英

Visual Studio:生成順序隨機嗎?

[英]Visual Studio: Build order random?

我有一個包含239個項目的解決方案。 我目前遇到以下問題:

當我在解決方案上執行“全部重建”后,完成完全清理(刪除輸出目錄):

17>------ Rebuild All started: Project: AAA, Configuration: Debug x86 ------
18>------ Rebuild All started: Project: BBB, Configuration: Debug x86 ------
18>CSC : error CS0006: Metadata file 'E:\Dev\Trunk\Debug\x86\AAA.dll' could not be found
17>  XmsCommon -> E:\Dev\Trunk\Debug\x86\AAA.dll

我了解以下內容:

  • Visual Studio正在多線程進行編譯(在我的情況下,一次是4個程序集)
  • 我沒有明確的“ Project Dependency”指定(右鍵單擊解決方案-> Project Dependencies)

我不明白的

  • 在此示例中,AAA是BBB的參考項目,對我而言,這是一個隱式依賴關系,如何在不確保AAA正確構建的情況下正確構建BBB?
  • 對於產生239個項目的解決方案,我們應該如何管理? 確保我們沒有對錯誤的項目進行任何引用都是非常困難的,因此,如果我們始終必須確保構建順序,那么它將變得很復雜。

請注意:我不知道這是否是由於最近的更改(項目/視覺工作室/ ...)造成的,因為這使我花了2年的時間來研究該解決方案,而且這是我第一次獲得認可這個問題一次又一次。

所以問題是:

  1. 有沒有一種方法可以解決這個問題,而不必指出解決方案的每個項目依賴項?
  2. 如果沒有,我們應該怎么做?

編輯評論后,這里是一些附加信息:

  • AAA或BBB中沒有編譯錯誤,但找不到引用
  • 我們引用的是項目,而不是dll(在發生錯誤的一種特定情況下進行了檢查。

BBB.csproj ,我有以下參考資料:

<ProjectReference Include="..\..\..\..\SomeOtherFolder\AAA\AAA.csproj">
  <Project>{6241076B-05B3-4D5D-AFA9-46D41E1CEC3A}</Project>
  <Name>AAA</Name>
  <Private>False</Private>
</ProjectReference>

編輯2我不知道這是否直接相關,但是當檢查項目依賴項時,我發現BBB依賴於CCC (但是AAA卻沒有顯示。我想知道是否有依賴項指定,它基本上忽略了所有來自參考的信息?如果我嘗試刪除CCC依賴項, This dependency was added by the project system and cannot be removed收到一條消息: This dependency was added by the project system and cannot be removed

編輯3

我進行了一次有趣的發現:實際上,我在EDIT 2中遇到的錯誤是因為在兩個項目之間創建引用時已添加了此依賴關系。

由於未知的原因,似乎此依賴關系尚未創建供此處參考。 如果刪除項目引用,然后將引用再次添加到同一項目,則現在具有此依賴項(無法刪除)。 我找不到此“依賴關系”的存儲位置。關於如何“解決”整個解決方案的任何想法?

從您的帖子中,您說過"I've no explicit "Project Dependency" specify(Right click on solution -> Project Dependencies)"這意味着您所有的引用都指向編譯的DLL,而不是項目。

由於VS加載許多項目引用的速度較慢,因此我多次看到具有大型解決方案的團隊(您有239個項目)采用了這種方法。

我見過使用的解決方法是:

  • 主解決方案的每個子區域都有多個解決方案,例如實體,DAL,邏輯,服務等。
  • 將DLL(不建議這樣做,但我已經看過)檢入Source以用於更快的構建。 更改代碼區后,您將負責替換DLL。
  • 配置項目依賴項設置,以便以正確的順序完成構建。
  • 處理項目參考的性能(緩慢,但確保構建順序

一個包含239個項目的解決方案似乎違反了將開發划分為較小模塊的原則,但這並不總是您的決定...

經過一番調查,我發現了這個問題:

實際上,當將Visual Studio引用到項目中時,Visual Studio應該自動在項目之間添加這些依賴關系。 通過添加項目參考,我可以很容易地看到這一點。 另外,似乎不能刪除那些“依賴項”(請參閱​​我的編輯2)。

所以我問的問題是如何引用某些項目,而又不依賴某些項目?

我檢查了我的引用(至少在某些情況下我發現它不起作用)並且它們是項目引用,而不是dll。

我的一些同事使用完全相同的代碼(獲取最新版本的代碼而不進行更改)沒有出現此問題,並且在Visual Studio中顯示了依賴性。

因此,我最后刪除了解決方案文件附近的*.sdf文件(關閉了Visual Studio之后)。 我重新打開並打開了tadaa,Visual Studio重新計算了所有依賴項。 現在我們進行重建,一切都直接成功了。

我不確定為什么會發生這種情況,我有一些時間殺死Visual Studio,然后可能是某些東西損壞了。

我在一個較小但高度相互依賴的解決方案中看到了此問題。 我們通過降低並行項目構建的最大數量來解決此問題,直到可以預期的成功為止。 工具->選項->項目和解決方案->生成並運行。

我知道這不是一個解決方案,但是如果您使用像MEF或Unity這樣的依賴注入技術,就可以將編譯依賴變成運行時依賴。

在這種情況下,您的項目具有有限的依賴性(接口,容器)。

但是我不得不說,這些技術會帶來一些副作用-例如“偽隨機”初始化等等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM