【问题标题】:What are the advantages of using runtime specific implementations?使用运行时特定的实现有什么好处?
【发布时间】:2020-04-07 12:51:49
【问题描述】:

从 alpine 容器中运行 dotnet restore --runtime linux-musl-x64 时,我注意到正在下载一些 runtime.unix.System* 包,当未指定 --runtime 标志时不会下载这些包。我假设这是因为当 runtime 不存在时,dotnet restore 会将其默认为 any 恢复包提供的与平台无关的实现。这是一个正确的假设吗?

我想知道是否在任何地方都记录了使用 .Net CORE 包的运行时特定实现的优势?例如System.Net.Socketsruntime.unix.System.Net.Sockets。我会假设因为它们不是通用实现,所以从内存和 CPU 利用率的角度来看它们更有效,但是有任何官方建议或基准吗?

【问题讨论】:

    标签: .net asp.net-core .net-core nuget-package-restore


    【解决方案1】:

    这不是优点/缺点的问题。当您指定运行时平台时,您将专门针对该平台,否则,您将针对任何可能的平台。在前一种情况下,引入了唯一必要的运行时组件,而在后一种情况下,只是对目标上可能安装的任何运行时的松散引用。无论哪种方式都将使用这些软件包。有适用于 Windows、Linux、Mac 等的运行时包。使用哪些显然取决于应用程序最终部署的位置,或者当然,运行时标志的规范。

    【讨论】:

      【解决方案2】:

      System.Net.Sockets 这样的包包含您的应用程序所依赖的托管位。因此,无论您使用哪种部署方法(依赖于框架或自包含),它们都是必需的,因此由构建过程恢复。

      runtime.unix.System.Net.Sockets 这样的包通常只包含本机位(在 OS API 上包装的垫片)。只有独立部署才需要它们。

      所以简单地说System.Net.Sockets 取决于runtime.unix.System.Net.Sockets(如果在 UNIX 上运行)。它们并不像您想象的那样彼此等价。

      您不需要调用dotnet restore --runtime linux-musl-x64,因为那些运行时包在编译期间是无用的。当您以特定运行时为目标时,可以将此类运行时包的恢复推迟到 dotnet publish

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-25
        • 1970-01-01
        • 2023-04-08
        • 2021-08-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-12
        • 1970-01-01
        相关资源
        最近更新 更多