如何从powershell中查明.NET dll中是否存在类和方法?

时间:2013-08-23 15:31:13

标签: .net powershell reflection

我正在编写一个powershell脚本,它将从我的GlobalSuppressions.cs文件中删除多余的条目。我想要使​​用的技术之一是检查条目引用的类和方法是否存在。抑制条目看起来像这样

[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("...", "...", Scope = "member", Target = "MyNamespace.Myclass#MyMethod(Namespace.ParameterType1,... Namespace.ParameterTypeN)...

我可以从中提取类的完全限定名称和方法签名。 我可以从powershell加载dll。但我无法弄清楚如何问“这门课程是否存在?”并且“如果确实如此,它是否包含具有此确切签名的方法?”我想这可以通过反思以某种方式实现,但到目前为止我不知道如何。 我还有一个额外的限制,如果可能的话,我需要在不实例化类的情况下执行检查。这个脚本需要是通用的,它将在许多项目上运行。不知道将检查哪些类,它们的默认构造函数将执行什么代码,或者它们是否具有没有参数的默认构造函数。 哦,如果你知道C#的解决方案,请分享一下,我很有可能将它翻译成powershell。

1 个答案:

答案 0 :(得分:2)

我不确定我是否完全理解您的问题,但如果您已经拥有程序集,GetTypes将列出程序集中包含的所有类型(公共和私有)。

$assembly = [System.Reflection.Assembly]::LoadWithPartialName("System.Xml")
$assembly.GetTypes() | where-object { $_.name -eq "XmlNode" }

然后,您可以调用GetMembers或GetMethods列出给定类型的成员/方法。

有关详细的API,请参阅http://msdn.microsoft.com/en-us/library/System.Type_methods.aspx