Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.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# 我不知道的组件上的PostSharp';我没有消息来源_C#_Aop_Postsharp_Aspects - Fatal编程技术网

C# 我不知道的组件上的PostSharp';我没有消息来源

C# 我不知道的组件上的PostSharp';我没有消息来源,c#,aop,postsharp,aspects,C#,Aop,Postsharp,Aspects,在他们网站上的示例中,PostSharp演示了在主系统程序集中拦截调用。我尝试过几次在没有源代码的程序集上设置和复制上述截取调用,但都没有成功 我的方法是简单地将程序集级属性放在我想要插入的名称空间和方法上。这对我从来都不起作用 比如: [assembly:Trace(“MyCategory”,AttributeTargetTypes=“My.BusinessLayer.*”)] 我是不是遗漏了什么?如果没有为程序集拉入源代码,我是否可以在程序集上执行指令插入方面的运行时注入?我想我可以做运行时

在他们网站上的示例中,PostSharp演示了在主系统程序集中拦截调用。我尝试过几次在没有源代码的程序集上设置和复制上述截取调用,但都没有成功

我的方法是简单地将程序集级属性放在我想要插入的名称空间和方法上。这对我从来都不起作用

比如:

[assembly:Trace(“MyCategory”,AttributeTargetTypes=“My.BusinessLayer.*”)]

我是不是遗漏了什么?如果没有为程序集拉入源代码,我是否可以在程序集上执行指令插入方面的运行时注入?我想我可以做运行时注射


谢谢。

您可以通过指定以下内容来跟踪其他程序集的方法:

[assembly: Trace("MyCategory",
                 AttributeTargetAssemblies="xyz",
                 AttributeTargetTypes = "My.BusinessLayer.*")]
但是,不会修改外部部件!只能修改当前项目对外部程序集的调用


目前,修改没有源代码的程序集并不容易。这是可能的,但被认为是一种高级方案,需要自定义编码。

Gael,所以。。。如果我创建了一个单元测试,我想拦截一个方法调用,因为它是一个“高成本”的方法。。。我可以像你上面所说的那样添加拦截,但是如果我直接调用,只有单元测试的调用会被拦截,而不是我正在测试对同一方法的调用的程序集?如果我想这样做,我必须在我正在测试的组件中进行拦截?--您是否有上述高级方案的示例?我很想看看。是的,就是这样。假设您有程序集A和B,B引用A。A和B都调用方法Thread.Sleep。在项目B中,您在Thread.Sleep上放置了一个方面。只截获从B到Thread.Sleep的调用,不会截获来自A的调用。而且,由于您似乎喜欢P-Invoke,也可以在P-Invoke方法上添加方面:)。太好了!您确实提到高级方案需要自定义编码来全局拦截(a&b调用都被拦截到Thread.Sleep)。。。有没有可能得到一些示例代码?没有示例。基本上,您应该使用自定义项目(psproj)调用PostSharp命令行,其中包括实现IANotationProvider的任务;该提供者提供了方面。唯一的困难是编写这个iAnotationProvider。默认提供程序只读取自定义属性。