跨项目自定义INIT特性失效问题求助及解决方案
跨项目使用自定义INIT特性无效的解决方案
我最近碰到了一个跨项目使用自定义方法拦截特性的问题,这里分享下问题场景和最终的解决办法:
问题背景
我有两个.NET项目:基础类库项目P1,以及引用了P1的业务项目P2。在P1里定义了一个实现IMethodDecorator接口的INIT自定义特性,用来在方法执行前后触发OnEntry()、OnExit()钩子方法。
在P1内部的方法上标注[INIT]特性时,所有钩子方法都能正常触发;但当在P2的方法上使用这个特性时,完全没有效果,OnEntry()和OnExit()都不会执行。
P1中的INIT特性代码
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Assembly | AttributeTargets.Module)] public class INIT : Attribute, IMethodDecorator { public void OnEntry() { //some code here } public void OnExit() { //some code here } public void OnException(Exception exception) { //some code here } }
P2中的特性使用示例
public class LoginToPCM_31463 { [INIT] public static void SmokeTest_LoginToPCMApplication_31463(RemoteWebDriver Driver) { try { } catch (Exception e) { } } }
解决步骤
经过多次尝试,通过以下两步彻底解决了问题:
- 移除
INIT特性的命名空间(确保特性能被P2直接访问到) - 在P1和P2的项目中都添加
[module: INIT]特性(通常可以放在项目的AssemblyInfo.cs文件中,或者任意代码文件的顶部位置)
完成这两项操作后,P2中标记了[INIT]的方法就能正常触发对应的钩子方法了。
内容的提问来源于stack exchange,提问作者gnagesh
相关产品推荐
相关产品推荐

