WPF应用程序在启动时因TypeInitializationException而失败

时间:2008-09-12 07:06:38

标签: .net wpf prism

我有一个简单的WPF应用程序,我正在尝试启动它。我遵循Microsoft模式和实践“WPF的复合应用程序指南”。我按照他们的指示操作,但是我的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();
    }
}

我已将“App”类设置为项目中的启动对象。

什么是误入歧途?

10 个答案:

答案 0 :(得分:36)

感谢@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>

似乎问题是&lt; startup&gt;因为当我删除它时,应用程序运行正常。我很困惑因为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中的元素顺序很重要 - 但它似乎是。

答案 1 :(得分:11)

App.config 文件中的任何错误都可能导致错误,例如行尾的*错字,例如...</startup>还有一个“ *“在行...</startup>*的最后。

答案 2 :(得分:8)

你使用.config文件吗?如果是,请检查错误。这种排序的初始化错误通常由无效的XML触发:如果XAML中没有错误,则首先要查看XML配置。

答案 3 :(得分:2)

深入跟踪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元素添加到顶部

之后,发生了此订单更改

答案 4 :(得分:2)

如果您只看到没有原因的TypeInitializationException或没有关于错误的详细信息,请在Visual Studio选项中禁用Just My Code。

答案 5 :(得分:2)

对我来说,我已将应用程序设置从另一个应用程序复制到我的app.config中,进入名为&#34; userSettings&#34;的新部分。但是,需要有一个&#34; configSections&#34;也添加到app.config中,它定义了&#34; userSettings&#34;。我删除了userSettings部分,然后编辑了应用程序设置并保存了它。 VS自动创建正确的&#34; userSettings&#34;和&#34; configSections&#34;如果他们不在你身边。

答案 6 :(得分:0)

您有两个名为“modules”的部分。将两个模块定义放在名为“modules”的一个部分中。

答案 7 :(得分:0)

我遇到了类似的情况。 搜索了一周后,我找到了解决方案,它确实对我有用。 它解决了由于同样问题引起的2-3个问题。

请按以下步骤操作: 检查注册表中的WPF密钥(缺席): HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ NET Framework安装\ 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 \框架\ 3.0 \ WPF \” “InstallSuccess”= DWORD:00000001 “的ProductVersion”= “3.0.6920.1453” “WPFNonReferenceAssembliesPathx86”= “C:\的Windows \ Microsoft.NET \框架\ 3.0 \ WPF \”

我相信它会奏效。

一切顺利。

此致

Umesh

答案 8 :(得分:0)

在我的情况下,需要添加:

post_insert_query = u'''
INSERT INTO post(
    social_media_id, external_id, post_time, post_date, related_post_id, poster_name, poster_id, title, content, post_url,
    follow_account_id)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'''

App.config部分(VS 2015 .NET 4.5.2)

打开之前构建的任何WPF项目,检查构建,如果正常 - 检查并比较两个项目中的App.config

答案 9 :(得分:0)

对我来说,我重命名了我的应用程序名称,并导致了此错误。我有一个服务器和客户端应用程序。服务器应用程序没有此问题。所以我检查了服务器和客户端的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>
客户端和服务器中标记上方的

标记具有另一种方式,因此我将粘贴的启动标记复制到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>