关闭Castle DynamicProxy的签名

时间:2012-03-13 13:34:44

标签: .net castle castle-dynamicproxy

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

我正在使用Castle v3.0.0,我使用

创建了一个ViewFactory
injector.AddFacility(Of TypedFactoryFacility)()

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

此代码在我的计算机上运行正常,但在将其部署到VM上的用户(没有本地管理员权限)时,会出现以下错误:

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)

这似乎表明强有力的命名可以以某种方式关闭,但我无法弄清楚如何?

4 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

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

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

ProxyObjectReference.SetScope(scope);

答案 2 :(得分:0)

当我们遇到此错误时,本文解决了这个问题:

http://ayende.com/blog/1441/unable-to-obtain-public-key-for-strongnamekeypair

不知何故,您的默认安全设置搞砸了。在生产服务器上一夜之间发生同样的事情。

答案 3 :(得分:0)

对于遇到这种情况的其他人,我在物理机器上遇到了同样的例外。一夜之间什么都没有改变,但这个例外在早上开始出现。

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