在程序集中检测DllImportAttribute及其数据

时间:2011-09-29 04:23:26

标签: c# reflection clr

我试图找到(在运行时)p / invokes及其信息:1)Dll名称2)EntryPoint。

我尝试过这样的事情:Assembly.GetExecutingAssembly().GetCustomAttributesData();但由于某些原因我虽然在那个程序集中有一个p / invoke但我看不到那里列出的类型DllImportAttribute

我很确定在这里遗漏了一些东西。有任何想法吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

var pinvokes = from type in Assembly.GetExecutingAssembly().GetTypes()
               from method in type.GetMethods(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)
               let dllImport = (DllImportAttribute)method.GetCustomAttributes(typeof(DllImportAttribute), false).FirstOrDefault()
               where dllImport != null
               select new
               {
                   DllName = dllImport.Value,
                   EntryPoint = dllImport.EntryPoint,
               };