无法从 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 类库