2008-09-12 8 views
21

J'ai une application WPF simple que j'essaie de démarrer. Je suis le Microsoft Patterns and Practices "Guide d'application composite pour WPF". J'ai suivi leurs instructions mais mon application WPF échoue immédiatement avec une "TypeInitializationException". La propriété InnerException indique que "l'initialiseur de type pour 'System.Windows.Navigation.BaseUriHelper' a levé une exception."L'application WPF échoue au démarrage avec TypeInitializationException

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

Et voici ma App.xaml.cs (exception lancée sur "App publique()"):

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

J'ai mis le Classe "App" en tant qu'objet de démarrage dans le projet.

Que se passe-t-il?

Répondre

36

Merci @ima, votre réponse m'a orienté dans la bonne direction. J'utilisais un fichier app.config et il contenait ceci:

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

Il semble que le problème était le < élément de démarrage > parce que quand je l'ai enlevé l'application a fonctionné très bien. J'étais confus parce que Visual Studio 2008 a ajouté que lorsque j'ai coché la case pour utiliser le "profil client" disponible dans 3.5 SP1.

Après quelques déblayage sur la vérification et décochant la case J'ai fini avec un fichier de configuration comme ceci:

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

Ce qui fonctionne! Je ne suis pas sûr pourquoi l'ordre des éléments dans le app.config est important - mais il semble que ce soit.

+9

L'élément doit être le premier. L'ordre du reste n'est pas pertinent. – Alex

+0

Si je me souviens bien, c'est Visual Studio lui-même qui a changé l'ordre des éléments en insérant l'élément , d'où ma confusion. –

+2

Avait la même erreur exacte et comme Alex a dit déplacé mon 'configSections' au sommet de ma config et fonctionne bien maintenant. Causé en passant du profil client à .Net 4. – windowskm

8

Utilisez-vous le fichier .config? Si oui, vérifiez s'il y a des erreurs. Les erreurs d'initialisation de ce type sont souvent déclenchées par un code XML non valide: s'il n'y a pas d'erreur dans XAML, la configuration XML est le premier endroit à regarder.

0

Vous avez deux sections nommées "modules". Placez les deux définitions de module dans une section nommée "modules".

0

J'ai rencontré une situation similaire. Après avoir cherché une semaine, j'ai trouvé la résolution et cela a vraiment marché pour moi. Il a résolu 2-3 problèmes découlant du même problème.

Procédez comme suit: Vérifiez la clé WPF (absence) dans le registre: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Setup NET Framework \ NPD \ v3.0 \ Setup \ Windows Presentation Foundation Mon problème était dû à l'absence de clé mentionnée ci-dessus dans le registre.

Vous pouvez modifier et utiliser les détails suivants dans votre registre: (En fait, vous pouvez enregistrer dans le fichier et l'importation dans le registre)

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Setup NET Framework \ NPD \ v3.0 \ Setup \ Windows Presentation Foundation] @ = "WPF v3.0.6920.1453" "Version" = "3.0.6920.1453" "WPFReferenceAssembliesPathx86" = "C: \ Program Files \ Assemblys de référence \ 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 \"

Je suis sûr que cela fonctionnera

tous les. mieux.

Cordialement,

Umesh

11

Quelque chose ne va dans le fichier App.config peut provoquer l'erreur, comme une faute de frappe de * à la fin d'une ligne, par exemple ...</startup> a un montant supplémentaire « * » à la fin de la ligne ...</startup>*.

+0

Parfait. Tu as sauvé ma journée. Je n'avais aucune idée de ce qui se passe avec cette exception. J'ai accidentellement tapé "4" dans mon app.config et c'était la raison derrière l'exception. Merci. –

2

Suivi des InnerExceptions en profondeur, vous pourriez trouver l'erreur suivante:

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

Ce changement d'ordre est passé après EntityFramework Visual Studio Assistant a ajouté l'élément connectionStrings vers le haut

2

Si vous ne voyez que l'exception TypeInitializationException sans raison ou sans détails sur ce qui ne va pas, puis désactivez Just My Code dans les options de Visual Studio.

0

Dans mon cas, cela est nécessaire d'ajouter:

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

Section à App.config (VS 2015 .NET 4.5.2)

Ouvrez un projet WPF ce qui bâtissaient avant , cocher la construction, si OK - vérifier et comparer App.config aux deux projets

1

Pour moi, j'avais copié les paramètres de l'application d'une autre application dans mon app.config dans une nouvelle section appelée "userSettings" . Cependant, il doit y avoir un "configSections" ajouté au app.config qui définit "userSettings". J'ai supprimé la section userSettings, puis modifié les paramètres de l'application et l'ai enregistrée. VS crée automatiquement les paramètres "userSettings" et "configSections" corrects pour vous s'ils sont absents.

Questions connexes