无法从UWP引用.NET Core库

我有一个带有以下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" ] } } 

其中后编译脚本创建了一个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. 

这是它停止对我有意义的地方。 根据这个 ,它应该适用于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": {} } } 

有人可以清理

  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": {} } } 

您需要将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已成功构建和部署,但是一旦运行它,就会抛出exception 在此处输入图像描述

这是它停止对我有意义的地方。 根据这个,它应该适用于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您将在lib\netstandard1.6下找到您的DLL。

由于dotnet pack会自动从project.json创建.nuspec ,因此您需要使用适当的框架(例如netstandard1.4 )进行修复。 编译不同的框架可能更容易,例如与.NET Platform Standard兼容的Portable配置文件 。