无法从 UWP 引用 .NET Core 库

Posted

技术标签:

【中文标题】无法从 UWP 引用 .NET Core 库【英文标题】:Cannot reference .NET Core library from UWP 【发布时间】:2016-11-13 21:25:00 【问题描述】:

我有一个带有以下 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 中将其添加为自定义提要,跟在 these instructions 之后。 这是因为我想从 Windows 通用应用程序中引用它,根据this question,这不能(目前)。 但是当我尝试它时,我收到了这条消息:

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.

这对我来说不再有意义。根据this,它应该适用于netstandard >=1.6.0,而this official table 说我需要以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": 
  

有人可以清理一下

    如何从 UWP 中完全引用 .Net Core 库或 在我的具体情况下发生了什么?

回答

我解决了它添加一个导入到 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": 
  

【问题讨论】:

我相信 UWP 会有更新来解决这个问题。 我会将其标记为答案,因为它解决了问题...谢谢。 【参考方案1】:

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


7 月 15 日更新

好的,这是我的结果

    创建新的 UWP 升级到 5.2.2,将于 7 月 14 日发布

    更新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":

    创建新的 dotnet 核心库

    构建库,并生成 nuget 包 我可以引用 .dll 文件或 nuget 包。而且我确实在输入代码时变得聪明 UWP 构建和部署成功,但是一旦我运行它,就会抛出异常

【讨论】:

我做到了(之前有 5.2)。没有变化。 @VolkerSchmidt 你能更新你的 UWP project.json 吗? 是的!谢谢!导入 netstandard 就可以了。编辑:即使使用 uwp5.2.1 和 netstandard1.6 @VolkerSchmidt 你让它运行了吗? 导入错误。您在谎报 UWP 支持的 API 集。它只支持 netstandard1.4,通过导入 1.6,你是在对 nuget 撒谎,如果该库使用 netstandard1.6 中存在但 1.4 中没有的任何 API,则会遇到运行时故障。【参考方案2】:

这对我来说不再有意义。据此,它 对于 netstandard >=1.6.0 应该可以正常工作,而这个官方表 说我需要以 netstandard

Universal Windows Platform maps to netstandard1.4 - 既不是 1.6 也不是 1.5。因此,您的库(我假设称为 AEther)比您的 UWP 应用具有更高的要求。

    如何从 UWP 中完全引用 .Net Core 库或

如your linked SO question 中所述,Visual Studio 尚不支持此功能。

我只能猜测它与CLI的支持有关,即an open issue。截至今天,它预计将在 Microsoft.NETCore.UniversalWindowsPlatform 元包的 5.3 版中修复 - 尽管之前预计将在 5.2.2 中修复。

    在我的具体情况下发生了什么?

NuGet 告诉您,您的包仅支持 netstandard1.6 target framework,但不支持 uap10.0。事实上,如果你解压你的.nupkg,你会在lib\netstandard1.6 下找到你的DLL。

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

【讨论】:

正如我所指出的,使用 netstandard1.4 会给出完全相同的错误(说 netstandard1.6 是必需的。因此我很困惑)。如果我必须专门针对 uap10.0,我该怎么做? 为了澄清这一点,我的目标是 netstandard1.6,因为 SO 上的另一个问题声称这是唯一的方法。 现在我有了答案,我可以确认我不必针对 netstandard1.4 您只需将frameworks下的netstandard1.6更新为netstandard1.4即可。您的 NuGet 包一定没有重新创建或正确刷新,请尝试提高版本。 必要时不对 NuGet 包进行任何更改。增加版本有效。

以上是关于无法从 UWP 引用 .NET Core 库的主要内容,如果未能解决你的问题,请参考以下文章

无法从完整的 .NET 项目项目引用 .NET Core 类库

如何将 .NET dll 引用添加到 UWP 项目?

我无法在可移植库项目中添加对 ServiceModel 的引用

参考 WPF 中的 .NET Core 1.0 库

使用 .Net 标准库中的 UWP 方法

如何从 UWP(又名 .NET Core)中的 Type 对象获取程序集