针对WinForm项目's方法的方面不起作用

本文关键字:方法 方面 不起作用 WinForm 项目 针对 | 更新日期: 2023-09-27 18:05:44

我有一个3个项目的解决方案。我做了一个测试:

1) WinFormsProject(设置为主项目):它只是一个表单,点击按钮时抛出异常。在抛出异常之前,它与类Person的对象(在另一个程序集中)进行一些赋值。

ConsoleProject:这是另一个具有相同思想的程序集:它只对类Person的对象进行少量处理,然后抛出异常。

3) AspectTest:这是一个程序集,它定义了类Person和一个方面(称为LogBoundary)(继承自OnMethodBoundaryAspect),记录OnEntry(), OnExit(), OnSuccess()和OnException()。

这三个程序集是通过"AspectInfo.cs"类配置的,以针对除了"CompileGenerated"之外的每个方法。所以:

[assembly: LogBoundary()]
[assembly: LogBoundary(
    AttributeExclude = true,
    AttributePriority = 0,
    AttributeTargetMemberAttributes = MulticastAttributes.CompilerGenerated)]

问题是,在汇编中的所有方法AspectTest正在被记录,但那些在WinFormsProject不是。我不知道为什么。

一些需要考虑的事情:

  • 每个程序集都有对postsharp的引用。所以每个方面都是被编译器正确识别。
  • 如果我设置ConsoleProject作为主项目,它工作正确。问题只出现在WinFormsProject
  • WinFormsProject参考AspectTests(当然!)。
  • ConsoleProject references AspectTests(当然!)。
  • WinFormsProject ConsoleProject

任何帮助都将是伟大的,如果你仍然需要一些关于这方面的信息,请问我(我可能忘记告诉一些事情)。

谢谢!

针对WinForm项目's方法的方面不起作用

为了在代码中引入方面,PostSharp需要在主编译步骤之后的构建期间执行。这意味着在项目中添加对PostSharp.dll的引用是不够的——项目的构建顺序也需要修改。

当您安装NuGet包时,PostSharp会自动集成到构建过程中。如果PostSharp在构建期间没有运行,那么您可以尝试重新安装软件包。

我对这个原因感到有点惭愧,但它可能传递给任何人,所以这里是问题和我是如何解决的。

问题是:当我手动添加postsharp.dll作为参考时,而不是使用NuGet(因为当时我没有互联网),这些参考文献都是可以的,全部按预期编译,但如前所述,方面没有在Winforms项目上工作。也许我错过了别的事情。

因此,解决方案非常简单,只需通过Nuget添加postsharp即可。。

现在一切正常。如果有人对这个问题的描述有更好的想法,那就太好了。谢谢,AlexD。