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。请帮帮我。

Microsoft Fakes 框架 - 我不能使用内部类

这有点奇怪,我只是复制了你的问题,一开始肯定没有在 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=0024000004800000940000000602000000240000525341310004000001000100e92de‌​cb949446f688ab9f6973436c535bf50acd1fd580495aae3f875aa4e4f663ca77908c63b7f0996977c‌​b98fcfdb35e05aa2c842002703cad835473caac5ef14107e3a7fae01120a96558785f48319f66daab‌​c862872b2c53f5ac11fa335c0165e202b4c011334c7bc8f4c4e570cf255190f4e3e2cbc9137ca57cb‌​687947bc