在 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方法下载文件