WPF应用程序在启动时失败,并带有TypeInitializationException
我有一个尝试启动的简单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 "
我敢肯定它将起作用。
一切顺利。
问候,
乌梅什