有关 .NET8 运行时子文件夹的说明

问题描述 投票:0回答:1

我看到了一些关于此的问题。例如:

在 .NET 5 项目的输出目录中创建了多余的“运行时”文件夹

我不介意这些 DLL 文件存在,但我很担心。这是我的运行时文件夹结构:

runtimes
    win
        lib
            net7.0
                System.Management.dll
            net8.0
                System.Security.Cryptography.Pkcs.dll

我的应用程序旨在在 Windows PC 上运行,但我关心的是这个

net7.0
参考。在我的安装程序中,我仅检查 .NET8 运行时依赖项,而不检查 .NET7。

System.Management.dll
Google.Apis.Gmail.v1
使用:

System.Security.Cryptography.Pkcs.dll
Mimekit
使用,但我不担心这个:

关于

Google.Apis.Gmail.v1
NuGet package 它指出:

用于 Gmail v1 的 Google API 客户端库。

  Supported Platforms:
  - .NET Framework 4.6.2+
  - .NET Standard 2.0
  - .NET 6.0+

所以,回到我关心的问题......我的安装程序仅检查 .NET8 运行时,因为这是我的目标平台。我应该担心 runtimes 子文件夹中对 .NET7 Runtime 的引用吗?


您能否提供一个最小的可重现示例?

我不知道如何分享。但它很容易重现(至少对我来说):

  1. 创建新的 .NET8 C# 控制台应用程序。
  2. 添加
    Google.Apis.Gmail.v1
    NuGet 包。
  3. 编译

使用文件资源管理器导航到此处(当然相对于您的根目录):

...\ConsoleApp1\ConsoleApp1\bin\Debug\net8.0\runtimes\win\lib\net7.0
c# runtime gmail-api .net-7.0 .net-8.0
1个回答
0
投票

GutHub 讨论中解释了为什么会发生这种情况:

https://github.com/googleapis/google-api-dotnet-client/issues/2722

总结一下:

我相信它显示为 net7.0 因为我们目前依赖 在 7.0.2 版本的

System.Management
上,并且仅针对到目前为止 作为net7.0 - 但由于net8.0与net7.0兼容,它仍然会 在执行时加载它。

如果您想迁移到net8.0目标版本,您可以手动 自己添加对 System.Management 8.0 的依赖 - 然后

System.Management.dll
将会在
runtimes/win/lib/net8.0/System.Management.dll
。如果这让你 安装程序更简单,不会造成任何损害。

我确定的解决方案是:

我鼓励您使用

dotnet publish
来代替。
dotnet publish
的全部目的是为 发布 准备应用程序,这可能就是您的安装程序的用途。

在接下来的几个月中,此依赖项将在

Google.Apis.Gmail.v1
中更新。

© www.soinside.com 2019 - 2024. All rights reserved.