两个project.json文件可以共享相同的代码库吗?

时间:2016-12-14 15:29:09

标签: c# .net uwp .net-core project.json

我有一些代码库,我想从中构建一个.NET Core库和一个UWP库。最初,我想构建一个可用于两者的单一库,但我没有找到适合的方法(在UWP情况下,lib需要引用UWP特定类,如StreamSocket)。

所以我为UWP创建了一个单独的项目文件。但是,看起来我无法创建一个单独的project.json(我不能拥有core.json和uwp.json,因为project.json名称是常量)。而且我不想在不同的文件夹中创建我的代码库的多个副本(每个副本都有自己的project.json),我宁愿保留一份副本。

以某种方式可行吗?

2 个答案:

答案 0 :(得分:1)

实现这一目标的最简单方法是拥有三个库:

MyLib.Common
MyLib.Core
MyLib.Uwp

将所有共享的,平台无关的代码保存在MyLib.Common中,并从两个特定于平台的项目中引用该代码。这样,您几乎没有代码重复,并且您也可以从UWP项目中引用特定于UWP的库而不会出现任何问题。

您也可以获得两个项目来引用相同的.cs文件(并摆脱共享项目),但这对我来说似乎更加骇人听闻。

答案 1 :(得分: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文件夹出现在bin / Debug(并在那里产生DLL),同时构建.NET Core项目UWP项目本身在bin / Debug中构建另一个DLL。

bin / Debug / uap10.0 / My.dll是垃圾,它不能包含任何特定于UWP的代码(因为.NET Core项目中没有通用Windows引用)因此我没有定义WINDOWS_UWP project.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" target)对构建过程没有任何影响。

所以我依赖的事实是我不仅可以在project.json中定义条件指令(本例中为WINDOWS_UWP),而且还可以在csproj文件中定义条件指令,从而在处理使用相同的UWP项目时获得额外的结果project.json文件作为.NET Core项目。在某种程度上,UWP csproj充当另一个project.json,它在构建过程中与真实的一起合并。

是的,我得到了一个额外的DLL bin / Debug / uap10.0 / My.dll这是没用的(只是浪费了编译时间),但我会选择那些输出对我有用,所以在我的特定情况下它不是问题。