【发布时间】:2010-12-22 01:18:20
【问题描述】:
我不得不放弃使用 PostSharp,因为它不适用于混淆/合并的程序集。至少,我看不到任何让它工作的方法(它在应用程序启动时崩溃,当程序集被混淆时)
我需要在我的应用程序中拦截一些方法(调用特殊代码而不是原始方法 - OnMethodInvocationAspect)
有什么建议吗?
【问题讨论】:
我不得不放弃使用 PostSharp,因为它不适用于混淆/合并的程序集。至少,我看不到任何让它工作的方法(它在应用程序启动时崩溃,当程序集被混淆时)
我需要在我的应用程序中拦截一些方法(调用特殊代码而不是原始方法 - OnMethodInvocationAspect)
有什么建议吗?
【问题讨论】:
Spring.NET 具有在运行时编织的 AOP 功能,因此应该与混淆的程序集一起使用。
http://www.springframework.net/
文档:
http://www.springframework.net/doc-latest/reference/html/aop.html
【讨论】:
PostSharp 在某种程度上支持 ILMerge。见http://www.postsharp.org/blog/postsharp-and-ilmerge。但是混淆程序集存在问题。
由于方面是在构建时序列化的,因此如果方面类型已被混淆,则它们无法反序列化。解决方案是不要混淆任何可序列化的类型。另一种解决方案是不序列化切面(参见 PostSharp 2.0 中的 AspectConfigurationAttribute.SerializerType,并使用序列化器 MsilAspectSerializer)。
将切面应用于泛型方法和泛型类型的方法时会出现问题(原因是 PostSharp 使用基于方法名称的反射来解决 CLR 中的错误)。
【讨论】:
面向方面的编程只是程序转换的一个特例。 如果您可以使用工具应用程序转换,则可以轻松进行 AOP。
我们的 DMS 软件再造工具包是一个程序转换引擎 处理许多真实语言,包括 C、C++、Java、COBOL 甚至 C#4.0。
【讨论】:
NCop 是受 Post Sharp 启发的 .NET 平台的复合方面框架
Sheep Aspect 是受 AspectJ 启发的 .NET 平台的替代开源 AOP 工具
【讨论】: