簡體   English   中英

如何在Visual Studio中構建多項目解決方案而不會在二進制文件之間存在依賴關系?

[英]How do I build a multiple project solution in Visual Studio without dependencies between the binaries?

我正在使用Visual Studio 2010 Pro構建包含兩個項目的解決方案。 項目A包含我的大部分源代碼,而項目B旨在獨立運行,但必須使用項目A中包含的一些源代碼。

在當前配置下,項目A包含在項目B中作為參考。我希望能夠獨立地構建和維護每個項目的版本,但是當我構建整個解決方案時,ProjectB.exe似乎無法運行ProjectA.exe位於同一本地目錄中。 我會想並希望編譯.exe二進制文件時,所有依賴項都打包在每個中,但看起來並非如此。 實際上,任何在ProjectA.exe不存在時運行ProjectB.exe的嘗試都會導致System.IO.FileNotFoundException。

有沒有辦法構建一個獨立運行的ProjectB.exe版本,避免代碼重復?

如果你想擺脫或依賴A,你將不得不將共同邏輯提取到另一個項目中(我們稱之為C),正如Adriano在評論中所建議的那樣。

如果項目之間甚至需要更松散的綁定,則可以不將A(或C)作為項目引用,而是作為構建的程序集(.dll文件)引用,並將Specific Version引用屬性檢查為True 此外,如果您的項目/代碼庫結構更復雜,請在此處檢查更多程序集共享選項。

如果您需要通用代碼,最好的解決方案是將公共類分解為第三個程序集以充當庫。 (根據Adriano的建議。)他提示的另一個選項是在第二個項目中使用“添加現有文件”時使用“as link”選項。

如果您不知道它在哪里,請使用“添加現有文件”選項,然后在對話框中選擇文件,“添加”按鈕有一個下拉選項,您可以在其中選擇“作為鏈接文件”(或者那種效果。)

這允許您將相同的類編譯到多個項目中。 但請記住,無法為第二個項目更改鏈接文件的命名空間。 如果命名空間是“ProjectA.Domain”,那么您需要在項目B中訪問它。在引入多平台程序集之前,這對於Silverlight項目來說是一個有用的技巧。

一些選擇:

  1. 常見選項:將公共代碼分成第三類庫(DLL)項目。 並且ProjectA和ProjectB都依賴於它。 缺點是現在為了運行項目,你需要兩個文件(主exe和dll。)這種方法是大多數軟件的開發方式:單個可執行文件和一堆DLL。
  2. 正確的選項:將公共代碼分離到第三個項目並修改項目文件以創建包含兩個程序集的可執行文件(類似於非托管代碼中的靜態鏈接庫。)缺點是Visual Studio不支持開箱即用的您需要修改項目文件,這些文件實際上是MS-Build定義文件才能執行此操作。
  3. 丑陋的選項:為ProjectB中的ProjectA中的公共文件創建快捷方式。 這與將公共代碼復制到另一個項目相同,但您仍然只剩下一個源文件。 缺點是您必須為每個文件執行此操作,並在兩個項目中保持相同的結構。 這是一個丑陋的,如果可行的選擇。 選擇其中一個。

暫無
暫無

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

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