加载配置文件时如何修复“配置系统初始化失败/根元素丢失”错误?

14
我在我的C# Windows应用程序中遇到了这个错误:"配置系统初始化失败"。
一切都正常运行,突然间我遇到了这个异常。它显示内部异常详细信息为“缺少根元素”(C:\Users\company\AppData\Local\Clickbase_Corp_Sverige_AB\TouchStation.vshost.exe_Url_no1nets4fg3oy2p2q2pnwgulbvczlv33\1.1.0.12\user.config)。当我尝试从Settings.cs类获取值时会出现这种情况。
在program.cs文件中编写了以下代码:
if (Properties.Settings.Default.CallUpgrade)
            {
                Properties.Settings.Default.Upgrade();
                Properties.Settings.Default.CallUpgrade = false;
                Properties.Settings.Default.Save();                
            }

并调用settings.cs类,下面的代码会引发上述异常。
    [global::System.Configuration.UserScopedSettingAttribute()]
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    [global::System.Configuration.DefaultSettingValueAttribute("True")]

    public bool CallUpgrade {
        get {
            return ((bool)(this["CallUpgrade"]));
        }
        set {
            this["CallUpgrade"] = value;
        }
    }

以下是我的整个app.config文件:
<configuration>
  <configSections>
    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <section name="TouchStation.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
      <section name="TouchStation.TouchStation" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
    </sectionGroup>
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <section name="TouchStation.TouchStation" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    </sectionGroup>
    <section name="SitesInfo" type="TouchServer.SitesInfoSectionHandler,TouchServerLib" />
  </configSections>
  <appSettings>
    <add key="WebRoot" value="webroot" />
    <add key="TempDir" value="temp" />
    <add key="ServerPort" value="9338" />
    <add key="ClientSettingsProvider.ServiceUri" value="" />
  </appSettings>
  <userSettings>
    <TouchStation.Properties.Settings>
      <setting name="Site" serializeAs="String">
        <value />
      </setting>
      <setting name="StationID" serializeAs="String">
        <value>0</value>
      </setting>
      <setting name="Location" serializeAs="String">
        <value />
      </setting>
      <setting name="ShutdownTime" serializeAs="String">
        <value>0000</value>
      </setting>
      <setting name="ReportStatusEvery" serializeAs="String">
        <value>0</value>
      </setting>
      <setting name="SynchronizeEvery" serializeAs="String">
        <value>10</value>
      </setting>
      <setting name="DefaultUsername" serializeAs="String">
        <value />
      </setting>
      <setting name="DefaultPassword" serializeAs="String">
        <value />
      </setting>
      <setting name="WatchdogTimeout" serializeAs="String">
        <value>60</value>
      </setting>
      <setting name="RebootOnTimeout" serializeAs="String">
        <value>False</value>
      </setting>
      <setting name="AnonymousLogin" serializeAs="String">
        <value>True</value>
      </setting>
      <setting name="RefID" serializeAs="String">
        <value />
      </setting>
      <setting name="AutoStart" serializeAs="String">
        <value>False</value>
      </setting>
      <setting name="DemoMode" serializeAs="String">
        <value>True</value>
      </setting>
      <setting name="UnlockPassword" serializeAs="String">
        <value>needle</value>
      </setting>
      <setting name="SynchronizerUsername" serializeAs="String">
        <value />
      </setting>
      <setting name="SynchronizerPassword" serializeAs="String">
        <value />
      </setting>
      <setting name="RunClientApplications" serializeAs="String">
        <value>False</value>
      </setting>
      <setting name="MapID" serializeAs="String">
        <value>0</value>
      </setting>
      <setting name="ServerName" serializeAs="String">
        <value />
      </setting>
      <setting name="CallUpgrade" serializeAs="String">
        <value>True</value>
      </setting>
      <setting name="ServerPort" serializeAs="String">
        <value>9338</value>
      </setting>
    </TouchStation.Properties.Settings>
    <TouchStation.TouchStation>
      <setting name="ServerURL" serializeAs="String">
        <value />
      </setting>
      <setting name="Site" serializeAs="String">
        <value />
      </setting>
      <setting name="StationID" serializeAs="String">
        <value>0</value>
      </setting>
      <setting name="Location" serializeAs="String">
        <value />
      </setting>
      <setting name="ShutdownTime" serializeAs="String">
        <value />
      </setting>
      <setting name="ReportStatusEvery" serializeAs="String">
        <value>0</value>
      </setting>
      <setting name="SynchronizeEvery" serializeAs="String">
        <value>0</value>
      </setting>
      <setting name="HideMouse" serializeAs="String">
        <value>False</value>
      </setting>
      <setting name="HideDesktopOnStart" serializeAs="String">
        <value>False</value>
      </setting>
      <setting name="DefaultUsername" serializeAs="String">
        <value />
      </setting>
      <setting name="DefaultPassword" serializeAs="String">
        <value />
      </setting>
      <setting name="LogServerPort" serializeAs="String">
        <value>9050</value>
      </setting>
      <setting name="WatchdogTimeout" serializeAs="String">
        <value>60</value>
      </setting>
      <setting name="RebootOnTimeout" serializeAs="String">
        <value>False</value>
      </setting>
      <setting name="AnonymousLogin" serializeAs="String">
        <value>True</value>
      </setting>
      <setting name="RefID" serializeAs="String">
        <value />
      </setting>
    </TouchStation.TouchStation>
  </userSettings>
  <applicationSettings>
    <TouchStation.TouchStation>
      <setting name="ClientSettingsURL" serializeAs="String">
        <value />
      </setting>
    </TouchStation.TouchStation>
  </applicationSettings>
  <SitesInfo>
    <sites>
      <site Name="Local" FullName="Local Site" DatabaseConnectionString="Data\local.db" />
    </sites>
  </SitesInfo>
  <system.web>
    <membership defaultProvider="ClientAuthenticationMembershipProvider">
      <providers>
        <add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" />
      </providers>
    </membership>
    <roleManager defaultProvider="ClientRoleProvider" enabled="true">
      <providers>
        <add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400" />
      </providers>
    </roleManager>
  </system.web>
