【问题标题】:Purpose of .Net Framework Dependencies in NetCore.App SDK?NetCore.App SDK 中 .Net Framework 依赖项的用途?
【发布时间】: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 包之间的区别有关。

标签: .net-core


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-14
    • 2017-08-16
    • 2020-07-08
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    • 2021-03-22
    • 1970-01-01
    相关资源
    最近更新 更多