【问题标题】:Can two project.json files share the same codebase?两个 project.json 文件可以共享相同的代码库吗?
【发布时间】:2017-04-30 00:02:23
【问题描述】:

我有一些代码库,我想从中构建一个 .NET Core 库和一个 UWP 库。最初,我想构建一个为两者服务的库,但我没有找到解决方法(在 UWP 情况下,该库需要引用 UWP 特定的类,如 StreamSocket)。

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

是否可行?

【问题讨论】:

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


    【解决方案1】:

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

    MyLib.Common
    MyLib.Core
    MyLib.Uwp
    

    将所有共享的、平台中立的代码保留在 MyLib.Common 中,并从两个特定于平台的项目中引用这些代码。这样,您几乎没有或没有代码重复,并且您还可以毫无问题地从 UWP 项目中引用 UWP 特定的库。

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

    【讨论】:

    • 恐怕我没有提到(为简洁起见)实际上还有更多用于旧版 Visual Studio 和 .NET Framework(例如 .NET Framework 2.0)的目标,而这些无法使用共享库概念。所以我实际上不能以这种方式重组我的项目。
    【解决方案2】:

    嗯,看起来 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 文件夹在构建 .NET Core 项目时出现在 bin/Debug 中(并将生成的 DLL 放在那里),而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,它没有用(只是浪费编译器时间),但我会只选择那些对我有用的输出所以在我的特殊情况下这不是问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-25
      • 2020-01-26
      相关资源
      最近更新 更多