.NET 3.5 - 配置系统未能初始化异常

Posted

技术标签:

【中文标题】.NET 3.5 - 配置系统未能初始化异常【英文标题】:.NET 3.5 - Configuration system failed to initialize exception 【发布时间】:2010-10-01 09:21:46 【问题描述】:

在我的 winform 应用程序中,我正在尝试添加一个 userSetting,尽管 appSettings 也发生了错误。添加设置后,我收到一个异常提示:“配置系统无法初始化”并带有内部异常“无法识别的配置部分 userSetting”

异常详情:

System.Configuration.ConfigurationErrorsException was unhandled
  Message="Configuration system failed to initialize"
  Source="System.Configuration"
  BareMessage="Configuration system failed to initialize"
  Line=0
  StackTrace:
       at System.Configuration.ConfigurationManager.PrepareConfigSystem()
       at System.Configuration.ConfigurationManager.RefreshSection(String sectionName)
       at System.Configuration.ClientSettingsStore.ReadSettings(String sectionName, Boolean isUserScoped)
       at System.Configuration.LocalFileSettingsProvider.GetPropertyValues(SettingsContext context, SettingsPropertyCollection properties)
       at System.Configuration.SettingsBase.GetPropertiesFromProvider(SettingsProvider provider)
       at System.Configuration.SettingsBase.GetPropertyValueByName(String propertyName)
       at System.Configuration.SettingsBase.get_Item(String propertyName)
       at System.Configuration.ApplicationSettingsBase.GetPropertyValue(String propertyName)
       at System.Configuration.ApplicationSettingsBase.get_Item(String propertyName)
       at Settings.get_ApplicationData() in \Properties\Settings.Designer.cs:line 41
       at Common.Initialize.IsSettingsInitialized() 
       at SurveyClient.Program.Main() 
       at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: System.Configuration.ConfigurationErrorsException
       Message="Unrecognized configuration section userSettings.
       Source="System.Configuration"
       BareMessage="Unrecognized configuration section userSettings."
       Line=3
       StackTrace:
            at System.Configuration.ConfigurationSchemaErrors.ThrowIfErrors(Boolean ignoreLocal)
            at System.Configuration.BaseConfigurationRecord.ThrowIfParseErrors(ConfigurationSchemaErrors schemaErrors)
            at System.Configuration.BaseConfigurationRecord.ThrowIfInitErrors()
            at System.Configuration.ClientConfigurationSystem.OnConfigRemoved(Object sender, InternalConfigEventArgs e)
       InnerException: 

【问题讨论】:

非常自我解释...Unrecognized configuration section userSettings. 【参考方案1】:

当我的应用程序的 .NET 4.x 版本已经在 AppData 文件夹下生成公共 user.config 文件时,我收到此错误,然后我启动了 .NET 3.5 版本。

虽然按照@beluga的建议删除%APPDATA%\Local\<Company>\<AppName>_StrongName_*\<Version>下的user.config可以解决问题,但设置也会丢失,如果发生这种情况,用户挖掘文件删除可能会非常令人沮丧。

但实际上,即使是 .NET 3.5 版本也可以使用配置文件。

罪魁祸首是sectionGroup 元素,其中UserSettingsGroup 类型使用.NET 4.x 程序集标识:

<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">

要从应用程序处理此问题,您需要应用一些自定义程序集解析逻辑:

// somewhere in your application startup:
AppDomain.CurrentDomain.AssemblyResolve += HandleAssemblyResolve;

事件处理程序在哪里:

private static Assembly HandleAssemblyResolve(object sender, ResolveEventArgs args)

    // System.dll, any version
    if (args.Name.StartsWith("System, Version=", StringComparison.Ordinal))
        return typeof(UserSettingsGroup).Assembly;

    // for any other assembly letting the default logic take over
    return null;
 

【讨论】:

【参考方案2】:

刚刚在此处发布,因为我找到了解决该问题的方法,但未在此处列出... 我在主配置节点下添加了一个 appSettings 标签,当我运行它时,我得到了与 OP 相同的错误。修复它的是确保 configSections 节点在我的 appSettings 节点之前。

【讨论】:

【参考方案3】:

启动标签在 VS Pro 2013 版本 12.021005.1 上为我做了诀窍,带有 .Net 4.5.51650 用于控制台应用程序(即 app.config 文件)

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
 <connectionStrings>
 ...
</connectionStrings>
</configuration>

【讨论】:

【参考方案4】:

