2016-12-14 128 views
1

我有一些代碼庫,我想從中建立一個.NET Core庫和一個UWP庫。最初,我想構建一個單獨的lib,它可以用於這兩種,但我沒有找到一種方法(在UWP的情況下,lib需要引用像StreamSocket這樣的UWP特定類)。兩個project.json文件可以共享相同的代碼庫嗎?

所以我爲UWP創建了一個單獨的項目文件。然而,看起來像我不能創建一個單獨的project.json(我不能有core.json和uwp.json,因爲project.json名稱是常量)。我不想在不同的文件夾中創建多個我的代碼庫副本(每個副本都有自己的project.json),我寧願保留一個副本。

是否可行?

回答

1

實現這一目標的最徹底的方法是將有三個庫:

MyLib.Common 
MyLib.Core 
MyLib.Uwp 

保留所有共享,平臺中立的代碼在MyLib.Common,並參考來自兩個特定於平臺的項目。這樣,您幾乎沒有代碼重複,也可以從UWP項目中引用UWP特定的庫,而不會出現任何問題。

你也許能夠得到兩個項目來引用相同的.cs文件(並擺脫共享項目),但這對我來說似乎更加噁心。

+0

恐怕我沒有提到(爲了簡潔起見)實際上有更多更老的Visual Studio和.NET Framework的目標(例如.NET Framework 2.0),並且這些目標不能使用共享庫的概念。所以我實際上不能用這種方式重組我的項目。 – Alex

0

好吧,它看起來像UWP和.NET Core項目可以使用相同的project.json。它的「框架」一節的樣子:

"frameworks": { 
    "netstandard1.3": {}, 
    "uap10.0": { 
    "dependencies": { 
     "Microsoft.NETCore.UniversalWindowsPlatform": "5.2.2" 
    } 
    } 
}, 

因爲UWP項目都有自己的csproj文件,這導致3倍號樓的DLL:project.json導致netstandard1.3和uap10.0文件夾顯示在斌/調試(和將生成的DLL放置在那裏)當構建.NET Core項目時,而UWP項目本身在bin/Debug中構建另一個DLL。

bin/Debug/uap10.0/My.dll是垃圾,它不能包含任何UWP專用代碼(因爲通用Windows引用在.NET Core項目中不可用),因此我沒有在項目中定義WINDOWS_UWP .json的「uap10.0」部分。

但是,UWP csproj文件確實定義了WINDOWS_UWP,並且該項目中提供了通用Windows。所以,當UWP項目被建成,它實際上只使用了這一點:

"uap10.0": { 
    "dependencies": { 
    "Microsoft.NETCore.UniversalWindowsPlatform": "5.2.2" 
    }, 

(如果這個代碼是在project.json丟失,UWP項目將無法生成)。 project.json的其餘部分(主要針對「netstandard1.3」目標)對構建過程沒有任何影響。

所以我依靠的事實是,我可以在project.json中定義條件指令(在這種情況下是WINDOWS_UWP),但也在csproj文件中,因此在處理使用相同項目的UWP項目時會獲得額外結果.json文件作爲.NET Core項目。在某種程度上,UWP csproj作爲另一個在構建過程中與真實項目合併的project.json。

是的,我得到了一個額外的DLL bin/Debug/uap10.0/My.dll這是沒有用的(只是浪費編譯時間),但我會只選擇那些有用的輸出所以在我的特殊情況下這不是問題。

相關問題