我有一个依赖于Moq和Castle.Core的测试,并试图引用接口Castle.DynamicProxy.IProxyTargetAccessor。
问题是Moq将Castle.Core代码嵌入其中(全部或部分,不确定),因此Castle.DynamicProxy.IProxyTargetAccessor在这两个程序集中都以public的形式出现。
现在,我正在使用Castle.Core显式地创建一个动态代理(由于可见性范围减小,不能使用嵌入在Moq中的代码),因此代理实现了接口的Castle.Core风格。
尴尬,但我不知道如何告诉编译器使用正确的界面,或如果是完全可能的。
编辑1
这就是问题是如何在骑士身上表现出来的:

但是点击任何选择都没有用。可能是Rider,因为它必须使用一些C#语法来显式地针对Castle.Core程序集。但不确定它是否存在。
我可以使用反射重写代码,但我很好奇这是否有编译时解决方案。
编辑2
删除对Castle.Core的引用无效:
DynamicProxyFactory.cs(20, 26): [CS0122] 'ProxyGenerator' is inaccessible due to its protection level
DynamicProxyFactory.cs(27, 67): [CS0122] 'IInterceptor' is inaccessible due to its protection level
DynamicProxyFactory.cs(43, 38): [CS0122] 'IInterceptor' is inaccessible due to its protection level
DynamicProxyFactory.cs(91, 31): [CS0122] 'IInvocation' is inaccessible due to its protection level这是因为Moq没有真正引用Castle.Core。相反,它可能是在浸入的帮助下嵌入内部的。但显然它修改了我想要使用的某些接口的可见范围。因此,在使用它们时会出现编译错误。
编辑3
由反射镜提供:

可以看到,Castle.DynamicProxy.IInterceptor在Moq中是internal。而它在最新版本的Castle.Core中是公开的。
发布于 2019-07-03 16:34:06
因此,我没有找到如何显式地引用程序集中的类型,但是https://stackoverflow.com/users/5101046/scott-hannen的一条评论帮助我认识到,我可以将Moq升级到最新版本,它不再嵌入Castle.Core,而是正常地引用它。解决了我的障碍。
https://stackoverflow.com/questions/56872402
复制相似问题