我一直试图让Moq(或者更确切地说是Castle.Core)为我的内部类型创建代理。
以下(当我的项目被添加到测试中时)可以让事情发挥作用:
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")]
但是这个(更安全的版本)不会:
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=002400000480000094000000060200000024000052534131000400000100010077f5e87030dadccce6902c6adab7a987bd69cb5819991531f560785eacfc89b6fcddf6bb2a00743a7194e454c0273447fc6eec36474ba8e5a3823147d214298e4f9a631b1afee1a51ffeae4672d498f14b000e3d321453cdd8ac064de7e1cf4d222b7e81f54d4fd46725370d702a05b48738cc29d09228f1aa722ae1a9ca02fb")]
注意:此处的公钥与documented here不同,我重新检查了当前Nuget版Moq附带的Castle.Core.dll的公钥。
我还有错误的钥匙吗?
[编辑]
我注意到官方网站(而不是Nuget)的完整Moq下载包含一个带有较小dll的NET40-RequiresCastle文件夹,这意味着Castle.Core代码已包含在默认的Moq.dll中。
我正在查看他们为Silverlight提供的Castle.Core.dll,并假设他们在整个过程中都使用了相同的版本?
答案 0 :(得分:7)
我知道这已经过时了,但是对于那些偶然发现这一点的人来说,我在某个时刻遇到了Pex和Moq的版本问题,最终找到了最直接有用的方法Strong Name Tool。也就是说,我发现打开了一个Visual Studio命令提示符,并使用“sn -Tp ThirdPartyAssembly.dll”直接查询它的密钥。事实证明,这比通过互联网寻找不同的,有记录的公钥来尝试更有效。