[英]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。
以鏈接形式將文件添加到項目中
我不確定這是否適合您的情況,但是在為不同的.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.