2012-01-24 27 views
6

什麼是用於定義調試/發佈目標輸出文件夾中的最佳實踐:它是更好地有單獨的文件夾用於調試/發佈或我應該使用這兩個同一個文件夾(當使用。 NET/C#)?使用.NET(C#)時調試/發佈輸出的單獨或相同的文件夾?

我有兩個獨立的解決方案,因此一個解決方案的項目不能通過項目引用另一個解決方案的項目。所以你不得不直接添加一個對程序集文件的引用。 這會導致另一個問題:如果通過文件添加對另一個程序集的引用,則只能爲調試和一個發佈版本添加一個而不是一個(就像您可以使用C++中的庫一樣)。另一個問題是,我必須添加一個引用,例如,bin/版本/MyOtherProject/MyAssembly.dll。我認爲這很混亂,特別是在構建Debug和引用Release時。 =>構建錯誤和版本衝突可能會發生。

有沒有人在大型項目和環境中構建到同一個目標文件夾的經驗?

這是一個更精確的問題,涉及堆棧溢出問題Should we still make a difference between the release and debug output folders?

+5

VS自動創建單獨的目錄。 –

+0

...但是,如果您添加對另一個程序集的引用,則只能添加一個而不是一個用於調試和一個發行版。如果我有幾個解決方案(目前取決於平臺),我必須添加一個參考,例如bin/Release/MyOtherProject/MyAssembly.dll。我認爲這很混亂,特別是在構建Debug和引用Release時。 =>構建錯誤和版本衝突可能發生 – Beachwalker

+2

如果您正在同時開發其他程序集,那麼該項目應該是一個解決方案的一部分。這兩種方式都在相同的配置(調試或發佈)一起編譯。如果另一個程序集是一個單獨的嘗試,那麼我會使用發佈版本,以便調試版本不會滑入您的發佈項目文件中的其他項目。 –

回答

5

我們一直在使用相同的目錄在.NET應用程序中進行調試和發佈10年,並且從未遇到過問題。

這種方法使大量任務變得相當容易,比如構建安裝,將自定義DLL文件複製到構建後目錄以及在輸出目錄中對版本文件進行版本控制,例如開發人員正確運行應用程序所必需的許可證文件。

4

如果它們是兩種不同的解決方案,我不明白爲什麼要引用調試輸出。事實上,我認爲你不應該在其他項目目錄中引用輸出。如果代碼移動到另一臺機器,並且您不能完美地複製項目結構,則可能會破壞您的參考。

我認爲最好的做法是要麼

1)最好在項目一個lib目錄/解決您手動複製項目/解決方案B的輸出做,如果你不更改項目B常常。

2)把兩個項目放在同一個解決方案中,然後添加一個對項目的引用。請記住,您可以在多個解決方案中擁有一個項目。如果您在同一時間開發兩個項目,請執行此操作。

+2

正確,如果項目A在源代碼管理(TFS)下項目A和項目B在源代碼管理項目B下,則可以同時檢入A和B從一個解決方案,這是相當不錯的。 – John

+0

從我的角度來看,發佈輸出不應該包含調試符號(無論是內部還是作爲pdb文件)。一個選項可能是在安裝過程中刪除pdb文件作爲後期構建步驟。 – Beachwalker

+0

我們目前擁有太多的項目文件(程序集,可通過彈簧進行動態加載和交換),將它們構建在一個解決方案中。當解決方案很大時,VS + Resharper變得非常緩慢。因此,有一個解決方案不是一種選擇(請參閱頂部的評論)。另一個原因是外部組件直接進入存儲庫和CI應該與當前/最新的開發相協調(解決這個問題的一個選擇是將單元測試與交付解耦,但是這會花費在api更改期間更改單元測試)。 – Beachwalker

4

如果您有兩個相關的項目,您對它們處於相同的目標類型和配置(這意味着它不是您使用的某個第三方包)時足夠關心 - 您最好將它們放在相同的解決方案中。

如果你因爲某些原因不能不能,還有另一個(有點醜陋)的解決方案。

您可以根據目標編輯您的.csproj和「動態」引用程序集。在.csproj文件中,引用位於名爲「ItemGroup」的XML元素中。在每個項目組中,您有許多「引用」元素,並且組件的路徑位於「提示」元素中。你可以在提示中放置$(Configuration)變量。例如:

<ItemGroup> 
    <Reference Include="your assembly"> 
     <HintPath>..\..\$(Configuration)\blabla.dll</HintPath> 
    </Reference> 
</ItemGroup> 

這樣,目錄名稱將包含配置名稱(他們應該是匹配 - 這意味着,如果你改變了你的名字破事)。

另一種選擇是定義三個完全不同項目組,並使用「條件」屬性:

  1. 物品組沒有條件是將使用參考系統,的System.Xml等
  2. 屬性爲Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "的項目組將包含將在調試配置中使用的引用。
  3. 對於發佈配置,屬性爲" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "的項目組。

在每個項目組中,您將引用正確配置中的程序集。

這有點難看,因爲.csproj有時會自動修改,再加上你可以很容易地忘記和弄出來。但無論如何,它會起作用。

+0

$變量表達式的使用在Visual C++項目中工作得很好(或說出色),我自己也使用過它們。但是,在VS中使用VS的C#項目中存在一個問題,即無法使用ui輸入這些變量(就像在C++項目中所做的那樣)。就個人而言,我不喜歡使用IDE無法表達的內容,需要在更改後手動編輯文件。儘管如此,你的建議正在起作用,併成爲解決問題的一種方法。謝謝。 – Beachwalker

相關問題