c# - 为什么在我的相同代码的可执行文件正在工作时在我的 c# 脚本中得到 System.NullReferenceException?

标签 c# .net wmi system.management csx

我有以下 .csx 脚本:

#r "C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Management.dll"
using System.Management;
ManagementClass cls = new ManagementClass("\\\\.\\root\\default:StdRegProv");
当我使用 运行它时dotnet script 我收到此错误:
System.NullReferenceException: Object reference not set to an instance of an object.
    at System.Management.MTAHelper.IsNoContextMTA()
    at System.Management.MTAHelper.CreateInMTA(Type type)
    at System.Management.ManagementPath.CreateWbemPath(String path)
    at System.Management.ManagementPath..ctor(String path)
    at System.Management.ManagementClass..ctor(String path)
    at Submission#0.<<Initialize>>d__0.MoveNext() in <..path..>\script.csx:line 3
 --- End of stack trace from previous location ---
    at Dotnet.Script.Core.ScriptRunner.Execute[TReturn](String dllPath, IEnumerable`1 commandLineArgs) in <...path...>\Temp\tmpBFB\Dotnet.Script.Core\ScriptRunner.cs:line 110
如果我在 Visual Studio 中编译以下代码,一切正常:
using System.Management;
class Script {
    static void Main() {
        ManagementClass cls = new ManagementClass("\\\\.\\root\\default:StdRegProv");
    }
}
为什么 ?我怎样才能让我的 .csx 脚本工作?

最佳答案

dotnet 脚本在 .NET Core 上运行,我认为 WMI 在 .NET Core 中不起作用,因为它需要 COM 互操作。见 this .
此外,.NET CORE 的全局运行时 dll 不在 GAC 中,而是在 runtime package store 中。 .

关于c# - 为什么在我的相同代码的可执行文件正在工作时在我的 c# 脚本中得到 System.NullReferenceException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69701032/

相关文章:

C# 是运算符,拆箱的确切行为

c# - 在 Button 事件处理程序方法 Xamarin Forms 中获取控件名称

c# - WPF ComboBoxItem Style 在 Combobox 获得焦点后加载

c# - 短信发送免费API

.net - 你反射过Reflector吗?

c# - WMI 查询的 select 子句中的数学运算

c# - 使用 SOAP,如何在一个请求中传递多个 ID?

c# - 为什么要在 List<T>.AddRange(IEnumerable<T>) 中添加额外的副本?

powershell - 如何使用Powershell扩展音量?

c++ - 使用 C++ 在 Windows 上设置风扇速度