WPF应用程序在启动时失败,并带有TypeInitializationException

时间:2020-03-05 18:52:03  来源:igfitidea点击:

我有一个尝试启动的简单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"类设置为项目中的启动对象。

误入歧途?

解决方案

回答

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

回答

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

看来问题出在<startup>元素,因为当我删除它时,应用程序运行良好。我很困惑,因为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中的元素顺序很重要,但似乎很重要。

回答

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

回答

我遇到了类似的情况。
经过一周的搜索,我找到了解决方案,它确实对我有用。
解决了由于相同问题而产生的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 Assemblies \ 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 "

我敢肯定它将起作用。

一切顺利。

问候,

乌梅什