【问题标题】:postsharp in assembly装配后锐化
【发布时间】:2011-08-02 22:56:41
【问题描述】:

我有一个 postsharp 属性,用于处理整个 dll 中的异常(该 ddl 由其他团队提供)并管理数据库调用。 所以这个想法是用 postsharp 处理异常

所以,这是属性

[Serializable]
    public class MethodConnectionTracking: OnExceptionAspect
    {
        bool canceled = false;
        public override void OnException(MethodExecutionArgs args)
        {
            Exception ex = args.Exception;
            if (ex != null)
            {
               --- do things
            }

        }


    }

要使其正常工作并拦截该名为 SPData 的项目的 assemblyInfo.cs 中的所有方法:

[assembly: MethodConnectionTracking(AttributeTargetElements = MulticastTargets.Method)]

而且效果很好。但我想在其他项目中指定该行。

所以,主项目引用了 SPData。所以,在主项目 AssemblyInfo.cs 文件中我写:

[assembly: MethodConnectionTracking(AttributeTargetAssemblies = "SPData", AttributeTargetElements = MulticastTargets.Method)]

但它不起作用。

有没有可能做我想做的事,我错过了一些参数吗?

提前致谢。

【问题讨论】:

    标签: c# postsharp


    【解决方案1】:
    1. 您不需要 AttributeTargetElements = MulticastTargets.Method,因为它在使用 OnExceptionAspect 基类时已经提供

    2. 您不需要检查是否 ex != null,因为它永远不会为 null,因为除非出现异常,否则不会调用 OnException。见http://programmersunlimited.wordpress.com/2011/08/01/postsharp-why-are-my-arguments-null/

    您确定您的程序集名称正确吗?你在使用命名空间吗?您需要使用实际的程序集名称(不带 .dll)。试试通配符“SPData*”,看看是否有帮助。

    您是否已单步执行代码或使用 ILSpy 查看已编译的程序集?除非您提供了错误的名称,否则它应该可以工作。是对项目的引用还是已编译的程序集?程序集是否已签名或混淆?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-21
      • 2017-08-29
      • 1970-01-01
      • 1970-01-01
      • 2015-12-03
      • 1970-01-01
      • 1970-01-01
      • 2018-06-07
      相关资源
      最近更新 更多