我不得不放弃使用 PostSharp,因为它不适用于混淆/合并的程序集。至少,我看不到任何让它工作的方法(它在应用程序启动时崩溃,当程序集被混淆时)
我需要在我的应用程序中拦截一些方法(调用特殊代码而不是原始方法 - OnMethodInvocationAspect)有
什么建议吗?
4 回答
PostSharp 在某种程度上支持 ILMerge。请参阅http://www.postsharp.org/blog/postsharp-and-ilmerge。但是混淆程序集存在问题。
由于方面是在构建时序列化的,因此如果方面类型已被混淆,则它们无法反序列化。解决方案是不要混淆任何可序列化的类型。另一种解决方案是不序列化方面(参见 PostSharp 2.0 中的 AspectConfigurationAttribute.SerializerType,并使用序列化程序 MsilAspectSerializer)。
将方面应用于泛型方法和泛型类型的方法时会出现问题(原因是 PostSharp 使用基于方法名称的反射来解决 CLR 中的错误)。
面向方面的编程只是程序转换的一个特例。如果您可以使用工具应用程序转换,则可以轻松进行 AOP。
我们的 DMS Software Reengineering Toolkit 是一个程序转换引擎,可处理多种真实语言,包括 C、C++、Java、COBOL 甚至 C#4.0。
有关详细信息,请参阅使用 DMS 的面向方面编程。
Spring.NET 具有在运行时编织的 AOP 功能,因此应该与混淆程序集一起使用。
http://www.springframework.net/
文档:
http://www.springframework.net/doc-latest/reference/html/aop.html