Stack Overflow上的几个答案说,不可能使用常规反射从.NET程序集中获取源代码,我只能访问IL代码。
在我的项目中,第三方会将一些基本的C#代码写入由我创建的项目模板中并构建一个.NET dll。我需要从这些dll中提取一些信息。要收集一些必须调用dll的信息 - 我将使用反射。不幸的是,我还需要获得一个特定方法的源代码。
我可以解析cs文件 - 这不是一个大问题,但我很想知道。由于我必须已经使用反射并且项目模板完全在我的控制之下,我是否可以做一些故意暴露部分源代码(可能以某种方式在编译时将其构建到资源或同样古怪的东西)?
由于
答案 0 :(得分:0)
既然你提到了一些古怪的东西,你可以在技术上公开一个只是方法文本的属性。这样您就可以使用反射来获取属性值。它可能是一个只返回常量的就绪属性。如果方法要改变,那么维持这是一种痛苦,因为你必须在两个地方改变它。
处理这个问题的另一个同样古怪的方法是,只需使用上面创建的字符串属性作为方法文本即可。然后在您将拥有该方法的实际类中,您可以动态获取文本,动态构建它并执行它。这解决了在两个地方改变它的问题。然而,这可能是一场表演的噩梦,但似乎有可能。
这里有一些关于如何编译和执行动态代码的示例文章: http://www.codeproject.com/Articles/5472/Compiling-NET-code-on-the-fly
http://www.west-wind.com/presentations/dynamiccode/dynamiccode.htm