Microsoft Fakes 框架 - 我不能使用内部类
本文关键字:内部类 不能 Fakes 框架 Microsoft | 更新日期: 2023-09-27 18:34:46
我是Fakes框架和内部类的问题。我刚刚阅读并使用了这里的建议:如何使用 Fakes 框架填充码在 VS 2012 中模拟/隔离内部类?
但是,我仍然没有看到内部类。
我有这个解决方案:ACQTool (类库项目(ACQTool.UnitTests (测试项目(
在 ACQTool 命名空间中,有 ACQTool.Utils 内部类。
在ACQTool/AssemblyInfo中.cs我添加了以下行:
[assembly: InternalsVisibleTo("ACQTool.UnitTests, PublicKey=57ad8399-13fd-4d4d-90fd-c521c2164d25")]
[assembly: InternalsVisibleTo("ACQTool.Fakes, PublicKey=0024..47bc")]
[assembly: InternalsVisibleTo("Microsoft.QualityTools.Testing.Fakes, PublicKey=0024..47bc")]
构建后,我可以在测试类中使用 ACQTool.Utils,但不存在 ACQTool.Fakes.ShimUtils/StubUtils。请帮帮我。
这有点奇怪,我只是复制了你的问题,一开始肯定没有在 Fake 汇编中生成内部结构。我遵循以下步骤,它甚至开始适用于其他命名空间:
- 在命名空间
Utils
下添加一个公共类。 - 重新生成测试项目,内部项目将开始显示。
- 删除该公共类并再次重建。
我从命名空间中删除了Utils
所有内容并添加了新的内部类,从那时起它工作正常。这只是生成包含内部结构的命名空间的一种解决方法。
可能你应该粘贴由 sn.exe 工具生成的公钥。通常它存储在这样的地方:
"C:'Program Files'Microsoft SDKs'Windows'v7.1'Bin'sn.exe"
从命令行调用它:
sn.exe -p SomeName.snk SomeName.PublicKey
sn.exe -tp SomeName.PublicKey
并将输出粘贴到"InternalsVisibleTo"公钥参数中。
我错过的那个 msdn 页面的重要说明:Fakes 框架使用相同的密钥对所有生成的程序集进行签名,因此签名时的公钥应始终为 PublicKey=0024000004800000940000000602000000240000525341310004000001000100e92decb949446f688ab9f6973436c535bf50acd1fd580495aae3f875aa4e4f663ca77908c63b7f0996977cb98fcfdb35e05aa2c842002703cad835473caac5ef14107e3a7fae01120a96558785f48319f66daabc862872b2c53f5ac11fa335c0165e202b4c011334c7bc8f4c4e570cf255190f4e3e2cbc9137ca57cb687947bc