Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 两个project.json文件能否共享相同的代码库?_C#_.net_Uwp_.net Core_Project.json - Fatal编程技术网

C# 两个project.json文件能否共享相同的代码库?

C# 两个project.json文件能否共享相同的代码库?,c#,.net,uwp,.net-core,project.json,C#,.net,Uwp,.net Core,Project.json,我有一些代码库,我想从中构建一个.NET核心库和一个UWP库。最初,我想构建一个库,它可以同时为这两个类服务,但我没有找到一种方法(在UWP的情况下,库需要引用UWP特定的类,如StreamSocket) 所以我为UWP创建了一个单独的项目文件。然而,看起来我无法创建一个单独的project.json(我不能有core.json和uwp.json,因为project.json名称是常量)。我不想在不同的文件夹中创建代码库的多个副本(每个副本都有自己的project.json),我宁愿保留一个副本

我有一些代码库,我想从中构建一个.NET核心库和一个UWP库。最初,我想构建一个库,它可以同时为这两个类服务,但我没有找到一种方法(在UWP的情况下,库需要引用UWP特定的类,如StreamSocket)

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


是否可行?

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

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


您可能还可以让两个项目引用相同的
.cs
文件(并删除共享项目),但这对我来说似乎更黑客。

嗯,看起来UWP和.NET核心项目可以使用相同的project.json。其“框架”部分如下所示:

"frameworks": {
  "netstandard1.3": {},
  "uap10.0": {
    "dependencies": {
      "Microsoft.NETCore.UniversalWindowsPlatform": "5.2.2"
    }
  }
},
因为UWP项目有自己的csproj文件,这导致生成3个DLL:project.json导致在生成.NET核心项目时,netstandard1.3和uap10.0文件夹出现在bin/Debug中(并将生成的DLL放在那里),而UWP项目本身在bin/Debug中生成另一个DLL

bin/Debug/uap10.0/My.dll是垃圾,它不能包含任何特定于UWP的代码(因为通用Windows引用在.NET核心项目中不可用),因此我没有在project.json的“uap10.0”部分中定义Windows_UWP

但是,UWP csproj文件确实定义了WINDOWS_UWP,并且该项目中提供了通用WINDOWS。因此,当UWP项目建成时,它实际上只使用以下内容:

"uap10.0": {
  "dependencies": {
    "Microsoft.NETCore.UniversalWindowsPlatform": "5.2.2"
  },
(如果project.json中缺少此代码,则不会生成UWP项目)。json的其余部分(大部分特定于“netstandard1.3”目标)对构建过程没有影响

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

是的,我得到了一个额外的DLL bin/Debug/uap10.0/My.DLL,它没有任何用处(只是浪费了编译器的时间),但我将只选择那些对我有用的输出,因此在我的特殊情况下这不是一个问题。

恐怕我没有提到(为了简洁起见)事实上,对于较旧的Visual Studio和.NET框架(例如.NET Framework 2.0),还有更多的目标,而这些目标不能使用共享库概念。所以我不能用这种方式重组我的项目。