Приложение WPF завершается с ошибкой при запуске с TypeInitializationException

StackOverflow https://stackoverflow.com/questions/58425

  •  09-06-2019
  •  | 
  •  

Вопрос

У меня есть простое приложение 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();
    }
}

Я установил класс «Приложение» в качестве объекта запуска в проекте.

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

Это было полезно?

Решение

Спасибо @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>

Кажется, проблема заключалась в элементе <startup>, потому что, когда я удалил его, приложение работало нормально.Я был сбит с толку, потому что 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, но, похоже, это так.

Другие советы

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

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

Отслеживая 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 вверху.

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

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

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

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

Следуй этим шагам:Проверьте ключ WPF (отсутствие) в реестре:Hkey_local_machine Software Microsoft Net Framework Setup NDP v3.0 Setup Presentation Foundation Моя проблема была из -за отсутствия вышеупомянутого ключа в реестре.

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

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft ET Framework Setup DP\v3.0\Setup\Windows Presentation Foundation] @="WPF v3.0.6920.1453" "Версия"="3.0.6920.1453" "WPFReferenceAssembliesPathx86"="C:\Program Files eference Assemblies\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\"

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

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

С уважением,

Умеш

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

<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 в обоих проектах.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top