无法从UWP引用.NET Core库

13

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

在这里postcompile脚本创建了一个nuget package,我将其作为自定义源添加到VS中,按照这些说明操作。 这是因为我想从Windows Universal应用程序引用它,否则(目前)无法实现,参见此问题。 但当我尝试时,我收到以下消息:

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进行目标定位,但这并没有改变什么。更加令人困惑的是,如果我将依赖项和目标框架版本同时降级到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 Core库或
  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": {}
  }
}

2
我相信会有更新的UWP来解决这个问题。 - Lex Li
我会将其标记为答案,因为它解决了问题...谢谢。 - Volker Schmidt
2个回答

10

需要升级Microsoft.NETCore.UniversalWindowsPlatform到5.2.1版本。


7月15日更新:

好的,这是我的结果:

  1. 创建新的UWP应用
  2. 升级到7月14日发布的5.2.2版本
  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 core库

  5. 构建库并生成nuget包
  6. 我能够引用.dll文件或nuget包,并且在编写代码时会得到智能提示
  7. UWP应用程序已成功构建和部署,但一旦运行,就会抛出异常 enter image description here

我已经这样做了(之前是5.2)。没有变化。 - Volker Schmidt
2
@VolkerSchmidt,你能更新一下你的UWP项目json文件吗? - Brian Ding
是的!谢谢你!导入 netstandard 就可以了。编辑:即使使用 uwp5.2.1 和 netstandard1.6 也是如此。 - Volker Schmidt
@VolkerSchmidt,你搞定了吗? - Brian Ding
它与你的导入一起工作。与此同时,我切换到了一个PCL。 - Volker Schmidt
2
导入有误。你在谎称UWP支持哪一组API。它只支持netstandard1.4,如果导入1.6,你就在欺骗nuget,并且如果该库使用任何仅存在于netstandard1.6而不在1.4中的API,则会遇到运行时故障。 - TheESJ

7
这是让我感到困惑的地方。根据此文,它应该对netstandard >=1.6.0正常工作,而官方表格却说我需要针对netstandard <=1.4.0,但这并没有改变什么。更加令人困惑的是,如果我将netstandard的两个版本(依赖项和目标框架)都降级到1.5,我仍然会在任何文件中未指定1.6的情况下收到完全相同的错误。 通用Windows平台映射到netstandard1.4 - 而不是1.6或1.5。因此,您的库(称为AEther,我假设)具有比UWP应用程序更高的要求。
您链接的SO问题所述,目前在Visual Studio中还不支持从UWP引用.Net Core库。
我只能猜测这与CLI支持有关,这是一个未解决的问题。截至今天,预计将在 Microsoft.NETCore.UniversalWindowsPlatform 元包的版本5.3中修复它 - 尽管此前曾预计在5.2.2中修复。
  1. 在我的情况下发生了什么?
NuGet告诉你,你的软件包仅支持netstandard1.6目标框架,但不支持uap10.0。确实,如果你解压缩你的.nupkg文件,你会发现你的DLL在lib\netstandard1.6下。

由于dotnet pack会自动从你的project.json创建.nuspec文件,所以你需要使用正确的框架(例如netstandard1.4)来修复它。编译不同的框架可能会更容易,例如与.NET平台标准兼容的可移植配置文件


正如我所述,使用netstandard1.4会产生完全相同的错误(提示需要netstandard1.6)。因此让我很困惑。如果我必须具体地针对uap10.0进行定位,我该怎么做呢? - Volker Schmidt
现在我有了答案,我可以确认我不需要针对netstandard1.4进行目标设置。 - Volker Schmidt
你只需要在“frameworks”下将版本从“netstandard1.6”更新到“netstandard1.4”。你的NuGet包可能没有被正确地重新创建或刷新,请尝试增加版本号。 - jnovo
不需要更改NuGet包。增加版本号即可。 - Volker Schmidt
同意@jnovo的观点。在更改ns1.4时可能漏掉了某些内容。更改NuGet包时必须非常小心:NuGet会将包缓存在packages文件夹和临时文件夹中。要么更改名称,要么清除这些缓存(nuget.exe locals是一个好工具)。 - TheESJ
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接