繁体   English   中英

对在 PowerShell 中添加程序集以使用 .NET 类感到困惑

[英]Confused about adding assemblies in PowerShell for using .NET Classes

我希望得到一些澄清。 在 PowerShell 中使用 .NET Framework 类时,我们有时必须将程序集加载到内存中,我们必须在 PowerShell 中使用 Add-Type Cmdlet。 因此,例如,如果我想使用 System.ServiceProccess.ServiceController 类,我会做这样的事情

Add-Type -AssemblyName System.ServiceProcess

但这里是我感到困惑的地方。 文档说 System.ServiceProcess.ServiceController 类有 2 个程序集

https://docs.microsoft.com/en-us/dotnet/api/system.serviceprocess.servicecontroller?view=netframework-4.8即: System.ServiceProcess.ServiceController.dllSystem.ServiceProcess.dll

无论我添加哪一个,它似乎都有效,但我想知道引擎盖下发生了什么。

更令人困惑的是 Process 类: https : //docs.microsoft.com/en-us/dotnet/api/system.diagnostics.process?view=netframework-4.8

这里我们有 3 个程序集: System.Diagnostics.Process.dll、System.dllnetstandard.dll

我只能加载 System.Dll。 其他 2 只是说无法找到程序集。

所以问题是,如果我想使用 .NET Framework Class I 假设我应该拥有所有组件,那么如何将它们全部加载到 PowerShell 中?

希望这很清楚,并感谢您的回答。

亲切的问候,

约翰

System.ServiceProcess.dll位于 GAC 中,并且是 .NET Framework 的一部分。 System.ServiceProcess.ServiceController.dll是核心 CLR 的一部分。

但是等一下 - PowerShell 基于 .NET Framework CLR。

如果您根据正确的netstandard 配置文件构建程序集,并且其依赖项是可解析的,则它应该能够在 .NET Framework 上运行。

您可以看到System.ServiceProcess.dll引用了kernel32 ,而System.ServiceProcess.ServiceController.dll引用了api-ms-win-service-core

它有点相同,但 Core CLR 版本的功能可能会更少

至于其他的,大部分System命名空间驻留在mscorlibSystem.dll 近年来,一直在努力通过将核心库的一部分移出以进行带外交付来使核心库更精简

例如, System.Diagnostics.Process.dll现在作为nuget 包提供,这样可以更快地向用户推出,而不是提供目标需要安装的主要 .NET Framework 更新。

如果您使用的是常规 Powershell 而不是Powershell Core ,您可以只引用 .NET Framework 程序集而不会看到混淆

MSDN 无法在 .NET Framework、.NET Core 或 .NET Standard 中正确指示哪种类型属于哪个程序集。

您可以改用.NET API 目录

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM