【问题标题】:How to guarantee postsharp code has been injected?如何保证 postsharp 代码已被注入?
【发布时间】:2012-11-23 18:36:59
【问题描述】:

这是一个关于 PostSharp 使用的假设问题。

我认为如果构建的 PostSharp 部分因任何原因而丢失,这些属性将被忽略并且构建的程序集仍然可以运行。如果我使用方面实现安全性,这将是一个大问题。

如何在运行时确认构建的 PostSharp 阶段发生并且我的方面在程序集中?

【问题讨论】:

    标签: c# aop postsharp


    【解决方案1】:

    您可以在运行时评估PostSharp.Post.IsTransformed。如果程序集已被转换,则对该属性的调用 将更改为仅常量true。由于属性本身总是返回false,因此可以知道调用PostSharp.Post.IsTransformed的程序集是否已经被转换。

    【讨论】:

    • 我想到的另一件事是添加一个引发异常的方法,并用一个完全替换此方法的环绕方面对其进行注释。一个优点是您不必为此程序集添加对 PostSharp 的引用,并将您的方面保留在其他任何地方。 [NoopAspect] pubic void EnsureWeaving() { throw new Exception("Weaving was skipped"); } NoopAspectAttribute 实现将不会调用 args.Proceed() 并且在启用 PostSharp 时不会引发异常。
    【解决方案2】:

    一方面,您会在构建期间或之后在输出窗口中看到它(例如: message : PostSharp complete -- 0 errors, 0 warnings, served in 1073 ms),另一方面,您可以使用 .net 反射器或类似工具检查您的程序集(JetBrains dotPeek 是免费的)因此postsharp 在构建过程中在 IL 代码中编织你的切面。

    可能还有更多选项,例如检查 .pdb 文件。这足以满足您的需求吗?

    【讨论】:

    • 我想没有一个选项是万无一失的,但我想通过实施某种运行时检查来消除人为因素。
    猜你喜欢
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 2017-10-08
    • 2023-04-02
    • 2021-12-21
    • 1970-01-01
    • 2017-12-08
    相关资源
    最近更新 更多