簡體   English   中英

單個Visual Studio C#項目,多個DLL版本?

[英]Single Visual Studio C# project, multiple DLLs versions?

我們有一個主項目,使用FEATURE_1,FEATURE_2和FEATURE_3作為啟用這些相應功能的三個條件編譯符號來創建單個DLL。

MyLib.dll =>的FEATURE_1,FEATURE_2和FEATURE_3已編譯為

現在,我們希望同一個主項目吐出3個不同的DLL,如下所示:

MyLib.1.dll => has only FEATURE_1 compiled in
MyLib.2.dll => has only FEATURE_2 compiled in
MyLib.3.dll => has only FEATURE_3 compiled in

目前,我們在VS2013中進行構建,並且這些編譯常量在.csproj文件(位於<DefineConstants> </DefineConstants>標記內)中定義,並對其進行硬編碼。

是否可以通過命令行傳遞它們,以便我們仍然可以維護一個主csproj,但僅通過更改命令行即可在RELEASE配置中構建3種不同的風格(例如:gcc的-D<buildFlag>樣式)? 該解決方案還有其他項目,它們旨在與RELEASE配置一起使用。 我也歡迎其他易於使用和維護的技術。

我們實際上是在嘗試避免創建偽項目或影響解決方案中的其他項目(解決方案中的21個項目)-對於某些非常簡單的事情來說似乎過於矯/過頭。

我沒有對命令行做任何事情,但是為了解決類似的問題,我創建了單獨的項目(定義了Framework Target和任何條件編譯符號),然后將所有項目文件添加為LINKED文件。 這樣,我只需要修改一組源文件,但是每個項目都將編譯成自己的DLL。

以鏈接形式將文件添加到項目中

  1. 右鍵單擊該項目,然后單擊添加現有項...。
  2. 選擇要添加的文件。
  3. 與其單擊添加按鈕, 不如單擊添加按鈕旁邊的箭頭,然后單擊添加為鏈接

我不確定這是否適合您的情況,但是在為不同的.NET Framework版本開發庫時,確實為我節省了很多時間。

您是否有完整的周轉時間?

您可以為每個功能創建單獨的項目,然后在打包階段將較小的程序集合並為一個功能,而不是在一個庫中定義所有功能然后禁用其中一些功能。

Microsoft具有ILMerge,而ILRepack是開放源代碼替代品,

https://www.nuget.org/packages/ilmerge

https://www.nuget.org/packages/ILRepack/

這樣,您就無需進行條件編譯,因為后者很難管理,並且復雜性已轉移到打包腳本中,可以輕松地對其進行管理並將其檢查到源代碼管理中。

暫無
暫無

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

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