【发布时间】:2012-11-23 18:36:59
【问题描述】:
这是一个关于 PostSharp 使用的假设问题。
我认为如果构建的 PostSharp 部分因任何原因而丢失,这些属性将被忽略并且构建的程序集仍然可以运行。如果我使用方面实现安全性,这将是一个大问题。
如何在运行时确认构建的 PostSharp 阶段发生并且我的方面在程序集中?
【问题讨论】:
这是一个关于 PostSharp 使用的假设问题。
我认为如果构建的 PostSharp 部分因任何原因而丢失,这些属性将被忽略并且构建的程序集仍然可以运行。如果我使用方面实现安全性,这将是一个大问题。
如何在运行时确认构建的 PostSharp 阶段发生并且我的方面在程序集中?
【问题讨论】:
您可以在运行时评估PostSharp.Post.IsTransformed。如果程序集已被转换,则对该属性的调用 将更改为仅常量true。由于属性本身总是返回false,因此可以知道调用PostSharp.Post.IsTransformed的程序集是否已经被转换。
【讨论】:
[NoopAspect] pubic void EnsureWeaving() { throw new Exception("Weaving was skipped"); } NoopAspectAttribute 实现将不会调用 args.Proceed() 并且在启用 PostSharp 时不会引发异常。
一方面,您会在构建期间或之后在输出窗口中看到它(例如: message : PostSharp complete -- 0 errors, 0 warnings, served in 1073 ms),另一方面,您可以使用 .net 反射器或类似工具检查您的程序集(JetBrains dotPeek 是免费的)因此postsharp 在构建过程中在 IL 代码中编织你的切面。
可能还有更多选项,例如检查 .pdb 文件。这足以满足您的需求吗?
【讨论】: