无法从UWP引用.NET Core库

Vol*_*idt 11 .net c# nuget .net-core uwp

我有一个带有以下project.json 的.NET Core库:

{
  "version": "1.0.0-*",
  "dependencies": {
    "NETStandard.Library": "1.6.0"
  },
  "frameworks": {
    "netstandard1.6": { }
  },
  "scripts": {
    "postcompile": [
      "dotnet pack --no-build --configuration Release",
      "xcopy bin\\Release ..\\..\\lib\\ /Y"
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

其中后编译脚本创建了一个nuget包,我按照这些说明在VS中添加了自定义Feed .这是因为我想从Windows通用应用程序中引用它,根据这个问题,它不能(否).但是当我尝试它时,我得到这样的信息:

Package AEther 1.0.0 is not compatible with uap10.0 (UAP,Version=v10.0).
Package AEther 1.0.0 supports: netstandard1.6 (.NETStandard,Version=v1.6)
One or more packages are incompatible with UAP,Version=v10.0.
Run Code Online (Sandbox Code Playgroud)

这是我不再理解的地方.根据这个,它应该适用于netstandard> = 1.6.0,而这个官方表说我需要目标netstandard <= 1.4.0,但这不会改变任何东西.更令人困惑的是,如果我将netstandard(依赖项和目标框架)的两个版本降级到1.5,我仍然会得到完全相同的错误而不在我的任何文件中指定1.6.

更新 UWP project.json看起来像这样

{
  "dependencies": {
    "Microsoft.NETCore.UniversalWindowsPlatform": "5.2.1"
  },
  "frameworks": {
    "uap10.0": {}
  },
  "runtimes": {
    "win10-arm": {},
    "win10-arm-aot": {},
    "win10-x86": {},
    "win10-x86-aot": {},
    "win10-x64": {},
    "win10-x64-aot": {}
  }
}
Run Code Online (Sandbox Code Playgroud)

有人可以清理无论是

  1. 如何从UWP中引用.Net核心库或者
  2. 在我的具体案例中发生了什么?

回答

我解决了它向UWP应用程序添加导入,如下所示:

{
  "dependencies": {
    "Microsoft.NETCore.UniversalWindowsPlatform": "5.2.1"
  },
  "frameworks": {
    "uap10.0": { import [ "netstandard1.6" ] }
  },
  "runtimes": {
    "win10-arm": {},
    "win10-arm-aot": {},
    "win10-x86": {},
    "win10-x86-aot": {},
    "win10-x64": {},
    "win10-x64-aot": {}
  }
}
Run Code Online (Sandbox Code Playgroud)

Bri*_*ing 10

您需要将Microsoft.NETCore.UniversalWindowsPlatform升级到5.2.1


7月15日更新

好的,这是我的结果

  1. 创建一个新的UWP
  2. 升级到5.2.2,于7月14日发布
  3. 更新project.json,导入"netstandard1.6"

    { "dependencies": { "Microsoft.NETCore.UniversalWindowsPlatform": "5.2.2", "Test": "1.0.0" }, "frameworks": { "uap10.0": { "imports": [ "netstandard1.6" ] } }, "runtimes": { "win10-arm": {}, "win10-arm-aot": {}, "win10-x86": {}, "win10-x86-aot": {}, "win10-x64": {}, "win10-x64-aot": {} } }

  4. 创建一个新的dotnet核心库

  5. 构建库,并生成一个nuget包
  6. 我能够引用.dll文件或nuget包.我不要让智能打字时码
  7. UWP已成功构建和部署,但一旦运行它,就会抛出异常 在此输入图像描述

  • @VolkerSchmidt你能更新你的UWP project.json吗? (2认同)
  • 导入是错误的.你在说什么API UWP支持.它只支持netstandard1.4,通过导入1.6你正在撒谎到nuget,并且如果该库使用netstandard1.6中存在但不在1.4中的任何API,则会遇到运行时故障. (2认同)

jno*_*ovo 7

这是我不再理解的地方.根据这个,它应该适用于netstandard> = 1.6.0,而这个官方表说我需要目标netstandard <= 1.4.0,但这不会改变任何东西.更令人困惑的是,如果我将netstandard(依赖项和目标框架)的两个版本降级到1.5,我仍然会得到完全相同的错误而不在我的任何文件中指定1.6.

通用Windows平台映射到netstandard1.4 - 既不是1.6也不是1.5.因此,您的库(称为AEther我假设)的要求比您的UWP应用程序要高.

  1. 如何从UWP中引用.Net核心库或者

您在链接的SO问题中所述,Visual Studio中尚不支持此问题.

我只能猜测它与CLI的支持有关,这是一个悬而未决的问题.截至今天,预计将在Microsoft.NETCore.UniversalWindowsPlatform元数据包的5.3版中修复- 尽管之前预计将在5.2.2中修复.

  1. 在我的具体案例中发生了什么?

NuGet告诉您,您的软件包仅支持netstandard1.6 目标框架,但不支持uap10.0.实际上,如果你打开包装,.nupkg你会发现你的DLL lib\netstandard1.6.

由于DOTNET包会自动创建.nuspec从你的project.json,所以你就需要使用适当的框架修复它(例如netstandard1.4).编译不同的框架可能更容易,例如与.NET Platform Standard兼容的Portable配置文件.