c# - 对在 PowerShell 中添加程序集以使用 .NET 类感到困惑
问题描述
我将不胜感激。在 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 类,我假设我应该拥有所有的 aasemblies,那么如何将它们全部加载到 PowerShell 中?
希望这很清楚,并感谢您的回答。
亲切的问候,
约翰
解决方案
System.ServiceProcess.dll
位于 GAC 中,并且是 .NET Framework 的一部分。
System.ServiceProcess.ServiceController.dll
是核心 CLR 的一部分。
但请稍等 - PowerShell 基于 .NET Framework CLR。
如果您根据正确的netstandard profile构建程序集,并且它的依赖项是可解析的,那么它应该能够在 .NET Framework 上运行。
可以看到System.ServiceProcess.dll
引用kernel32
,while
System.ServiceProcess.ServiceController.dll
引用api-ms-win-service-core
。
有点类似,但 Core CLR 版本的功能可能会更少。
至于其他的,大部分System
命名空间位于mscorlib
and中System.dll
。近年来,人们一直在努力通过将部分核心库移出以进行带外交付来使核心库更精简。
例如,System.Diagnostics.Process.dll
现在作为nuget 包发布,它可以更快地向用户推出,而不是发布需要安装目标的主要 .NET Framework 更新。
如果您使用的是常规 Powershell 而不是Powershell Core,则可以仅引用 .NET Framework 程序集而不会感到困惑
推荐阅读
- javascript - 在旧浏览器版本中显示 sankey
- android - 使用 ImageSliders Image 通过 Intent 上传电子邮件中的图像
- java - 我正在使用 springframework 中的@PathVariable。当我尝试从控制器返回视图页面名称时,出现 404 错误
- hibernate - 使用休眠 5.1.2 版本降低性能
- javascript - 如何在界面中使用对象键?
- java - 我如何实现声纳+故障安全+jacoco?
- validation - 根据另一个参考架构验证 GraphQL 架构
- openlayers - OpenLayers 5 RegularShape 特征从指定坐标偏移
- ios - 可选的
到 Int64 为零,硬编码它可以工作 - python - 将小数据框附加到大数据框并对其进行排序