У меня есть простое приложение WPF, которое я пытаюсь запустить. Я следую «Руководству по составным приложениям для WPF» Microsoft Patterns and Practices. Я выполнил их инструкции, однако мое приложение 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();
}
}
Я установил класс «Приложение» в качестве объекта запуска в проекте.
Что сбивается с пути?





Вы используете файл .config? Если да, проверьте его на наличие ошибок. Ошибки инициализации такого рода часто возникают из-за недопустимого XML: если в XAML нет ошибок, в первую очередь следует искать конфигурацию XML.
Спасибо @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, но похоже, что это так.
Если я правильно помню, это была сама Visual Studio, которая изменила порядок элементов, вставив элемент <startup>, отсюда и мое замешательство.
Была точно такая же ошибка, и, как сказал Алекс, переместил мой configSections в верхнюю часть моей конфигурации и теперь работает нормально. Вызвано изменением профиля клиента на .Net 4.
У вас есть два раздела с названием «модули». Поместите оба определения модуля в один раздел под названием «модули».
Я столкнулся с похожей ситуацией. После недели поисков я нашел разрешение, и оно действительно сработало. Это решило 2-3 проблемы, возникающие из-за одной и той же проблемы.
Следуй этим шагам: Проверить (отсутствие) ключа WPF в реестре: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ NET Framework Setup \ NDP \ v3.0 \ Setup \ Windows Presentation Foundation Моя проблема была связана с отсутствием вышеупомянутого ключа в реестре.
Вы можете изменить и использовать следующие данные в своем реестре: (Фактически, вы можете сохранить в файл и импортировать в реестр)
[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ NET Framework Setup \ NDP \ v3.0 \ Setup \ Windows Presentation Foundation] @ = "WPF v3.0.6920.1453" "Версия" = "3.0.6920.1453" "WPFReferenceAssembliesPathx86" = "C: \ Program Files \ Reference 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 \"
Я уверен, что это сработает.
всего наилучшего.
С уважением,
Умеш
Что-то неправильное в файле App.config может вызвать ошибку, например, опечатка * в конце строки, например, ...</startup> имеет дополнительный "*" в конце строки ...</startup>*.
Идеально. Ты спас мне день. Я понятия не имел, что происходит с этим исключением. Я случайно набрал «4» в своем app.config, и это было причиной исключения. Спасибо.
Глубоко отслеживая 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.
В моем случае нужно добавить:
<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 в обоих проектах
Что касается меня, я скопировал настройки приложения из другого приложения в свой app.config в новый раздел под названием «userSettings». Однако в app.config также должен быть добавлен «configSections», который определяет «userSettings». Я удалил раздел userSettings, затем отредактировал настройки приложения и сохранил их. VS автоматически создает для вас правильные "userSettings" и "configSections", если они отсутствуют.
Для меня я переименовал свое имя приложения и вызвал эту ошибку. У меня было серверное и клиентское приложение. в серверном приложении этой проблемы не было. поэтому я проверил файл App.config как сервера, так и клиента. я нашел
<startup>
<supportedRuntime version = "v4.0" sku = ".NETFramework,Version=v4.6.1" />
</startup>
<configSections>
<section name = "entityFramework" type = "System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission = "false" />
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
</configSections>
Тег <startup> над тегом <configSections> на клиенте и сервере был другим способом, поэтому я скопировал вставленный тег запуска в тег configSections, и он сработал. Так.
<configSections>
<section name = "entityFramework" type = "System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission = "false" />
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
</configSections>
<startup>
<supportedRuntime version = "v4.0" sku = ".NETFramework,Version=v4.6.1" />
</startup>
Элемент <configSections> должен быть первым. Порядок остальных не имеет значения.