2016-02-20 74 views
0

当使用Unity的Prism 6 WPF模块化应用程序启动时,Prism.Wpf.dll中的“Prism.Modularity.ModuleTypeLoadingException”被抛出。下面是异常的屏幕截图:当Prism 6 WPF应用程序启动时,Prism.Wpf.dll中出现'Prism.Modularity.ModuleTypeLoadingException'

enter image description here

正如你可以看到当Bootstrepper.Run方法被称为异常抛出。下面是Botstrapper的代码:

namespace FlowmeterConfigurator 
{ 
    class Bootstrapper : UnityBootstrapper 
    { 
     protected override DependencyObject CreateShell() 
     { 
      return Container.Resolve<MainWindow>(); 
     } 

     protected override void InitializeShell() 
     { 
      Application.Current.MainWindow.Show(); 
     } 

     protected override IModuleCatalog CreateModuleCatalog() 
     { 
      return new ConfigurationModuleCatalog(); 
     } 
    } 
} 

我的应用程序的解决方案包括三个项目:与棱镜模板包创建为棱镜团结App和两个模块,每一个都与棱镜模板包创建为主要WPF项目棱镜模块。这两个模块都登记在App.config文件,请参阅以下内容:

<?xml version="1.0" encoding="utf-8" ?> 
    <configuration> 
     <configSections> 
      <section name="modules" type="Prism.Modularity.ModulesConfigurationSection, Prism.Wpf"/> 
     </configSections> 
     <modules> 
      <module assemblyFile="Authorization.dll" moduleType="Authorization.AuthorizationModule, Authorization, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" moduleName="AuthorizationModule" startupLoaded="true" /> 
      <module assemblyFile="Calibration.dll" moduleType="Calibration.CalibrationModule, Calibration, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" moduleName="CalibrationModule" startupLoaded="true" /> 
     </modules> 
     <startup> 
      <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /> 
     </startup> 
    </configuration> 

第一个模块被称为授权和它的类caled AuthorizationModule:

namespace Authorization 
{ 
    [Module(ModuleName = "AuthorizationModule", OnDemand = false)] 
    public class AuthorizationModule : IModule 
    { 
     . . . . . 
    } 
} 

第二模块称为校准和它的类被称为CalibrationModule:

namespace Calibration 
{ 
    [Module(ModuleName = "CalibrationModule", OnDemand = false)] 
    public class CalibrationModule : IModule 
    { 
     . . . . . 
    } 
} 

当开始然后主窗口被显示为短的时间我的应用程序(小于1秒)并且该S后Hort时间间隔ModuleTypeLoadingException引发与CalibrationModule相关的错误。看起来像AuthorizationModule的类型被成功载入,但CalibrationModule类型的载入失败。请帮我解决这个错误。

P.S.我没有在我的应用程序中定义IModuleManager的任何实例。可能是我必须在我的应用程序的某个地方定义它?

+0

有了这些信息,真的很难猜到发生了什么。我建议你比较配置文件中的名字和你试图链接的dll。 – Fka

+0

你的dll和exe文件在同一个文件夹中吗? – galakt

+0

在D:\ My_C#_Projects \ FlowmeterConfiguration_Unity \ FlowmeterConfigurator \ FlowmeterConfigurator \ bin \ Debug文件夹中有FlowmeterConfiguration.exe和Microsoft和Prism的dll文件。 –

回答

1

异常说棱镜无法找到.dll文件。 您的.exe文件和模块的.dll文件应位于相同的文件夹中(根据您在上一个问题中的app.config);

+0

我应该将每个模块的DLL复制到shell应用程序的exe文件所在的文件夹中吗? –

+0

我已经将模块的DLL引用添加到了shell项目中,并且我的应用程序出色地工作了! –

0

异常说明棱镜无法找到.dll文件。如果解决方案的不同项目不是使用相同的目标框架版本构建的,则可能不会发现这些问题。当Module-project在.Net Framework 4.5.2中生成时,我遇到了这个错误,而Main-project在4.5.1中。 更正/对齐目标框架版本,退出Visual Studio,重新输入,重新生成。然后错误消失了。

大多数情况下,有一个例外的原因很多。

相关问题