Prism 问题总结一: 在模块中引用公用程序集出错

问题描述:

通常我们在各子模块中都会用到应用程序公用的程序集,如:“Touch.Modules.ModuleA ”会引用“Touch.Infrastructure”

image

在默认情况下,它会将“Touch.Infrastructure”复制到“Touch.Modules.ModuleA ”的生成目录(因为是Module所以我是让他生成到一个单独的目录中:image )。而执行程序“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”就对了。

image

posted @ 2012-12-14 11:13  吉桂昕  阅读(1567)  评论(0编辑  收藏  举报