我有一些用户设置,然后将它们全部删除并开始看到此异常 - 但仅在未调试的情况下运行应用程序时。调试应用程序时效果很好。原因是用户级设置“缓存”在本地应用程序数据文件夹中,实际上不是从 MYAPP.exe.config 中读取的。所以我所做的是转到 C:\Users\MYUSERNAME\AppData\Local\MYCOMPANY\MYAPP.exe_Url_longnastyhash9982749827349879\1.0.0.0\user.config (这是在 Win7 上,路径取决于操作系统)并删除了该文件夹(使用长哈希)完全。异常消失了。顺便说一句,根据您的设置,此 user.config 文件可能位于 \AppData\Local 或 \AppData\Roaming 下。

【讨论】:

这个问题自发地发生在我身上。没有改变。一位客户今天早上说它运行良好,然后他重新启动了应用程序并得到了这个异常。 我通过从该配置文件中删除有问题的 userSettings 部分来解决此问题,但完全删除该文件可能也会起作用。 类似于@MarkLakata,这自发地发生在我们的客户身上——昨晚工作,今天坏了。整个 user.config 文件被 NULL 字符填充。感谢您的提示。 由于这个 AppData 文件夹而发生错误的次数令人惊讶。他们应该已经修好了。问题是它太违反直觉了。【参考方案5】:

我遇到了这个问题,因为我更改了一个应用程序设置范围(从“应用程序”到用户“)。由于找不到解决问题的解决方案,我决定将设置文件删除到解决方案资源管理器中。之后,我打开属性,在“设置”选项卡中,单击建议创建设置文件的位置。并且已经使用我在之前的设置文件中定义的值创建了一个新的设置文件。我重建了我的项目,它运行良好。

【讨论】:

【参考方案6】:

我的 machine.config 中有一些垃圾导致了这个错误。查找异常堆栈跟踪,看看您是否有同样的问题。它本质上是格式错误的 XML。

【讨论】:

【参考方案7】:

我今天遇到了这个问题,发现我不小心(更不用说错误地)在我的 App.config 中添加了第二个自定义配置部分。删除错误添加后,我可以继续运行我的应用程序而不会出现问题。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="ABCConfig" type="ABC.Configuration.ABCConfigurationSection, ABC"/>
    <!-- Other custom section definitions -->
  </configSections>
  <connectionStrings>
      <!-- Connection strings go here -->
  </connectionStrings>

  <!-- Configure ABC -->
  <ABCConfig CustomA="blah" CustomB="stuff" />

  <!-- Other custom sections -->

  <!-- Errant addition to Configure ABC which causes the problem - SHOULD NOT BE HERE -->
  <ABCConfig CustomA="blah" CustomB="stuff" />

</configuration>

删除第二个 ABCConfig 部分解决了我的问题。希望这会有所帮助!

【讨论】:

这适用于任何重复的部分。我们收到“配置部分无法初始化”异常,我发现我们的一位开发人员在尝试删除自定义环境部分组时意外创建了两个 部分。【参考方案8】:

删除所有用户设置后,我开始看到此消息。我可以通过将单个 userSetting 添加回设置文件来修复它。

【讨论】:

【参考方案9】:

清洁解决方案 删除所有当前存在的设置文件以及 app.config 关闭 VS 手动进去清空你项目的bin文件夹和obj文件夹 重启电脑 重新添加“应用程序配置文件”

【讨论】:

【参考方案10】:

当我如下编写 App.Config(愚蠢地)时出现此错误。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

<!--List of XMLFiles Begins -->
    <add key="ConfigFileEnvironment" value="C:\Program Files\MyProduct\Config\Environment.xml" />
<!--List of XMLFiles Ends -->

</configuration>

注意,没有appSettings?我以前经常犯这个错误...

【讨论】:

【参考方案11】:

问题可能是您的配置文件不符合其架构。例如,可以通过复制 ConnectionStrings 部分来重新创建此问题。

【讨论】:

【参考方案12】:

尝试检查 app.config(部署后的 myapp.exe.config)文件是否存在并且位于顶部(可能还有其他位)

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="userSettings"
    type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
</sectionGroup>

【讨论】:

谢谢,但就在那里。我把它吹走并重新创建了几次。 对我来说重要的是“在“配置”元素中,第一个子元素必须是“configSections”元素”(取自***.com/a/6472696/61697) 另外我注意到 app.config 中的错误,包括无效的 sectionGroup 也会导致这种情况

以上是关于.NET 3.5 - 配置系统未能初始化异常的主要内容,如果未能解决你的问题,请参考以下文章

开机弹出,如图。Framework相关。应用程序中发生了未经处理的异常。配置系统未能初始化。

配置系统未能在 Windows 窗体中初始化异常

App.config“配置系统未能初始化” 异常解决 C#

打开SparkIV显示配置未能初始化然后就提示 应用程序出现了无法处理的异常............... 该怎么弄啊?

c#自定义app.config生成配置系统初始化失败异常

配置系统未能初始化