Приложение WPF завершается ошибкой при запуске с TypeInitializationException - PullRequest
21 голосов
/ 12 сентября 2008

У меня есть простое приложение WPF, которое я пытаюсь запустить. Я следую шаблонам и практикам Microsoft "Руководство по составным приложениям для WPF". Я следовал их инструкциям, однако мое приложение WPF немедленно завершается сбоем с «TypeInitializationException».

Свойство InnerException показывает, что «инициализатор типа для« System.Windows.Navigation.BaseUriHelper »вызвал исключение».

Вот мой app.xaml:

<Application x:Class="MyNamespace.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Application.Resources>         
    </Application.Resources>
</Application>

А вот мой app.xaml.cs (исключение выдается в "public App ()"):

public partial class App : Application
{
    public App()
    {
        Bootstrapper bootStrapper = new Bootstrapper();
        bootStrapper.Run();
    }
}

Я установил класс "App" в качестве объекта запуска в проекте.

Что сбивается с пути?

Ответы [ 9 ]

36 голосов
/ 12 сентября 2008

Спасибо @ima, ваш ответ указал мне правильное направление. Я использовал файл app.config, и он содержал это:

<configuration>
  <startup>
    <supportedRuntime version="v2.0.50727" sku="Client"/>
  </startup>
  <configSections>
    <section name="modules" type="Microsoft.Practices.Composite.Modularity.ModulesConfigurationSection, Microsoft.Practices.Composite"/>
  </configSections>
  <modules>
    <module assemblyFile="Modules/MyNamespace.Modules.ModuleName.dll" moduleType="MyNamespace.Modules.ModuleName.ModuleClass" moduleName="Name"/>
  </modules>
</configuration>

Кажется, проблема была в элементе , потому что когда я его удалил, приложение работало нормально. Я был смущен, потому что Visual Studio 2008 добавил, что, когда я установил флажок, чтобы использовать «Профиль клиента», доступный в 3.5 SP1.

После некоторого оскорбления о проверке и снятии флажка я получил файл конфигурации, подобный этому:

<configuration>
  <configSections>
    <section name="modules" type="Microsoft.Practices.Composite.Modularity.ModulesConfigurationSection, Microsoft.Practices.Composite"/>
  </configSections>
  <modules>
    <module assemblyFile="Modules/MyNamespace.Modules.ModuleName.dll" moduleType="MyNamespace.Modules.ModuleName.ModuleClass" moduleName="Name"/>
  </modules>
  <startup>
    <supportedRuntime version="v2.0.50727" sku="Client"/>
  </startup>
</configuration>

Что работает!

Я не уверен, почему порядок элементов в app.config важен - но, похоже, это так.

11 голосов
/ 24 января 2013

Что-то не так в файле App.config может привести к ошибке, например, опечатка * в конце строки, например, ...</startup> имеет дополнительный «*» в конце линии ...</startup>*.

8 голосов
/ 12 сентября 2008

Используете ли вы файл .config? Если так, проверьте это на ошибки. Ошибки инициализации такого рода часто вызываются неверным XML: если в XAML нет ошибок, первое, что нужно искать, - XML-конфигурация.

2 голосов
/ 09 сентября 2017

Для меня я скопировал настройки приложения из другого приложения в мой app.config в новый раздел под названием «userSettings». Однако в app.config также должен быть добавлен «configSections», который определяет «userSettings». Я удалил раздел userSettings, затем отредактировал настройки приложения и сохранил его. VS автоматически создает правильные «userSettings» и «configSections» для вас, если они отсутствуют.

2 голосов
/ 22 сентября 2016

Если вы видите исключение TypeInitializationException без причины или без подробных сведений о том, что не так, отключите параметр «Просто мой код» в параметрах Visual Studio.

2 голосов
/ 28 апреля 2016

Отслеживая InnerExceptions в глубине, вы можете найти следующую ошибку:

"Only one <configSections> element allowed per config file and if present must be the first child of the root <configuration> element"

Это изменение порядка произошло после того, как мастер Visual Studio EntityFramework добавил элемент connectionStrings в начало

0 голосов
/ 19 февраля 2017

В моем случае это необходимо добавить:

<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />

Раздел в App.config (VS 2015 .NET 4.5.2)

Откройте любой WPF-проект, созданный ранее, проверьте сборку, если все в порядке - проверьте и сравните App.config в обоих проектах

0 голосов
/ 20 мая 2010

Я столкнулся с подобной ситуацией. После поиска в течение недели я нашел разрешение, и оно действительно сработало для меня. Было решено 2-3 проблемы, возникающих из-за одной и той же проблемы.

Выполните следующие действия: Проверьте ключ WPF (отсутствие) в реестре: HKEY_LOCAL_MACHINE \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ NET Framework Setup \ NDP \ v3.0 \ Setup \ Windows Presentation Foundation Моя проблема была из-за отсутствия вышеупомянутого ключа в реестре.

Вы можете изменить и использовать следующие данные в своем реестре: (На самом деле, вы можете сохранить в файл и импортировать в реестр)

[HKEY_LOCAL_MACHINE \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ NET Framework Setup \ NDP \ v3.0 \ Setup \ Windows Presentation Foundation] @ = "WPF v3.0.6920.1453" "Version" = "3.0.6920.1453" "WPFReferenceAssembliesPathx86" = "C: \ Program Files \ Справочные сборки \ Microsoft \ Framework \ v3.0 \" "WPFCommonAssembliesPathx86" = "C: \ Windows \ System32 \" "InstallRoot" = "C: \ Windows \ Microsoft.NET \ Framework \ v3.0 \ WPF \" "InstallSuccess" = DWORD: 00000001 "ProductVersion" = "3.0.6920.1453" "WPFNonReferenceAssembliesPathx86" = "C: \ Windows \ Microsoft.NET \ Framework \ v3.0 \ WPF \"

Я уверен, что это сработает.

всего наилучшего.

С уважением,

Умеш

0 голосов
/ 18 июня 2009

У вас есть два раздела под названием «модули». Поместите оба определения модулей в один раздел с именем "modules".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...