[英]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.dll和System.ServiceProcess.dll
无论我添加哪一个,它似乎都有效,但我想知道引擎盖下发生了什么。
更令人困惑的是 Process 类: https : //docs.microsoft.com/en-us/dotnet/api/system.diagnostics.process?view=netframework-4.8
这里我们有 3 个程序集: System.Diagnostics.Process.dll、System.dll和netstandard.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
命名空间驻留在mscorlib
和System.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.