2016-12-14 127 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这是没有用的(只是浪费编译时间),但我会只选择那些有用的输出所以在我的特殊情况下这不是问题。

相关问题