如何修复“系统。仅在Windows桌面应用程序上支持管理”

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

问题:

我们的应用程序是.NET 5 Windows桌面应用程序。许可功能要求应用程序使用

System.ManagementNuget中的组件从系统处理器ID,MAC地址和BIOS序列号创建唯一的设备ID。 在Visual Studio调试器测试时,这一切都很好。但是,当将

System.Management.dll

添加到应用程序安装程序(InstallShield Installer)时,我自然选择了App构建目标文件夹中的System.Management.dll的版本。事实证明,最终在该文件夹中的DLL的版本是一个no-op版本,抛出不支持的例外,说“系统。 解决方案:

I在build
c# .net .net-core .net-5 system.management
2个回答
4
投票
中找到了正确的版本

System.Management.dll Untimes \ Win \ lib etcoreappx.x

文件夹。就我而言,由于我使用

System.Management版本6.0,因此在“ NetCoreApp3.1”文件夹中。 结论 许多情况下,微软没有做正确的事情。在这种情况下,我的应用程序是一个.NET 5 Windows桌面应用程序,因此我们都认为MSBuild可以找出正确的事情。不是这样。在这种情况下,我至少希望.NET基金会能为此提供信息。好吧,现在你们现在也知道! Cheers 我认为这也许是因为deps.json文件缺少,导致存根版本是从应用程序目录加载的,而不是从Runtimes目录中加载的。因此,要么可以将所需的依赖项安装到应用程序根目录,要么可以维护构建目录的现有层次结构,还可以分发依赖关系配置。

https://learn.microsoft.com/en-us/dotnet/core/depparency-loading/default-probing

对于自动复制并替换文件,将其添加到Postbuild命令中。 我的案子是net8.0

0
投票
xcopy $(OutDir)\runtimes\win\lib\net8.0\System.Management.dll $(OutDir)\System.Management.dll /y

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.