.NET 3.5 - 配置系统无法初始化异常

时间:2009-01-14 14:52:44

标签: .net .net-3.5 configuration settings app-config

在我的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: 

12 个答案:

答案 0 :(得分:26)

我有一些用户设置,然后删除所有这些设置并开始看到此异常 - 但仅在运行应用程序时没有调试。调试应用程序时它工作正常。原因是用户级设置在本地应用程序数据文件夹中“缓存”,实际上不会从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下。

答案 1 :(得分:25)

尝试检查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>

答案 2 :(得分:5)

当我编写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?我曾经经常犯这个错误......

答案 3 :(得分:4)

当我删除所有userSettings时,我开始看到此消息。我能够通过将单个userSetting添加回设置文件来修复它。

答案 4 :(得分:2)

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

答案 5 :(得分:2)

我今天遇到了这个问题,发现我不小心(更不用说错误地)在我的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部分解决了我的问题。希望这有帮助!

答案 6 :(得分:1)

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

答案 7 :(得分:1)

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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

启动标签在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>

答案 10 :(得分:0)

刚刚在这里发帖,因为我发现了我对这个问题的修复但是没有看到它列在这里.... 我在主配置节点下添加了一个appSettings标签,当我运行它时,我得到了与OP相同的错误。修复它的原因是确保configSections节点在appSettings节点之前。 enter image description here

答案 11 :(得分:0)

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

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

但实际上,即使是 .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;
}