NetCore.App SDK 中 .Net Framework 依赖项的用途?

Posted

技术标签:

【中文标题】NetCore.App SDK 中 .Net Framework 依赖项的用途?【英文标题】:Purpose of .Net Framework Dependencies in NetCore.App SDK? 【发布时间】:2019-11-11 05:44:50 【问题描述】:

VS2019 中的 .Net Core 控制台模板将 Microsoft.NETCore.App 元包添加为“SDK”,其中包括对 .NetFramework 库的依赖项。

例如,为什么将System.ServiceProcess.dll(一个.NetFramework 程序集)列为依赖项而不是System.ServiceProcess.ServiceController.dll(等效的.NetCore 程序集)?

要实际使用 System.ServiceProcess.dll 中包含的类型,您需要添加对 System.ServiceProcess.ServiceController nuget 包的引用。我很困惑为什么 NetCore.App SDK 会将 .NetFramework 程序集列为依赖项,特别是考虑到访问该程序集中包含的类型需要额外的 nuget 包

【问题讨论】:

很遗憾,您忘记使用 ILSpy 之类的工具从 .NET Core 和 .NET Framework 打开 System.ServiceProcess.dll。那么显然它们是完全不同的。 .NET Core 仅包含几个类型转发定义,只有引用System.ServiceProcess.ServiceController 才能生效。不要被名称所迷惑。 其实我做到了!我很困惑为什么 .net 框架程序集被列为 SDK 依赖项。他们的目的是什么?我认为这与作为 SDK 的“元包”与 .net 核心使用的实际 nuget 包之间的区别有关。 ***.com/questions/47365136/… 【参考方案1】:

这些不是 .NET Framework 程序集,而是提供 API 表面兼容性(程序集/类型标识)以在 .NET Core 上使用现有库或包的编译时参考程序集。其中一些将跨平台工作(如代码取决于 mscorlib.dll 中定义的 System.Object 已添加以与 .NET Core 2.0 兼容),而有些可能不会。 SDK 只是将所有外观/引用程序集添加到编译中,以帮助在编译期间解析引用。它们实际上不包含任何代码。甚至您可以在实际 .NET Core 运行时中找到的一些 dll 文件也可能只包含类型转发而不包含实际实现。

有关兼容性机制的信息,另请参阅Compatibility shim used by .NET Standard 2.0。

【讨论】:

以上是关于NetCore.App SDK 中 .Net Framework 依赖项的用途?的主要内容,如果未能解决你的问题,请参考以下文章

从 appsettings.json 获取 ConnectionString,而不是在 .NET Core 2.0 App 中硬编码

如何删除对 Dependencies/Frameworks/Microsoft.NETCore.App 中未使用程序集的引用?

无法执行,因为未找到应用程序或未安装兼容的 .NET SDK

将 Asp.Net Core 2.2 App 迁移到 3.1 时的整数序列化 [关闭]

在 asp.net 核心的构建后事件中运行 dotnet publish

asp.net核心中的TempData为空