配置系统初始化失败。

257

我目前正在创建一个登录表单,有以下代码:

string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
try
{
    using (OdbcConnection connect = new OdbcConnection(connectionString))
    {
        connect.Open();
        OdbcCommand cmd = new OdbcCommand("SELECT username, password FROM receptionist", connect);
        OdbcDataReader reader = cmd.ExecuteReader();

        if (username_login.Text == username && password_login.Text == password)
        {
            this.Hide();
            MessageBox.Show("Invalid User", "Login Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            this.Close();
        }
        else 
            MessageBox.Show("Invalid User", "Login Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        connect.Close();
    }
}
catch (OdbcException ex)
{
    MessageBox.Show(ex.Message, "error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

但是每当我尝试输入用户名和密码时,就会出现一个名为“Configuration system failed to initialize”的错误。这是什么问题,我该如何解决?


请参见配置系统初始化失败异常 - The Scrum Meister
2
另一种场景 - 如果您正在查找ConfigurationManager.Appsettings [“”],请确保<appSettings>存在于配置中。否则,您将收到此异常。 - LCJ
1
如果您的appsettings有两个位置,也可能会发生这种情况。 - Lawrence Thurman
29个回答

3

.Net Core WinForms / WPF / .Net Standard Class Library 项目的简单解决方案

步骤1:通过 Nuget 管理器安装 System.Configuration.ConfigurationManager

步骤2:添加一个新的 App.Config 文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="Bodrum" value="Yalikavak" />    
  </appSettings>
</configuration>

步骤三:获取值

string value = ConfigurationManager.AppSettings.Get("Bodrum");
// value is Yalikavak

如果您从 类库 中调用它,则需要在主项目中添加 App.Config 文件。


是的,如果你希望这也适用于测试项目,请参考这个答案的结尾 https://dev59.com/tlcO5IYBdhLWcg3w7lvq#46482184。 - MikeBeaton

1
我通过使用以下代码解决了问题。
   <?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="YourProjectName.Properties.Settings"
               type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
               requirePermission="false" />

    </sectionGroup>

  </configSections>
  <appSettings>
    <add key="SPUserName" value="TestUser" />
    <add key="SPPassword" value="UserPWD" />
  </appSettings>
</configuration>

1

哇,我花了很长时间才弄清楚这个问题。出于某种原因,在 AssemblyInfo.cs 中更改属性 [assembly: AssemblyCompany("CompanyName")] 使此错误消失了。 我正在引用一个具有不同属性值的项目 [assembly: AssemblyCompany("CompanyName")]。我确保两个项目具有相同的属性值,然后它就运行得很好!


这是一个 bug 吗?你不应该期望让别人把公司名称与他们引用的第三方项目匹配。 - Denise Skidmore

1

我遇到了同样的问题,我通过从App.config中删除verion =“v3.5”来解决我的问题。

之前

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

  <startup>

 <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
 </startup>
 <supportedRuntime version="v3.5" />//Remove this
</configuration>

解决方案
<?xml version="1.0" encoding="utf-8"?>
<configuration>

  <startup>

    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
  </startup>
  </configuration>

这里是如何使用版本控制的方法:

MSDN支持运行时元素


0
如果您正在处理 Azure WebJob - 在升级到最新的 4.6.1 版本后,我必须删除以下内容。
  <compilation debug="true" targetFramework="4.6.1">
    <assemblies>
      <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
    </assemblies>
  </compilation>

希望这能有所帮助。

0

我也在获取

'System.Configuration.ConfigurationErrorsException' in System.Configuration.dll

如果你使用的是Windows系统,请检查斜杠/。我曾经和一个使用Linux系统的人一起工作,他把斜杠方向反了过来。

0
值得注意的是,如果您将连接字符串等内容添加到app.config中,并且在定义的配置部分之外添加了项目,则不会立即出现问题,但当您尝试访问它时,可能会出现上述错误。
折叠所有主要部分并确保没有项目超出定义的部分。显然,当您实际发现它时。

0

@Flash Gordon在评论中提到的那样,您需要在App.config文件中的<configSections>下定义任何自定义标签(作为部分)。例如,您正在使用SpecFlow工作于测试自动化项目并添加了<specFlow>标记,则最简单版本的App.config将如下所示: enter image description here


0

我重新启动了Visual Studio甚至整个电脑。 我清理了项目,重建并删除了bin文件。

直到我将配置从x64更改为x86,才有所帮助。 它在x86上运行,但当我改回来时,它也可以工作!


0

我已尝试上面的所有解决方案,试图找出为什么我的一个单元测试无法从完美的app.config文件中获取配置。

我有两个对同一程序集的引用,如下所示:

duplicate reference

project file before and after

删除黄色部分中的(重复)引用对我有用。

希望这对其他人有用,这个问题困扰了我一段时间。


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