2016-02-19 2 views
0

Я разрабатываю Prism 6 модульное приложение WPF MVVM для коммутации изображений с Unity в MSVS 2015 Professional (русифицированное). System.TypeInitializationException с сообщением «Инициализатор типа для« System.Windows.Application »выбрал исключение», который запускается, когда мое приложение запускается. Это исключение стало бросаться после того, как я добавил регистрацию модулей в файл App.config. Ниже представлена ​​структура моего решения приложения:System.TypeInitializationException выбрасывается при запуске приложения Prism 6 WPF

enter image description here

Как вы можете видеть, что решение имеет основной проект «FlowmeterConfiguration» и два проекта Prism модуль: Authorization и калибровку. Имена проектов Prism Module деируются с именами их классов модулей. Проект 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 
    { 
     . . . . . 
    } 
} 

Ниже приведен 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), тогда типы модулей: авторизация и калибровка не распознаются и помечены как ошибка (авторизация.AuthrizationModule и Calibration.CalibrationModule в этом случае также не распознаются). Но я должен зарегистрировать свои модули! Что я делаю неправильно? Пожалуйста, помогите мне.

+0

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

+0

Отметьте ответ как решение в ваших вопросах, если это вам помогло – galakt

ответ

0

Исключено исключение из статического конструктора или инициализаторов. Попробуйте взглянуть на внутренние исключения. Это аналогичная проблема: TypeInitializationException thrown for Program class

Визуальная студия с поддержкой отладчик должен показать вам окно исключения, просто 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

Добавить:

. ИСКЛЮЧЕНИЕ ИСКЛЮЧИТЕЛЬНО. –

+0

Я установил сначала в App.config, и исключение было устранено. –

Смежные вопросы