【问题标题】:Turn off signing for Castle DynamicProxy关闭 Castle DynamicProxy 的签名
【发布时间】:2012-03-13 13:34:43
【问题描述】:

尝试在 Castle 中使用 TypedFactoryFacility 时遇到问题。

我正在使用 Castle v3.0.0,并且我创建了一个 ViewFactory,使用

injector.AddFacility(Of TypedFactoryFacility)()

和:

container.Register(CMR.Component.For(Of IDialogViewFactory)().AsFactory())

这段代码在我的机器上运行良好,但是在将它部署到虚拟机上的用户(没有本地管理员权限)时,他们会收到以下错误:

Unable to obtain public key for StrongNameKeyPair.

周围有各种线程,但似乎没有什么能解决我的问题 - 我如何在无法/无法访问 C:\Documents and Settings\All Users\Application Data\Microsoft\ 的机器上使用 DynamicProxy加密\

stack trace of the error是一行

Castle.DynamicProxy.ModuleScope.CreateModule(signStrongName As Boolean)

这似乎表明可以以某种方式关闭强命名,但我不知道如何?

【问题讨论】:

标签: .net castle castle-dynamicproxy


【解决方案1】:

在(即将推出的)3.1 版中,您可以在创建容器后立即执行此操作:

Container.Kernel.ProxyFactory = new DefaultProxyFactory(disableSignedModule: true);

在 3.0 或更早版本中,您可以从 DefaultProxyFactory 继承并从那里设置值。

【讨论】:

    【解决方案2】:

    您是否尝试使用自己的ModuleScope 设置ProxyObjectReference 的范围?

    var scope = new ModuleScope(
                            savePhysicalAssembly,
                            true /*disableSignedModule*/,
                            strongModulePath,
                            weakAssemblyName,
                            weakModulePath);
    
    ProxyObjectReference.SetScope(scope);
    

    【讨论】:

    • 我在issues.castleproject.org/issue/DYNPROXY-146?query=%23unresolved 上看到了该建议,但不知道将代码放在哪里?
    • @Rich 我会把它放在你连接温莎的地方。可能在创建容器之前。
    • 不,这不起作用(在创建容器之前或之后)
    • 我尝试了各种排列,但无法让城堡注意到新的范围。我无法通过挖掘创建原始 ModuleScope 的堆栈跟踪/反射代码来弄清楚
    【解决方案3】:

    对于遇到此问题的其他人,我只是在物理机器上遇到了同样的例外。一夜之间没有任何变化,但这个异常从早上开始出现。

    原来是磁盘空间不足的问题,动态代理程序集无法写入磁盘。之所以意识到这一点,是因为我在 Windows 的“磁盘空间不足”图标短暂出现时碰巧注意到它。 :-P

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-31
      • 2017-02-12
      • 2011-04-26
      • 1970-01-01
      • 1970-01-01
      • 2012-06-20
      • 2023-03-03
      相关资源
      最近更新 更多