2010-09-10 46 views
5

我目前擁有單個項目的單個解決方案,並生成可執行的A.EXE。該項目由幾十個C#源文件,表單等組成。Visual Studio中單個C#項目中的多重可執行文件

我現在需要生成可執行文件B.EXE和C.EXE。 B.EXE將使用大約95%的A.EXE代碼庫(即功能子集)。 C.EXE將使用B.EXE的約80%的代碼庫(即另一個子集)。

爲此設置Visual Studio和我的項目/解決方案的建議方法是什麼?我使用2010年,但我認爲這可能是一個通用的Visual Studio問題。

我的顧慮:

  • 與預處理似乎沒有要改變輸出可執行文件的名稱的方式。也排除整個文件可能是不可能的,我必須離開類接口並定義代碼?

  • 爲B.EXE和C.EXE創建項目並鏈接源文件我擔心這會讓三個項目變得非常容易失去同步。假設我將一個新文件foo.cs添加到一個項目中,我可能需要記住將其添加到其他項目中,並記住爲此使用鏈接,以免文件被複制。

  • 我擔心的是,將我的項目分成多個組件會使其難以管理,調試和記憶什麼是定義在哪裏。我擔心最終會有十幾個令人困惑的議會,而不僅僅是一小撮議員。

想法和建議表示讚賞。我確定這是一個常見問題。

謝謝,安迪

回答

5

您使用類庫來包含每個應用程序之間通用的代碼。在每個應用程序中,您添加對該類庫的引用,並且可以使用其中所有可公開訪問的代碼。 (您將無法使用內部類型,如果您不添加公共內容,這是默認類型)。

類庫應包含在3個應用程序之間不會更改的代碼,或者在發生細微更改時,應該抽象出足夠的代碼以支持它們之間的差異。複製粘貼是一個可怕的想法,但如果你必須使用rule of 3--儘管更好的代碼只有一次而已。

將代碼拆分爲多個程序集並不會讓事情變得難以管理 - 我發現它恰恰相反。您可以將每個類庫視爲同一個項目的單獨文件夾,並且您只是從每個文件夾中獲取代碼。不同之處在於,你不能在程序集之間不小心引入循環依賴關係,這可以幫助你以足夠抽象的方式設計代碼,以支持所有3個項目,而不依賴任何特定的代碼。

+0

共識是我應該使用庫。我已經開始將代碼分解成它們,並且我已經遇到了循環依賴。我想解決方案是重構這兩個庫來創建具有公共代碼的第三個庫。現在我感覺有點像我正在追蹤一個洞裏的一隻兔子...... – Andy 2010-09-10 20:22:12

+0

當你遇到循環依賴問題時,通常是因爲你的類型耦合過於緊密。有許多技術可以將類型從它的使用中分離出來 - 例如,通過從類型中提取接口,以及僅在類庫中使用接口 - 其他項目可以從接口派生自己的類型,並簡單地告訴類庫在遇到接口(依賴注入)時使用此特定類型。如果您願意發佈一些代碼示例(只是最低限度顯示問題),我會回顧一些可以幫助您的技術。 – 2010-09-10 20:44:05

+0

謝謝。因爲它有點偏離主題,所以我在這裏發佈了一個新問題:http://stackoverflow.com/questions/3688622/handling-events-in-c-assembly – Andy 2010-09-10 21:52:45

2

如果A,B和C可執行文件之間有共享代碼,那麼您的支持代碼應該按照爲所有三種可執行文件提供功能的程序集進行排列。

請記住,沒有理由不生成單個程序集來支持所有三個可執行文件。使用命名空間和OO原則(如繼承)在您的類的關注點和角色之間劃清界限。所有三個可執行文件都可以根據需要使用共享程序集的一部分。

相關問題