我不得不放弃使用PostSharp,因为它不适用于混淆/合并的程序集。至少,我没有看到任何方法让它工作(它在应用程序启动时崩溃,当程序集被混淆时)
我需要拦截我的应用程序中的一些方法(调用特殊代码而不是原始方法 - OnMethodInvocationAspect)
有什么建议吗?
答案 0 :(得分:4)
PostSharp在某种程度上支持ILMerge。见http://www.postsharp.org/blog/postsharp-and-ilmerge。但是 模糊了程序集的问题。
由于方面是在构建时序列化的,因此如果方面类型已被混淆,则无法对它们进行反序列化。解决方案不是混淆任何可序列化类型。另一种解决方案不是序列化方面(请参阅PostSharp 2.0中的AspectConfigurationAttribute.SerializerType,并使用序列化器MsilAspectSerializer)。
当方面应用于泛型类型的泛型方法和方法时会出现问题(原因是PostSharp在这种情况下使用基于方法名称的反射来解决CLR中的错误。)
-gael
答案 1 :(得分:3)
NCop是一个基于Post Sharp的绿色.NET平台的复合方面框架 Sheep Aspect是受AspectJ启发的.NET平台的另一种开源AOP工具
答案 2 :(得分:1)
Spring.NET具有在运行时编译的AOP功能,因此应该使用模糊的程序集。
http://www.springframework.net/
文档:
http://www.springframework.net/doc-latest/reference/html/aop.html
答案 3 :(得分:1)
面向方面的编程只是程序转换的一个特例。 如果您可以使用工具应用程序转换,则可以轻松执行AOP。
我们的DMS软件再造工具包是一个程序转换引擎 它处理许多真正的语言,包括C,C ++,Java,COBOL甚至C#4.0。
有关详细信息,请参阅Aspect Oriented Programming using DMS。