Pergunta

Eu tenho um aplicativo WPF simples que estou tentando iniciar.Estou seguindo os Padrões e Práticas da Microsoft "Orientação de Aplicativo Composto para WPF".Segui as instruções, mas meu aplicativo WPF falha imediatamente com uma "TypeInitializationException".

A propriedade InnerException revela que "O inicializador de tipo para 'System.Windows.Navigation.BaseUriHelper' gerou uma exceção."

Aqui está meu 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>

E aqui está meu app.xaml.cs (exceção lançada em "public App()"):

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

Eu configurei a classe "App" como objeto de inicialização no projeto.

O que está se extraviando?

Foi útil?

Solução

Obrigado @ima, sua resposta me apontou na direção certa.Eu estava usando um arquivo app.config e continha isto:

<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 o problema era o elemento <startup> porque quando o removi o aplicativo funcionou bem.Fiquei confuso porque o Visual Studio 2008 adicionou isso quando marquei a caixa para utilizar o "Perfil do Cliente" disponível no 3.5 SP1.

Depois de alguma confusão sobre como marcar e desmarcar a caixa, acabei com um arquivo de configuração 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>

O que funciona!

Não sei por que a ordem dos elementos no app.config é importante - mas parece que é.

Outras dicas

Qualquer coisa errada no App.config arquivo pode causar o erro, como um erro de digitação de * no final de uma linha, por exemplo ...</startup> tem um "*" adicional no final da linha ...</startup>*.

Você usa arquivo .config?Nesse caso, verifique se há erros.Erros de inicialização desse tipo são frequentemente acionados por XML inválido:se não houver erros no XAML, a configuração XML será o primeiro lugar a procurar.

Rastreando InnerExceptions profundamente, você pode encontrar o seguinte erro:

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

Essa alteração de ordem ocorreu depois que o Visual Studio EntityFramework Wizard adicionou o elemento connectionStrings ao topo

Se você vir apenas TypeInitializationException sem motivo ou sem detalhes sobre o que está errado, desative Just My Code nas opções do Visual Studio.

Para mim, copiei as configurações do aplicativo de outro aplicativo para o meu app.config em uma nova seção chamada "userSettings".No entanto, é necessário que haja um "configSections" também adicionado ao app.config que define "userSettings".Excluí a seção userSettings, editei as configurações do aplicativo e salvei-o.O VS cria automaticamente os "userSettings" e "configSections" corretos para você, se eles estiverem ausentes.

Você tem duas seções chamadas "módulos".Coloque ambas as definições de módulo em uma seção chamada "módulos".

Eu me deparei com uma situação semelhante.Depois de pesquisar por uma semana, encontrei a resolução e realmente funcionou para mim.Resolveu 2-3 problemas decorrentes do mesmo problema.

Siga esses passos:Verifique a chave WPF (ausência) no registro:HKEY_LOCAL_MACHINE Software Microsoft Net Framework Setup ndp v3.0 Setup Windows Apresentation Foundation Meu problema foi devido à ausência de chave acima mencionada no registro.

Você pode modificar e usar os seguintes detalhes em seu registro:(Na verdade, você pode salvar em arquivo e importar no registro)

HKEY_LOCAL_MACHINE Software Microsoft Setup Ndp V3.0 Setup Windows Apresentation Foundation] @= "WPF v3.0.6920.1453" versão "=" 3.0.6920.1453 "" "WPFreencySkiesxlies" = "3.0.6920.1453" "" WPFreeNSEMBLYSXEXTA " Arquivos de programa Assembléias de referência 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 "" wpfnonReferenceasEssembliesPathX86 "=" C: Windows Microsoft.net Framework V3.0 WPF "

Tenho certeza de que funcionará.

tudo de bom.

Cumprimentos,

Umesh

No meu caso, isso precisa ser adicionado:

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

Seção em App.config (VS 2015 .NET 4.5.2)

Abra qualquer projeto WPF que foi construído antes, verifique build, se estiver OK - verifique e compare App.config em ambos os projetos

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top