Pregunta

Tengo una aplicación WPF sencilla que estoy intentando iniciar.Estoy siguiendo la "Guía de aplicaciones compuestas para WPF" de patrones y prácticas de Microsoft.Seguí sus instrucciones, sin embargo, mi aplicación WPF falla inmediatamente con una "TypeInitializationException".

La propiedad InnerException revela que "El inicializador de tipo para 'System.Windows.Navigation.BaseUriHelper' generó una excepción".

Aquí está mi aplicación.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>

Y aquí está mi app.xaml.cs (excepción lanzada en "aplicación pública()"):

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

He configurado la clase "Aplicación" como objeto de inicio en el proyecto.

¿Qué se está extraviando?

¿Fue útil?

Solución

Gracias @ima, tu respuesta me indicó la dirección correcta.Estaba usando un archivo app.config y contenía esto:

<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>

Parece que el problema fue el elemento <startup> porque cuando lo eliminé la aplicación funcionó bien.Estaba confundido porque Visual Studio 2008 agregó eso cuando marqué la casilla para utilizar el "Perfil de cliente" disponible en 3.5 SP1.

Después de jugar un poco al marcar y desmarcar la casilla, terminé con un archivo de configuración como este:

<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>

¡Lo cual funciona!

No estoy seguro de por qué el orden de los elementos en app.config es importante, pero parece que lo es.

Otros consejos

Cualquier cosa mal en el aplicación.config archivo puede causar el error, como un error tipográfico * al final de una línea, por ejemplo ...</startup> tiene un "*" adicional al final de la línea ...</startup>*.

¿Utiliza el archivo .config?Si es así, compruébalo para ver si hay errores.Los errores de inicialización de este tipo suelen ser provocados por XML no válido:Si no hay errores en XAML, la configuración XML es el primer lugar donde buscar.

Al realizar un seguimiento profundo de las InnerExceptions, es posible que encuentre el siguiente error:

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

Este cambio de orden se produjo después de que Visual Studio EntityFramework Wizard agregara el elemento ConnectionStrings en la parte superior.

Si solo ve TypeInitializationException sin ningún motivo o sin detalles sobre lo que está mal, deshabilite Just My Code en las opciones de Visual Studio.

En mi caso, copié la configuración de la aplicación desde otra aplicación a mi app.config en una nueva sección llamada "userSettings".Sin embargo, también es necesario agregar "configSections" a app.config que defina "userSettings".Eliminé la sección Configuración de usuario, luego edité la configuración de la aplicación y la guardé.VS crea automáticamente las "configuraciones de usuario" y las "secciones de configuración" correctas si no están.

Tiene dos secciones llamadas "módulos".Coloque ambas definiciones de módulos en una sección denominada "módulos".

Me encontré con una situación similar.Después de buscar durante una semana, encontré la solución y realmente funcionó para mí.Resolvió 2-3 problemas que surgieron debido al mismo problema.

Sigue estos pasos:Verifique la clave WPF (ausencia) en el registro:HKEY_LOCAL_MACHINE Software Microsoft Net Framework Setup NDP V3.0 SETUP Windows Presentation Foundation Mi problema se debió a la ausencia de la clave mencionada anteriormente en el registro.

Puede modificar y utilizar los siguientes detalles en su registro:(En realidad, puedes guardarlo en un archivo e importarlo en el registro)

HKEY_LOCAL_MACHINESOFTWAREMicrosoftNET Framework SetupNDPv3.0SetupWindows Presentation Foundation] @="WPF v3.0.6920.1453" "Version"="3.0.6920.1453" "WPFReferenceAssembliesPathx86"="C: Archivos de programa Assemblies de referencia Microsoft Framework V3.0 "" WPFcommonAssembliesPathx86 "=" C: Windows System32 "" InstallRoot "=" C: Windows Microsoft.net Framework V3.0 WPF WPF "" InstallSuccess "= dWord: 00000001" productVersion "=" 3.0.6920.1453 "" wpfnonreferenceaseSembliespathx86 "=" c: Windows Microsoft.net Framework v3.0 wpf "

Estoy seguro de que funcionará.

mis mejores deseos.

Saludos,

umesh

En mi caso es necesario agregar esto:

<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" />

Sección en App.config (VS 2015 .NET 4.5.2)

Abra cualquier proyecto WPF creado anteriormente, verifique la compilación, si está bien, verifique y compare App.config en ambos proyectos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top