2016-02-19 108 views
0

我在MSVS 2015 Professional(russified)中开发了带有Unity的Prism 6视图切换模块化WPF MVVM应用程序。 System.TypeInitializationException消息“System.Windows.Application的类型初始值设定项引发异常”在我的应用程序启动时抛出。在App.config文件中添加了模块注册后,此异常开始引发。下面是我的应用解决方案的结构:当Prism 6 WPF应用程序启动时抛出System.TypeInitializationException

enter image description here

正如你所看到的解决方案主要有工程“FlowmeterConfiguration”和两个棱镜模块项目:授权和校准。 Prism模块项目的名称取决于其模块类的名称。授权项目有AuthorizationModule类:

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

和校准项目有CalibrationModule类:

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

下面是App.config文件:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup> 
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /> 
    </startup> 
    <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> 
</configuration> 

下面是Bootstrepper类:

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.config和CreateModuleCatalog方法中删除了模块注册,则不会发生异常,并且应用程序将成功启动。如果我尝试通过代码注册模块(在Bootstrepper中),那么模块类型:授权和校准不被识别,并被标记为错误(在这种情况下Authorization.AuthrizationModule和Calibration.CalibrationModule也不会被识别)。但我必须注册我的模块!我做错了什么?请帮帮我。

+0

Попробуюзалить。 –

+0

在你的问题中标记答案作为解决方案,如果它帮助你的话 – galakt

回答

0

在静态构造函数或初始值设定项中引发了一些异常。尝试着看内部的例外。 这是同样的问题: TypeInitializationException thrown for Program class

启用调试器必须告诉你例外窗口Visual Studio的,只是ckick“查看详细...”链接查看内部异常和堆栈。可能它会帮助你。

+0

在我的应用程序的哪里可以捕获“System.TypeInitializationException”? –

2

你的App.config中缺少configsSection的部分定义:

https://github.com/PrismLibrary/Prism/blob/master/Documentation/WPF/30-ModularApplicationDevelopment.md#registering-modules-using-a-configuration-file

如果我试图通过注册代码(Bootstrepper)模块,然后模块类型:授权和校准无法识别并被标记为错误

如果您想要在代码中引用您的模块,您必须首先添加对模块项目的引用。由于您尝试使用App.config,因此您的Shell应用程序没有对这些项目的引用。

+0

Add:

。异乎寻常的惊喜。 –

+0

我在App.config中首先设置并排除了异常。 –

相关问题