首页 / 知识

关于.net:WPF应用程序在启动时失败,并带有TypeInitializationException

2023-04-15 02:13:00

关于.net:WPF应用程序在启动时失败,并带有TypeInitializationException

WPF Application fails on startup with TypeInitializationException

我有一个尝试启动的简单WPF应用程序。 我正在遵循Microsoft模式和实践" WPF的复合应用程序指南"。 我遵循了他们的指示,但是我的WPF应用程序立即失败,并显示" TypeInitializationException"。

InnerException属性表明" System.Windows.Navigation.BaseUriHelper的类型初始值设定项引发了异常。"

这是我的app.xaml:

1
2
3
4
5
6
<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()"抛出的异常):

1
2
3
4
5
6
7
8
public partial class App : Application
{
    public App()
    {
        Bootstrapper bootStrapper = new Bootstrapper();
        bootStrapper.Run();
    }
}

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

误入歧途?


谢谢@ima,您的回答为我指明了正确的方向。我正在使用一个app.config文件,它包含以下内容:

1
2
3
4
5
6
7
8
9
10
11
<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>

看来问题出在元素,因为当我删除它时,应用程序运行良好。我很困惑,因为Visual Studio 2008添加了我选中此框以利用3.5 SP1中可用的"客户端配置文件"的问题。

经过一番摸索之后,我最终得到了一个配置文件,如下所示:

1
2
3
4
5
6
7
8
9
10
11
<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中的元素顺序很重要-但似乎如此。


App.config文件中的任何错误都可能导致错误,例如在行尾出现*的错字,例如...在行...*的末尾有一个附加的" *"。


您是否使用.config文件?如果是这样,请检查是否有错误。这种初始化错误通常是由无效的XML触发的:如果XAML中没有错误,则XML配置是第一个查找的地方。


对我而言,我已将应用程序设置从另一个应用程序复制到我的app.config中,并复制到一个名为" userSettings"的新部分中。但是,需要在app.config中添加一个定义" userSettings"的" configSections"。我删除了userSettings部分,然后编辑了应用程序设置并保存了它。如果不存在,VS会自动为您创建正确的" userSettings"和" configSections"。


如果您仅看到TypeInitializationException而不显示原因或错误原因的详细信息,请在Visual Studio选项中禁用"仅我的代码"。


深入跟踪InnerExceptions,您可能会发现以下错误:

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

在Visual Studio EntityFramework向导将connectionStrings元素添加到顶部之后,发生了此顺序更改


就我而言,这需要添加:

1
2
3
<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" />

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

打开任何WPF项目之前构建的内容,检查构建,如果可以,请检查并比较两个项目中的App.config


我遇到了类似的情况。
经过一周的搜索,我找到了解决方案,它确实对我有用。
解决了由于相同问题而产生的2-3个问题。

跟着这些步骤:
检查注册表中的WPF密钥(不存在):
HKEY_LOCAL_MACHINE SOFTWARE Microsoft nET Framework安装程序 nDP v3.0 Setup Windows Presentation Foundation
我的问题是由于注册表中缺少上述密钥。

您可以在注册表中修改和使用以下详细信息:(实际上,您可以保存在文件中并在注册表中导入)

[HKEY_LOCAL_MACHINE SOFTWARE Microsoft nET Framework安装程序 nDP v3.0 Setup Windows Presentation Foundation]
@ =" WPF v3.0.6920.1453"
"版本" =" 3.0.6920.1453"
" WPFReferenceAssembliesPathx86" =" C: Program Files reference程序集 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"

我相信它会起作用。

祝一切顺利。

问候,

乌梅什


您有两个名为"模块"的部分。将两个模块定义都放在一个名为"模块"的部分中。


应用程序启动模式复合

最新内容

相关内容

猜你喜欢