我希望能找到已编译的.NET程序集中特定类的相关源文件。例如:
我使用标准的
我已经尝试了以下方法:
1.使用findstr.exe-速度太慢。 2.创建一个.net应用程序,将所有文件加载到内存中-太慢以至于找不到*.cs /加载所有文件,一旦它们在内存中就可以快速扫描文件。 3.从所有较小的文件中创建一个大型源文件,加载它,扫描等-同样太慢。构建文件需要几分钟,一旦加载就很快。 4.读取PDB文件-我正在调查PDB2XML.exe,虽然它确实输出文件名,并且运行速度很快,但我看不到如何将类与文件名关联起来。
那么,有没有其他建议、魔术或关于PDB2XML的经验呢?
MyAsm.Namespace.Foo -> C:\Source\foo.cs
MyAsm.Namespace.Bar -> C:\Source\Code\MoreCode\Common.cs
MyAsm.Namespace2.Bar -> C:\Source\Code\MoreCode\Common.cs
...
我使用标准的
System.Reflection
功能进行程序集反射/提取感兴趣的类型信息。现在,我需要找到类的源.cs文件。虽然我已经有了一个暴力解决方案作为临时解决办法,但它速度太慢,无法接受。我希望整个过程能在约5秒钟内完成。目前,反射提取部分不到1秒钟,"文件关联"需要几分钟。我认为在4秒钟内扫描几MB并不是不合理的要求。不幸的是,有几个注意事项阻碍了快捷方式。1.我不知道文件的名称,因此每次运行都需要执行dir / s *.cs来枚举所有潜在的源文件。2.类名不总是匹配源文件,它可以提示可能的位置,但不保证有效。3.某些情况下,在同一文件中定义多个类。4.大约有20k .cs文件/63MB的源文件。5.我需要将~10k的类与它们的文件关联起来。6.我不想逐步构建具有其中声明的类名/文件名的数据库,因为文件内容会更改,并且我将需要维护这个数据库等问题(尽管如果其他方法失败,我可能必须采用这种方法)。7.操作系统上将运行的程序将不会启用Windows搜索/索引,因此也无法使用该方法。我已经尝试了以下方法:
1.使用findstr.exe-速度太慢。 2.创建一个.net应用程序,将所有文件加载到内存中-太慢以至于找不到*.cs /加载所有文件,一旦它们在内存中就可以快速扫描文件。 3.从所有较小的文件中创建一个大型源文件,加载它,扫描等-同样太慢。构建文件需要几分钟,一旦加载就很快。 4.读取PDB文件-我正在调查PDB2XML.exe,虽然它确实输出文件名,并且运行速度很快,但我看不到如何将类与文件名关联起来。
那么,有没有其他建议、魔术或关于PDB2XML的经验呢?
class\s+<ClassName>
的文件。 - Mohamed Nuur