【问题标题】:StrongNameKeyPair problem when attempting to use MoQ尝试使用 MoQ 时出现 StrongNameKeyPair 问题
【发布时间】:2010-03-11 14:26:05
【问题描述】:

我正在尝试为单元测试创​​建一个模拟 HttpContextBase。

var fakePrinciple = new GenericPrincipal(
           new GenericIdentity(userId), 
           rolesList.ToArray());            
var mockHttpContext = new Mock<HttpContextBase>();
mockHttpContext.Setup(t => t.User).Returns(fakePrinciple);
HttpContextBase mockedContext = mockHttpContext.Object;

单元测试在最后一条语句失败

抛出异常: System.ArgumentException:无法 获取公钥 StrongNameKeyPair..

System.Reflection.StrongNameKeyPair.nGetPublicKey(Boolean 导出,字节 [] 数组,字符串 容器) System.Reflection.StrongNameKeyPair.get_PublicKey() System.AppDomain.InternalDefineDynamicAssembly(AssemblyName 名称、AssemblyBuilderAccess 访问权限、 字符串目录,证据证据, PermissionSet requiredPermissions, PermissionSet optionalPermissions, PermissionSet 拒绝权限, StackCrawlMark 和 stackMark, IEnumerable`1 unsafeAssemblyAttributes) System.AppDomain.DefineDynamicAssembly(AssemblyName 名称,AssemblyBuilderAccess 访问) Castle.DynamicProxy.ModuleScope.CreateModule(布尔 签名强名称) Castle.DynamicProxy.ModuleScope.ObtainDynamicModuleWithStrongName() Castle.DynamicProxy.ModuleScope.ObtainDynamicModule(布尔 isStrongNamed) Castle.DynamicProxy.Generators.Emitters.ClassEmitter.CreateTypeBuilder(ModuleScope 模块范围,字符串名称,类型 (废话少说)

我用谷歌搜索,这里的建议似乎不起作用(更改 RSA 文件夹安全设置等)http://groups.google.com.br/group/castle-project-users/browse_thread/thread/85685cf32a795158

我认为这是正确的,因为HttpContextBaseSystem.Web.Abstraction 的一部分,它是一个签名程序集。 Moq 实际上会尝试对动态程序集进行签名,但失败了?

【问题讨论】:

  • FWIW,我用 Moq 模拟 HttpContextBase 很多次,从来没有遇到过这个问题。无论您的问题是什么,Moq 和 HttpContextBase 的组合都不通用。
  • 诀窍是需要在 MachineKeys 文件夹而不是 RSA 上设置权限。如果您不仔细阅读,来自 Ayende 的帖子并不能完全清楚地说明这一点。
  • 很高兴我找到了这个,呃,两天终于修好了:D。只是想添加一些对我有帮助的参考资料,以防其他人遇到这种情况:ansaurus.com/question/3154345-strong-name-keys-on-windows-7 | msdn.microsoft.com/en-us/library/bb909654(v=vs.90).aspx 真的帮助我解决了对我有用的问题。

标签: exception moq httpcontext strongname argumentexception


【解决方案1】:

MoQ 使用 Castle DynamicProxy 在运行时生成模拟。 Rhino Mocks 使用相同的库用于相同的目的。如果你在这里检查:

http://ayende.com/Blog/archive/2006/06/09/UnableToObtainPublicKeyForStrongNameKeyPair.aspx

您会发现问题在于机器密钥存储的权限之一。无论用户帐户正在运行测试,都必须有权在存储中创建和删除密钥。

您可以在此处找到有关此问题的更多详细信息: http://groups.google.co.uk/group/RhinoMocks/browse_thread/thread/26df68ff01567509/5ddebf407228edc4

【讨论】:

  • 我检查了 RSA 和 Crypto 文件夹的权限,但不知何故它没有为机器密钥设置。谢谢威尔。
  • 那是因为 MachineKeys 文件夹很重要,它不继承权限!
【解决方案2】:

查看 Scott Hanselman 的 this blog post - 它有点旧,但他在那里展示的 MvcMockHelpers 可能会让您很好地了解如何完成您正在做的事情。

【讨论】:

    【解决方案3】:

    您应该观看this video on asp.net 网站,该网站展示了一个令人惊叹的实施示例。

    【讨论】:

    • 这里的问题是签名,而不是如何在 mvc 中模拟。
    猜你喜欢
    • 2011-06-27
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    相关资源
    最近更新 更多