尝试在Castle中使用TypedFactoryFacility时遇到问题。
我正在使用Castle v3.0.0,我使用
创建了一个ViewFactoryinjector.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加密\
行Castle.DynamicProxy.ModuleScope.CreateModule(signStrongName As Boolean)
这似乎表明强有力的命名可以以某种方式关闭,但我无法弄清楚如何?
答案 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