2008-09-12 22 views
21

Ho una semplice applicazione WPF che sto tentando di avviare. Sto seguendo i modelli e le pratiche Microsoft "Composite Application Guidance for WPF". Ho seguito le loro istruzioni tuttavia la mia applicazione WPF fallisce immediatamente con una "TypeInitializationException".L'applicazione WPF non riesce all'avvio con TypeInitializationException

La proprietà InnerException rivela che "L'inizializzatore di tipo per" System.Windows.Navigation.BaseUriHelper "ha generato un'eccezione."

Ecco il mio 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> 

Ed ecco la mia app.xaml.cs (eccezione generata al "App pubblica()"):

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

Ho impostato il Classe "App" come oggetto di avvio nel progetto.

Cosa sta andando fuori strada?

risposta

36

Grazie a @ima, la tua risposta mi ha indirizzato nella giusta direzione. Stavo usando un file app.config e conteneva questo:

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

Sembra che il problema era il <avvio> elemento perché quando ho rimosso l'applicazione ha funzionato benissimo. Sono stato confuso perché Visual Studio 2008 ha aggiunto che quando ho selezionato la casella di utilizzare il "Profilo client" disponibile in 3.5 SP1.

Dopo qualche mucking sul controllo e deselezionando la casella ho finito con un file di configurazione come questa:

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

Quale funziona!

Non sono sicuro del motivo per cui l'ordine degli elementi in app.config è importante, ma sembra che lo sia.

+9

L'elemento deve essere il primo. L'ordine del resto è irrilevante. – Alex

+0

Se ricordo bene era Visual Studio stesso che ha cambiato l'ordine degli elementi inserendo l'elemento , quindi la mia confusione. –

+2

Avevo lo stesso errore e Alex ha detto che spostava il mio 'configSections' in cima alla mia configurazione e ora funziona bene. Causato passando dal profilo del client a .Net 4. – windowskm

8

Si utilizza il file .config? Se è così, controlla la presenza di errori. Gli errori di inizializzazione di questo tipo sono spesso innescati da XML non valido: se non ci sono errori in XAML, XML config è il primo posto da cercare.

0

Sono presenti due sezioni denominate "moduli". Inserisci entrambe le definizioni del modulo in una sezione denominata "moduli".

0

Mi sono imbattuto in una situazione simile. Dopo aver cercato per una settimana, ho trovato la risoluzione e ha funzionato davvero per me. Ha risolto 2-3 problemi derivanti dallo stesso problema.

le seguenti operazioni: Controllare la chiave WPF (assenza) nel Registro di sistema: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Setup NET Framework \ NDP \ v3.0 \ Setup \ Windows Presentation Foundation Il mio problema era dovuto alla mancanza di chiave sopra menzionata nel registro.

È possibile modificare e utilizzare i seguenti dati nel Registro di sistema: (In realtà, è possibile salvare in un file e importare nel Registro di sistema)

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Setup NET Framework \ NDP \ v3.0 \ Setup \ Windows Presentation Foundation] @ = "WPF v3.0.6920.1453" "Version" = "3.0.6920.1453" "WPFReferenceAssembliesPathx86" = "C: \ Programmi \ Assiemi di riferimento \ 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 \"

sono sicuro che funzionerà

tutto il. migliore.

saluti,

Umesh

11

Qualcosa non va nel App.config file di può causare l'errore, come ad esempio un errore di battitura del * alla fine di una linea, ad esempio ...</startup> ha un ulteriore "*" alla fine della linea ...</startup>*.

+0

Perfetto. Mi hai salvato la giornata. Non avevo idea di cosa stia succedendo con questa eccezione. Ho digitato accidentalmente "4" nel mio app.config e questa è stata la ragione dietro l'eccezione. Grazie. –

2

monitoraggio delle InnerExceptions in fondo, si potrebbe trovare il seguente errore:

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

Questo cambiamento ordine è accaduto dopo Visual Studio EntityFramework guidata aggiunto l'elemento connectionStrings alla cima

2

Se vedi solo la TypeInitializationException senza alcun motivo o nessun dettaglio su cosa c'è che non va, quindi disabilitare Just My Code nelle opzioni di Visual Studio.

0

Nel mio caso questo è necessario aggiungere:

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

Sezione a App.config (VS 2015 .NET 4.5.2)

Aprire qualsiasi progetto WPF quello costruito prima , controlla la compilazione, se OK - controlla e confronta App.config in entrambi i progetti

1

Per me, avevo copiato le impostazioni delle app da un'altra applicazione nel mio app.config in una nuova sezione chiamata "userSettings" . Tuttavia, è necessario aggiungere una "configSections" all'app.config che definisce "userSettings". Ho eliminato la sezione userSettings, ho modificato le impostazioni dell'app e l'ho salvata. VS crea automaticamente le "userSettings" e "configSections" corrette se sono assenti.

Problemi correlati