我看到了一些关于此的问题。例如:
在 .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 的引用吗?
您能否提供一个最小的可重现示例?
我不知道如何分享。但它很容易重现(至少对我来说):
Google.Apis.Gmail.v1
NuGet 包。使用文件资源管理器导航到此处(当然相对于您的根目录):
...\ConsoleApp1\ConsoleApp1\bin\Debug\net8.0\runtimes\win\lib\net7.0
GutHub 讨论中解释了为什么会发生这种情况:
https://github.com/googleapis/google-api-dotnet-client/issues/2722
总结一下:
我相信它显示为 net7.0 因为我们目前依赖 在 7.0.2 版本的
上,并且仅针对到目前为止 作为net7.0 - 但由于net8.0与net7.0兼容,它仍然会 在执行时加载它。System.Management
如果您想迁移到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
中更新。