1

GlobalSuppressions.cs ファイルから冗長なエントリを削除する powershell スクリプトを作成しています。使用したい手法の 1 つは、エントリが参照するクラスとメソッドが存在するかどうかを確認することです。抑制エントリは次のようになります

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

そこから、クラスの完全修飾名とメソッド シグネチャを抽出できます。PowerShell から dll をロードできます。しかし、「このクラスは存在しますか?」と尋ねる方法がわかりません。そして、「もしそうなら、それはこの正確な署名を持つメソッドを含んでいますか?」これはどうにかしてリフレクションによって達成できると思いますが、今のところ方法がわかりません。追加の制限が 1 つあります。可能であれば、クラスをインスタンス化せずにチェックを実行する必要があります。このスクリプトはユニバーサルである必要があり、多くのプロジェクトで実行されます。どのクラスがチェックされるのか、デフォルトのコンストラクターがどのコードを実行するのか、またはパラメーターのないデフォルトのコンストラクターがあるかどうかさえわかりません。ああ、C# で解決策を知っている場合は、それを共有してください。PowerShell に変換できる可能性が高くなります。

4

1 に答える 1

2

I'm not sure I fully understand your question but if you already have the assembly, GetTypes will list all types (public and private) contained in the assembly.

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

You can then call GetMembers or GetMethods to list the members/methods for a given type.

See http://msdn.microsoft.com/en-us/library/System.Type_methods.aspx for the detailed API.

于 2013-08-23T16:20:08.740 に答える