C# 针对WinForm项目的方面';s的方法不起作用
我有3个项目的解决方案。我做了一个测试: 1) WinFormsProject(设置为主项目):它只是一个表单,在单击按钮时引发异常。在抛出异常之前,它对类Person(在另一个程序集中)的对象进行一些赋值 2) 控制台项目:它是另一个具有相同想法的程序集:它只对类Person的一个对象执行一点操作,然后抛出一个异常 3) AspectTest:它是一个程序集,定义了类Person和一个aspect(称为LogBoundary)(继承自OnMethodBoundaryAspect),后者记录OnEntry()、OnExit()、OnSuccess()和oneException() 这三个程序集通过一个“AspectInfo.cs”类进行配置,以针对除“CompileGenerated”方法之外的所有方法。因此:C# 针对WinForm项目的方面';s的方法不起作用,c#,.net,winforms,.net-assembly,postsharp,C#,.net,Winforms,.net Assembly,Postsharp,我有3个项目的解决方案。我做了一个测试: 1) WinFormsProject(设置为主项目):它只是一个表单,在单击按钮时引发异常。在抛出异常之前,它对类Person(在另一个程序集中)的对象进行一些赋值 2) 控制台项目:它是另一个具有相同想法的程序集:它只对类Person的一个对象执行一点操作,然后抛出一个异常 3) AspectTest:它是一个程序集,定义了类Person和一个aspect(称为LogBoundary)(继承自OnMethodBoundaryAspect),后者记录On
[assembly: LogBoundary()]
[assembly: LogBoundary(
AttributeExclude = true,
AttributePriority = 0,
AttributeTargetMemberAttributes = MulticastAttributes.CompilerGenerated)]
问题是程序集AspectTest中的所有方法都被记录,但WinFormsProject中的方法没有记录。我不知道为什么
需要考虑的一些事项:
- 每个部件都有一个对postsharp的引用。所以每个方面都是 被编译器正确识别
- 如果我将控制台项目设置为主项目,它会工作 正确地问题只出现在WinFormsProject中
- WinFormsProject参考AspectTests(当然!)
- ConsoleProject参考AspectTests(当然!)
- WinFormsProject和 控制台项目
谢谢 好吧,我有点为这个原因感到惭愧,但它可能会传给任何人,所以这里是问题以及我是如何解决的 问题是:当我手动添加postsharp.dll作为引用,而不是使用NuGet时(因为当时我没有互联网),这些引用都正常,都按照预期编译,但是如上所述,Aspect在Winforms项目中不起作用。也许我错过了做其他事情 因此,解决方案非常简单,可以通过Nuget添加postsharp。就这样 现在一切都好了。如果有人对问题的描述有更好的了解,最好知道它。
谢谢,AlexD。要将方面引入到代码中,PostSharp需要在主编译步骤之后的构建期间执行。这意味着在项目中添加对PostSharp.dll的引用是不够的,还需要修改项目的构建顺序
安装NuGet软件包时,PostSharp会自动集成到构建过程中。如果生成期间未运行PostSharp,则可以尝试重新安装该软件包。请验证重建项目时是否运行PostSharp,生成输出中应显示类似的行:
:消息:PostSharp 4.1[4.1.21.0,PostSharp.srv.4.0-x86.exe,CLR 4.0.30319.379893,Release]complete--0错误,0警告,处理时间为1013毫秒
。另外,*.csproj文件应该有这样一行:PostSharp在安装NuGet包时集成到构建过程中。如果PostSharp在构建过程中没有运行,那么您可以尝试重新安装该软件包。很高兴我的回复对您有所帮助,这可能发生在任何人身上。将我的评论复制到一个新的答案,以提高可见性。