【问题标题】:System.TypeInitializationException is thrown when Prism 6 WPF application is startingPrism 6 WPF 应用程序启动时抛出 System.TypeInitializationException
【发布时间】:2016-02-20 16:56:10
【问题描述】:

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

如您所见,该解决方案具有主项目“FlowmeterConfiguration”和两个 Prism 模块项目:授权和校准。 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>

下面是引导程序类:

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 and Calibration 无法识别并标记为错误(在这种情况下,Authorization.AuthrizationModule 和 Calibration.CalibrationModule 也无法识别)。但我必须注册我的模块!我做错了什么?请帮帮我。

【问题讨论】:

  • 在您的问题中将答案标记为解决方案,如果对您有帮助的话

标签: c# wpf mvvm prism


【解决方案1】:

您的 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 应用程序没有对这些项目的引用。

【讨论】:

  • 添加:
    。例外是THORWN。
  • 我在App.config中先设置了,异常就消除了。
【解决方案2】:

在静态构造函数或初始化程序中抛出了一些异常。尝试查看内部异常。 这是类似的问题: TypeInitializationException thrown for Program class

启用调试器的 Visual Studio 必须向您显示异常窗口,只需点击“查看详细信息...”链接即可查看内部异常和堆栈。可能对你有帮助。

【讨论】:

  • 在我的应用程序中哪里可以捕获“System.TypeInitializationException”?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多