1

Stack Overflow 上的几个答案说,无法使用常规反射从 .NET 程序集中获取源代码,我只能访问 IL 代码。

在我的项目中,第三方会将一些基本的 C# 代码写入我创建的项目模板并构建一个 .NET dll。我需要从这些 dll 中提取一些信息。为了收集一些信息,必须调用 dll - 我将对此使用反射。不幸的是,我还需要获取一种特定方法的源代码。

我可以解析cs文件——这不是什么大问题,但我想知道。由于我必须已经使用反射并且项目模板完全在我的控制之下,我可以做一些事情来故意公开部分源代码(也许以某种方式在编译时将其构建到资源或同样古怪的东西)?

谢谢

4

1 回答 1

0

既然你提到了一些古怪的东西,你可以从技术上公开一个只是方法文本的属性。这样您就可以使用反射来获取属性值。它可能是一个返回常量的现成属性。如果方法要改变,维护起来会很痛苦,因为你必须在两个地方改变它。

另一种同样古怪的处理方法,它与上面有关,就是使用您在上面创建的字符串属性作为方法文本。然后在您拥有该方法的实际类中,您可以动态获取文本,动态构建并执行它。这解决了在两个地方更改它的问题。然而,这可能是一场性能噩梦,但似乎有可能。

这里有几篇关于如何编译和执行动态代码的示例文章:http: //www.codeproject.com/Articles/5472/Compiling-NET-code-on-the-fly

http://www.west-wind.com/presentations/dynamiccode/dynamiccode.htm

于 2012-11-29T21:54:42.243 回答