Prism 问题总结一: 在模块中引用公用程序集出错
问题描述:
通常我们在各子模块中都会用到应用程序公用的程序集,如:“Touch.Modules.ModuleA ”会引用“Touch.Infrastructure”
在默认情况下,它会将“Touch.Infrastructure”复制到“Touch.Modules.ModuleA ”的生成目录(因为是Module所以我是让他生成到一个单独的目录中: )。而执行程序“Touch” (程序入口)本身也引用了“Touch.Infrastructure” 这样就会导致2个地方都有“Touch.Infrastructure”,在Prism 中加载模块时就会报如下错误:
An exception occurred while trying to create region objects.
- The most likely causing exception was: 'System.Reflection.TargetInvocationException: 调用的目标发生了异常。 ---> Microsoft.Practices.Prism.Regions.Behaviors.RegionCreationException: An exception occurred while creating a region with name 'NavRegion'. The exception was: Microsoft.Practices.ServiceLocation.ActivationException: Activation error occured while trying to get instance of type AutoPopulateExportedViewsBehavior, key "" ---> System.InvalidOperationException: 序列包含一个以上的元素
在 System.Linq.Enumerable.Single[TSource](IEnumerable`1 source)
在 Microsoft.Practices.Prism.MefExtensions.MefServiceLocatorAdapter.DoGetInstance(Type serviceType, String key)
在 Microsoft.Practices.ServiceLocation.ServiceLocatorImplBase.GetInstance(Type serviceType, String key)
--- 内部异常堆栈跟踪的结尾 ---
在 Microsoft.Practices.ServiceLocation.ServiceLocatorImplBase.GetInstance(Type serviceType, String key)
在 Microsoft.Practices.ServiceLocation.ServiceLocatorImplBase.GetInstance(Type serviceType)
在 Microsoft.Practices.Prism.Regions.RegionBehaviorFactory.CreateFromKey(String key)
在 Microsoft.Practices.Prism.Regions.RegionAdapterBase`1.AttachDefaultBehaviors(IRegion region, T regionTarget)
在 Microsoft.Practices.Prism.Regions.RegionAdapterBase`1.Initialize(T regionTarget, String regionName)
在 Microsoft.Practices.Prism.Regions.RegionAdapterBase`1.Microsoft.Practices.Prism.Regions.IRegionAdapter.Initialize(Object regionTarget, String regionName)
在 Microsoft.Practices.Prism.Regions.Behaviors.DelayedRegionCreationBehavior.CreateRegion(DependencyObject targetElement, String regionName). ---> Microsoft.Practices.ServiceLocation.ActivationException: Activation error occured while trying to get instance of type AutoPopulateExportedViewsBehavior, key "" ---> System.InvalidOperationException: 序列包含一个以上的元素
在 System.Linq.Enumerable.Single[TSource](IEnumerable`1 source)
在 Microsoft.Practices.Prism.MefExtensions.MefServiceLocatorAdapter.DoGetInstance(Type serviceType, String key)
在 Microsoft.Practices.ServiceLocation.ServiceLocatorImplBase.GetInstance(Type serviceType, String key)
--- 内部异常堆栈跟踪的结尾 ---
在 Microsoft.Practices.ServiceLocation.ServiceLocatorImplBase.GetInstance(Type serviceType, String key)
在 Microsoft.Practices.ServiceLocation.ServiceLocatorImplBase.GetInstance(Type serviceType)
在 Microsoft.Practices.Prism.Regions.RegionBehaviorFactory.CreateFromKey(String key)
在 Microsoft.Practices.Prism.Regions.RegionAdapterBase`1.AttachDefaultBehaviors(IRegion region, T regionTarget)
在 Microsoft.Practices.Prism.Regions.RegionAdapterBase`1.Initialize(T regionTarget, String regionName)
在 Microsoft.Practices.Prism.Regions.RegionAdapterBase`1.Microsoft.Practices.Prism.Regions.IRegionAdapter.Initialize(Object regionTarget, String regionName)
在 Microsoft.Practices.Prism.Regions.Behaviors.DelayedRegionCreationBehavior.CreateRegion(DependencyObject targetElement, String regionName)
--- 内部异常堆栈跟踪的结尾 ---
在 Microsoft.Practices.Prism.Regions.Behaviors.DelayedRegionCreationBehavior.CreateRegion(DependencyObject targetElement, String regionName)
在 Microsoft.Practices.Prism.Regions.Behaviors.DelayedRegionCreationBehavior.TryCreateRegion()
在 Microsoft.Practices.Prism.Regions.Behaviors.DelayedRegionCreationBehavior.OnUpdatingRegions(Object sender, EventArgs e)
--- 内部异常堆栈跟踪的结尾 ---
在 System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
在 System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
在 System.Delegate.DynamicInvokeImpl(Object[] args)
在 System.Delegate.DynamicInvoke(Object[] args)
在 Microsoft.Practices.Prism.Events.WeakDelegatesManager.Raise(Object[] args)
在 Microsoft.Practices.Prism.Regions.RegionManager.UpdateRegions()'.
But also check the InnerExceptions for more detail or call .GetRootException().
解决办法
将“Touch.Modules.ModuleA ”引用的“Touch.Infrastructure”,复制本地设置为“false”就对了。
出处: http://www.cnblogs.com/jiguixin
我的新浪微博: http://weibo.com/jiguixin
本文版权归【吉桂昕】和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如果觉得还有帮助的话,可以点一下右下角的【推荐】,希望能够持续的为大家带来好的技术文章!想跟我一起进步么?那就【关注】我吧。