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 时的整数序列化 [关闭]