</configuration>

有人可以帮我吗?这个和IT技术有关。

谢谢。

祝好,

jennie


C:\Users\company\AppData\Local\Clickbase_Corp_Sverige_AB\TouchStation.vshost.exe_Url_no1nets4fg3oy2p2q2pnwgulbvczlv33\1.1.0.12\user.config的内容是什么? - Daniel Hilgarth
1
<?xml version="1.0" encoding="utf-8" ?>在那里吗? - Akram Shahda
其实我不知道为什么这个路径 C:\Users\company\AppData\Local\Clickbase_Corp_Sverige_AB\TouchStation.vshost.exe_­Url_no1nets4fg3oy2p2q2pnwgulbvczlv33\1.1.0.12\user.config 出现在异常中,因为没有这样的路径,而我的应用程序一直在正常运行。突然间我收到了这个错误。 - Sangeetha
12个回答

9
除了Akram Shahda的答案之外,我也遇到了同样的问题(配置系统初始化失败/根元素丢失)。在AppData文件夹中的.config文件是空的。通过删除AppData文件夹中的.config文件来解决这个问题。

6

万一有人看到这篇文章:

对于我来说,我通过直接进入用户配置文件的位置解决了这个问题,对于这个问题,它的位置在:

(C:\Users\company\AppData\Local\Clickbase_Corp_Sverige_AB\TouchStation.vshost.exe_Url_no1nets4fg3oy2p2q2pnwgulbvczlv33\1.1.0.12\user.config)"

我删除了配置文件并重新启动了Visual Studio,问题得以解决。

希望这可以帮助您!

谢谢


5
XmlException的原因是根元素丢失,这意味着您正在尝试加载的XML文档(此处为配置文件)格式不正确,更确切地说,缺少根节点。
每个XML文件必须有一个根元素/节点来封装所有其他元素。
您的文件应该像下面这样:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <sectionGroup name="userSettings" 
            type="System.Configuration.UserSettingsGroup, System,
            Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
        </sectionGroup>
    </configSections>
    <userSettings>
        <WindowsFormsApplication.Properties.Settings>
        </WindowsFormsApplication.Properties.Settings>
    </userSettings>
</configuration>

3
可能存在问题,但 <?xml ... ?> 不被称为根节点,它是一个处理指令。 <configuration> 才是根节点。 - H H

2
在控制台应用程序中,您应该在 < configSections/> 后分配 < startup/> 部分。

1
在我的情况下,connectionStrings节点被声明了两次。

1
我们的一个客户在尝试从C#项目进行FTP时遇到了“配置系统初始化失败”的错误。用户不是管理员。
我们的技术支持人员调查后发现,在非管理员帐户下使用ProcMon时,此进程使用的资源是.NET machine.config文件。 (c:\windows\microsoft.net\framework\v4.0.30319\config\machine.config)
我们的客户授予本地用户修改此配置文件的权限,问题立即得到解决。 (他们不允许用户成为管理员,因此这是必要的。)
所以,如果以上答案对您无效,也许这可以帮助您。

1
通常,“配置系统初始化失败”问题很可能是由于app.config中无效的XML结构引起的。当试图将代码从“测试用”配置文件移到服务app.config文件时,我偶尔会遇到这个问题。

0
我复制了user.config文件,将其放在资源下并备份了应用程序的默认值。如果user.config文件不在它应该在的位置,我通过创建此文件并输入内容来解决这个问题。
if (!File.Exists(ConfigurationManager.OpenExeConfiguration (ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath)) //user.config path
{

using (XmlWriter writer = XmlWriter.Create(ConfigurationManager.OpenExeConfiguration (ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath))  //configuration root is added
   {
     writer.WriteStartElement("configuration");                    
     writer.WriteEndElement();
     writer.Flush();
   }
File.WriteAllText(ConfigurationManager.OpenExeConfiguration (ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath, Properties.Resources.user);

Application.Restart(); //restart application
Environment.Exit(0);

}

0
今天我遇到了同样的问题。我试图编译一个Visual Studio解决方案,但无法成功。
问题在于配置文件中配置了XML命名空间。Visual Studio / MSBuild已经在应用程序配置中包含此命名空间多年,这使得这个错误有点奇怪。
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">

但是一旦删除了命名空间,Visual Studio / MSBuild 就再次运转良好。

<configuration>

0
在我的情况下,经过检查后,问题出现在 App.config 的最后一部分,其中一个 Log4Net 配置语句导致了错误。
删除 App.config 中的所有额外内容并开始调试。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <configSections>
      <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
        <section name="[Application Name].Settings.Client" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
      </sectionGroup>    
    </configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
  <applicationSettings>
  <[Application Name].Settings.Client>
    <setting name="IDClient" serializeAs="String">
    <value>6</value>
    </setting>
  </[Application Name].Settings.Client>
</applicationSettings>
</configuration>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接