嗨,我不知道这是否可能,但我有 ac# Project 可以说A
,我正在尝试一个ccess Assembly Info of another project B
,以便我可以Method Info
使用. 问题是我想不出一种方法来整合这两者。项目 A 提供一个并选择文件。读取它并提取项目 B 中正在使用的文件。project B
Reflection
openFileDialogue
.csproj
你能建议我锻炼一下吗?
嗨,我不知道这是否可能,但我有 ac# Project 可以说A
,我正在尝试一个ccess Assembly Info of another project B
,以便我可以Method Info
使用. 问题是我想不出一种方法来整合这两者。项目 A 提供一个并选择文件。读取它并提取项目 B 中正在使用的文件。project B
Reflection
openFileDialogue
.csproj
你能建议我锻炼一下吗?
我不认为你可以通过使用反射来做到这一点。要使用反射,您需要一个程序集,而不是 csproj(或 cs 文件)。您应该寻找一个解析器,也许使用 Roslyn API,它将以语法树格式为您提供有关源代码的信息。 http://blogs.msdn.com/b/visualstudio/archive/2011/10/19/introducing-the-microsoft-roslyn-ctp.aspx
每个 .csproj 文件都是 XML,因此您可以很容易地阅读它。该文件中列出了项目中包含的每个文件,因此您可以解析 XML .csproj 文件以查找所有 .cs 文件。
从那里,如果您需要提取 MethodInfo,您将不得不解析 .cs 文件,或者使用Roslyn之类的东西将代码解析到其语法树中,然后以这种方式找到方法。
您可以只使用“项目 B”中构建的程序集(.exe 或 .dll)而不是其 .csproj 文件吗?加载程序集的反射信息会容易得多,只需遍历每个类和每个方法......
用于Assembly.LoadFile
直接加载已编译的程序集——即 DLL 或 EXE;这将为您提供一个Assembly
对象,您可以在其上调用GetTypes()
等以访问您想要的所有信息。