2012-05-09 1 views
2

アセンブリ内の特定の属性を持つメソッドをスキャンすることはできますか?私は現在Visual C++プロジェクトに取り組んでいますが、C#もうまくいきます。私は、今のところassualbly内のすべてのメソッドを見つける必要があります。 [XYZ]が適用されます。何かご意見は?アセンブリ内の特定の属性を持つメソッドをスキャンすることはできますか?

+0

属性を検索している.NETアセンブリをスキャンするC++/CLIコードを探していますか? – user7116

+0

@sixlettervariables:はい。 – Jaggu

答えて

3

私はMicrosoft Roslynを同様の作業に使用しました。それはかなり簡単にする必要があります。

サンプルコードが必要な場合はお知らせください。

、あまりにもこの記事を見てみましょう:

http://blog.filipekberg.se/2011/10/20/using-roslyn-to-parse-c-code-files/

リフレクションは、そのためにも使用することができ、GetCustomAttributesメソッドは、指定されたメンバーで定義されたすべての属性を返す...

さて、これを試してみてください

this.GetType().GetMethods() 

ループトラフそれでなければなりませんすべてのメソッドとGetCustomAttributes

。残念ながら私は妻のラップトップにVisual Studioをインストールしていません:)

+0

こんにちは、アニマですよ。ちょうどいくつかのサンプルコードは本当に感謝しています。私はRoslynを使用していません。私は反射を使用したい。 – Jaggu

4

これを試してください。これは、特定の属性のための方法を取得するには

 MemberInfo[] members = obj.GetType().GetMethods(); 
     foreach (MemberInfo m in members) 
     { 
      if (m.MemberType == MemberTypes.Method) 
      { 
       MethodInfo p = m as MethodInfo; 
       object[] attribs = p.GetCustomAttributes(false); 
       foreach (object attr in attribs) 
       { 
        XYZ v = attr as XYZ; 
        if (v != null) 
         DoSomething(); 
       } 
      } 
     } 
2

使用リフレクションを任意のオブジェクトを検索し、属性をつかむだろうアセンブリへのパスを考えると

3

:これがロードされます覚えておいてください

static void FindAttributes(String^ assemblyPath) 
{ 
    Assembly^ assembly = Assembly::ReflectionOnlyLoadFrom(assemblyPath); 

    for each (Type^ typ in assembly->GetTypes()) 
    { 
     for each (CustomAttributeData^ attr 
      in CustomAttributeData::GetCustomAttributes(typ)) 
     { 
      Console::WriteLine("{0}: {1}", typ, attr); 
     } 
    } 
} 

アプリケーションドメインに使用するすべてのアセンブリが含まれているため、毎回独自のAppDomainでこのコードを呼び出す価値があります。

関連する問題