在 powershell 中列出 .NET 命名空间的类?

Posted

技术标签:

【中文标题】在 powershell 中列出 .NET 命名空间的类?【英文标题】:List the classes of a .NET namespace in powershell? 【发布时间】:2020-06-17 06:29:34 【问题描述】:

我正在尝试列出 .NET 命名空间的类。

例如,命名空间[System.IO]。我正在尝试列出它的类,如[System.IO.Path]、文件、目录、StreamReader 等。

在这里,当我在控制台上直接键入 [System.IO] 时,我收到一个找不到类型的错误。 Get-Member 没有帮助,因为它列出了类的方法和属性。

有人知道怎么做吗?

【问题讨论】:

请记住,不同程序集中的类可以位于同一个命名空间中。您将不得不遍历一堆不同的程序集(您将不得不决定哪个),在 System.IO 命名空间中寻找类型 这和c#有什么关系? C# 与.NET 非常相关,我也会接受 C# 解决方案。 您可以查看此链接:blog.differentpla.net/blog/2013/04/17/… @MikeCheel 很棒! 【参考方案1】:

根据您的评论“C# 与 .NET 非常相关,我也将接受 C# 解决方案”,我有一个快速而肮脏的 C# 解决方案来列出 System.IO 命名空间中的所有类型。

下面的代码可以很容易地适应任何命名空间,但请注意它只适用于当前应用程序域中的加载的程序集

List<Type> types;
types = new List<Type>();

foreach (var ass in AppDomain.CurrentDomain.GetAssemblies())
    types.AddRange(ass.GetTypes().Where(x => x.Namespace == "System.IO"));

// Do something with the list of types

从未加载的程序集中列出类型要复杂得多。您可以枚举 GAC 中或指定文件夹中的所有程序集,但鉴于任何程序集(即我现在可以制作的程序集)都可以添加到 System.IO,因此几乎不可能找到每种类型。

【讨论】:

【参考方案2】:

在PowerShell中:

[AppDomain]::CurrentDomain.GetAssemblies().GetTypes()  | Where-Object $_.NameSpace -eq 'System.IO'

【讨论】:

以上是关于在 powershell 中列出 .NET 命名空间的类?的主要内容,如果未能解决你的问题,请参考以下文章

powershell PowerShell:列出已安装的.NET版本

powershell 使用System.Net命名空间中的WebClient类的DownloadFileAsync方法下载文件

powershell 使用System.Net命名空间中的WebClient类的DownloadFile方法下载文件

如何用PowerShell列出你机器上的.NET Framework的版本号和SP服务补丁

从 .NET Core 运行 PowerShell

Python 可以从 Windows Powershell 命名管道中读取吗?