当Prism 6 WPF应用程序启动时抛出Prism.Wpf.dll中的'Prism.Modularity.ModuleTypeLoadingException'

时间:2016-02-20 10:54:24

标签: c# wpf prism

当使用Unity的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();
        }
    }
}

我的应用程序的解决方案包括三个项目:使用Prism Unity Pack作为Prism Unity App创建的主WPF项目和两个模块,每个模块都使用Prism Template Pack作为Prism模块创建。这两个模块都在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>

第一个模块称为Authorization,其类名为AuthorizationModule:

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

第二个模块称为校准,其类称为CalibrationModule:

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

当我的应用程序启动时,MainWindow会短时间显示(少于1秒),并在此短暂时间间隔后抛出与CalibrationModule相关的ModuleTypeLoadingException。看起来像AuthorizationModule的类型是偶然加载的,但是为CalibrationModule加载的类型失败了。请帮我消除这个错误。

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

异常说棱镜无法找到.dll文件。如果解决方案的不同项目不是使用相同的Target Framework版本构建,则可能找不到这些。当模块项目在.Net Framework 4.5.2中构建时,我遇到了这个错误,而主项目在4.5.1中。 更正/对齐目标框架版本,退出Visual Studio,重新进入,重建。然后错误就消失了。

大多数原因都有例外。

答案 2 :(得分:0)

.exe和.dll应该放在同一文件夹中,以避免可以通过以下两种方式实现的异常

1)转到模块项目属性->构建事件->发布构建事件命令行,然后 粘贴以下代码

copy "$(TargetPath)" "$(SolutionDir)MainWPFProject\bin\$(ConfigurationName)"
上面代码中的

MainWPFProject意味着项目具有App.config文件。

2)手动复制依赖模块.dll