Visual studio 2017 为什么可以';我是否在Windows通用应用程序中引用.Net Core 1.0程序集?

Visual studio 2017 为什么可以';我是否在Windows通用应用程序中引用.Net Core 1.0程序集?,visual-studio-2017,win-universal-app,Visual Studio 2017,Win Universal App,我在家里使用Visual Studio 2017社区版,并尝试制作我的第一个通用Windows应用程序。该解决方案有两个程序集,一个用于UI,另一个用于纯计算。在我尝试从UI程序集引用计算程序集之前,一切都很好。它拒绝添加引用。起初,从我的阅读中,我认为这是目标版本不兼容的问题,但即使我将计算目标设置为尽可能低,将UI目标设置为尽可能高,也没有什么区别 计算程序集是一个面向.Net Core 1.0的C#类库 UI AssesBly是通用Windows,其最小目标版本设置为: “Window

我在家里使用Visual Studio 2017社区版,并尝试制作我的第一个通用Windows应用程序。该解决方案有两个程序集,一个用于UI,另一个用于纯计算。在我尝试从UI程序集引用计算程序集之前,一切都很好。它拒绝添加引用。起初,从我的阅读中,我认为这是目标版本不兼容的问题,但即使我将计算目标设置为尽可能低,将UI目标设置为尽可能高,也没有什么区别

  • 计算程序集是一个面向.Net Core 1.0的C#类库

  • UI AssesBly是通用Windows,其最小目标版本设置为:

    • “Windows 10秋季创建者更新(10.0;构建16299)”或
    • “Windows 10(10.0;内部版本10240)”
无论哪种方式,结果都是一样的。当我进入项目>添加参考…>项目/解决方案>选择其他组件,然后点击OK,它只是说

“无法添加对项目‘其他_程序集’的引用。”

没有解释,没有细节

这里的障碍是什么?我怎样才能避开这个问题,或者至少详细描述错误是什么


如果我将所有计算源文件复制到UI程序集中,所有内容都可以构建,但我希望能够支持多个平台。

请查看以下屏幕截图,UWP是.NET Core的子集。它还拥有许多UWP独有的API。UWP应用程序可以是.NET核心应用程序,但不一定是真的。并非所有.NET核心应用程序都是UWP应用程序。UWP仅适用于windows生态系统


正如@magicandre1981所说,更好的方法是将.netcore类库移植到.net标准2.0,可以将uwp min目标版本用于16299。对于.net标准,请参考此项。

因此,当我们在VS2017中创建一个跨平台(例如,可以在Linux系统上使用)类库时,我们有两个选项,一个是针对
.net Core
,另一个是针对
.net standard

虽然
.netcore
.netstandard
已经存在了几年,但它们仍然让我们大多数人感到困惑。幸运的是,我们可以在网上阅读。你可以在谷歌上搜索,也可以在Stackoverflow上找到投票最多的答案

我想和大家分享一下我的学习经验。在我开始在我的Ubuntu系统上编写.NET核心应用程序之后,我才完全理解这一点

是指应用程序能够在多个平台上运行,因此您有一个.NET Core控制台应用程序或ASP.NET Core应用程序,您可以在Windows或Ubuntu上使用相同的“dotnet run”命令运行应用程序,而无需修改一行代码

目前.NET Core仅支持两种项目类型:Console和ASP.NET Core。UWP仍然严格地仅限于Windows,您不能编写UWP应用程序并期望它在Windows以外的其他操作系统上运行

另一方面,是关于在不同的.NET应用程序之间共享类库代码-Windows窗体、WPF、UWP、Mono、ASP.NET核心,无论是何种项目类型。因为它们都必须实现某种版本的.NET标准。这意味着,如果将库编译为针对.NET标准的低版本(如1.0),那么所有人(是的,甚至WinForms(.NET平台4.5或更高版本)都可以引用该库

让我们回到问题上来,如果您将类库编译为目标.NET Core,那么它只能由.NET Core应用程序使用,UWP应用程序不能引用它,因为UWP不是跨平台的(UWP只是跨屏幕的,在不同的Windows 10设备上运行,屏幕大小不同;)


一个月后更新:当我写下这个答案时,我从未听说微软计划在2019年发布,他们将在下一个主要版本的.NET Core中添加对
WinForms
WPF
的支持,这意味着我的#1点.NET核心是关于应用程序跨平台的,这会有点误导。

将库从核心更改为.NET标准2.0,在应用程序中,将min设置为16299,将Target设置为17763OK,.NET标准。。。嘿,等一下,在我安装的VS 2017中,这不是一个可用的目标。看起来我必须为现有的源文件创建一个新项目。我已经开始构建了。我必须瞄准最新版本的Windows 10,但我可以解决这个问题——也许可以回到早期的.Net标准。谢谢。瞄准.Net标准1.4和早期的Windows 10很好。谢谢。我同意你一个月后的
更新
——你的定义有误导性。虽然.NET Core和Stanard都有在多个平台上运行代码的共同目标,但只有.NET标准版为“”。对于.NET Core,您不知道使用.NET API作为分支会得到什么。NET标准是最好的基线,如果你选择某个版本,你就可以确切地知道.NET、Mono、Xamarin和UWP的哪个版本在基线中mix@MickyD谢谢你的见解,尤其是这是一篇老文章。在我进行.NET Core(当时是1.1)实验的第一天,当我看到Console.WriteLine在Ubuntu的终端上打印一些东西时,我真的很兴奋,这是我写代码的第一个非Windows设备,这就是“跨平台”在我脑海中根深蒂固的方式。正如其他人在2016年.NET博客的评论部分所说,在“.NET Core”列中显示“UWP”是令人困惑的,因为即使从技术上讲UWP可能会拉入Microsoft.NETCore.UniversalWindowsPlatform,但将UWP部署为Linux或OSX,只部署Windows 10;windows10物联网设备;或者Xbox。在.NET Core中甚至没有提到UWP-在.NET Core 3.0中会出现什么,MSDN杂志,2018年