Csharp/C#教程:在c#中查找已编译类的源文件分享


在c#中查找已编译类的源文件

我希望在一组编译的.net程序集中找到特定类的相关源文件。

例如

MyAsm.Namespace.Foo -> C:Sourcefoo.cs MyAsm.Namespace.Bar -> C:SourceCodeMoreCodeCommon.cs MyAsm.Namespace2.Bar -> C:SourceCodeMoreCodeCommon.cs ... 

我有使用标准System.Reflectionfunction的程序集reflection/提取我感兴趣的类型信息。

我现在需要找到该类的原始.cs源文件。 虽然我有一个powershell解决方案作为一种解决方法,但它的速度令人无法接受。

我希望在5秒内完成整个过程。 目前,reflection提取部分花费不到1秒,“文件关联”需要几分钟。 我不认为在4秒内扫描几个MB是不合理的。

不幸的是,有一些警告,可以防止捷径。

我尝试过的:

那么,有没有人有PDB2XML的替代建议,魔术或一些经验?

如果文件在磁盘上,使用PDB是最好的选择IMHO。 文件名(由ISymbolDocument.URL表示)与序列点相关。 序列点与方法(包括属性get / set)有关,而不是类。 当然,.NET类源可以存储在多个文件中。 因此,您必须浏览所有类型的成员(例如使用reflection)来确定所有相应的文件。

这并不能完全解决您所面临的问题,因为您希望获得任意类的文件路径,但这对于我的使用来说很容易,只是从源位置获取指向某个文件的指针。 我在unit testing中使用它,因此性能不是非常重要。

 var x = new StackTrace(true); var file = x.GetFrame(0).GetFileName(); 

我不知道.NET中的文件名和程序集名称之间有任何关系,实际上可能在一个文件中定义了多个程序集,所以我没有看到如何在不实际查看每个源代码的情况下执行此操作文件并搜索类定义或维护运行索引。

上述就是C#学习教程:在c#中查找已编译类的源文件分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/955537.html

(0)
上一篇 2021年11月21日
下一篇 2021年11月21日

精彩推荐