Prism 6 WPF应用程序启动时抛出System.TypeInitializationException

时间:2016-02-19 13:44:06

标签: c# wpf mvvm prism

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

enter image description here

正如您所见,该解决方案包含主要项目“FlowmeterConfiguration”和两个Prism Module项目:授权和校准。 Prism Module项目的名称不受其模块类名称的影响。授权项目有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也不被识别)。但我必须注册我的模块!我做错了什么?请帮帮我。

2 个答案:

答案 0 :(得分: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应用程序没有对这些项目的引用。

答案 1 :(得分:0)

静态构造函数或初始值设定项中抛出的一些异常。试着看看内部异常。 这是类似的问题: TypeInitializationException thrown for Program class

启用调试器的visual studio必须显示异常窗口,只需查看“查看详细信息...”链接即可查看内部异常和堆栈。可能它会帮助你。