2012-03-13 40 views
2

关闭签约欲以城堡TypedFactoryFacility当我有问题城堡DynamicProxy

我使用的是城堡V3.0.0和我创建了一个的ViewFactory,使用

injector.AddFacility(Of TypedFactoryFacility)() 

和:

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

此代码一切工作我的机器上很好,但在部署时(虚拟机没有本地管理员权限)的用户,他们得到以下错误:

Unable to obtain public key for StrongNameKeyPair. 

有各种各样的threa DS左右,但没有什么似乎解决我的问题 - 我该如何使用DynamicProxy机器上谁不/不能访问到C:\ Documents和Settings \所有用户\应用数据\微软\加密\

stack trace of the error是行

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

这似乎暗示强命名可以以某种方式被关闭,但我无法弄清楚如何?

+0

我的程序集都没有签名,所以从我读过http://groups.google.com/group/castle-project-devel/browse_thread/thread/44987adbc81ea79/f358c5125810404a?lnk=gst&q = strongname#f358c5125810404a它不应该强壮地命名动态程序集 – Rich 2012-03-13 15:04:23

+0

你能从异常中显示堆栈跟踪吗? – Bronumski 2012-03-15 17:44:18

+0

你还使用DynamicProxy库,它现在在Castle.Core – Bronumski 2012-03-15 17:57:28

回答

3

在(即将到来的)3.1版本,你可以做到这一点,你所创建的容器后右:

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

在3.0或以上,你可以从DefaultProxyFactory继承并从那里设置的值。

0

你有没有尝试设置ProxyObjectReference的范围与自己的ModuleScope

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

ProxyObjectReference.SetScope(scope); 
+0

堆栈跟踪我看到http://issues.castleproject.org/issue/DYNPROXY-146?query=%23unresolved这一建议,但不知道放在哪里的代码? – Rich 2012-03-16 11:03:02

+0

@我会把它放在你把温莎连接起来的地方。可能在创建容器之前。 – Bronumski 2012-03-16 11:04:44

+0

没有不行(在创建容器之前或之后) – Rich 2012-03-16 12:55:49

0

对于其他人谁碰到这个事,我只是有相同的异常,在物理机上。一夜之间没有任何变化,但这个例外从早上开始。

原来是磁盘空间不足的问题,而动态代理组件无法写入到磁盘。只是意识到这一点,因为我偶然注意到了Windows的“低磁盘空间”图标。 :-P