Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 针对WinForm项目的方面';s的方法不起作用_C#_.net_Winforms_.net Assembly_Postsharp - Fatal编程技术网

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

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

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

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

2) 控制台项目:它是另一个具有相同想法的程序集:它只对类Person的一个对象执行一点操作,然后抛出一个异常

3) AspectTest:它是一个程序集,定义了类Person和一个aspect(称为LogBoundary)(继承自OnMethodBoundaryAspect),后者记录OnEntry()、OnExit()、OnSuccess()和oneException()

这三个程序集通过一个“AspectInfo.cs”类进行配置,以针对除“CompileGenerated”方法之外的所有方法。因此:

[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在构建过程中没有运行,那么您可以尝试重新安装该软件包。很高兴我的回复对您有所帮助,这可能发生在任何人身上。将我的评论复制到一个新的答案,以提高可见性。