名称“ ConfigurationManager”在当前上下文中不存在


468

我正在尝试connectionStrings从配置文件访问。代码是ASP.NET + C#。我已经添加System.Configuration了参考,也提到了使用。但是它仍然不接受大会。

我正在使用VSTS2008。您知道是什么原因吗?

另一个奇怪的事情是程序集名称显示为“ System.configuration”,小写的c不会显示其他系统程序集的名称。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;

namespace Utility
{
    public class CommonVariables
    {
        public static String ConnectionString
        {
            get { return ConfigurationManager.ConnectionStrings["EmployeeEntities"].ConnectionString; }
        }  
    }  
}

配置:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="qbankEntities" connectionString="metadata=res://*/qbankModel.csdl|res://*/qbankModel.ssdl|res://*/qbankModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=localhost;Initial Catalog=qbank;Persist Security Info=True;User ID=**;Password=****;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>

1
您可以添加一些代码吗?您不接受该程序集是什么意思?您是否收到特定的错误消息?
约书亚·贝尔登

Answers:


820

不仅需要使用命名空间 System.Configuration。你也将引用添加到组装 System.Configuration.dll,由

  1. 右键单击引用/依赖项
  2. 选择添加参考
  3. 查找并添加System.Configuration

这肯定可以工作。此外,NameValueCollection您还必须编写:

using System.Collections.Specialized;

1
+1感谢Kieran。您知道为什么当大多数其他程序集可以通过包含“ using”语句来简单地调用时必须这样做吗?
Dhaust'Sep

13
这是我的理解:可能是错误的。当您添加引用时,您要求将dll复制到编译/构建的bin文件夹中。在创建项目时,即在您进入文件->新项目时,会添加一些被视为核心的dll,以便此时设置引用。他们都必须经历相同的过程,只是有些工作要为您完成,而有些则必须手动完成。您可以通过删除对系统dll的引用并观察所有代码失败来进行测试。=)
Kieran

7
好。因此,我进行了一些研究,发现以上内容大部分都是正确的。但是,某些文件在运行时无需像在全局程序集兑现(GAC)中那样被写入bin文件夹,其中bin是本地程序集兑现。就像System.dll。
基兰

4
可以在“系统” dll中找到“ System.Configuration”命名空间,这就是为什么当Intellisense接受“使用System.Configuration”时可能会有些头疼的原因。但是除非项目引用了System.Configuration.dll,否则将找不到ConfigurationManager。
jaybro

99

在项目中,右键单击.NET选项卡中的“ 添加引用...”,找到System.Configuration组件名称,然后单击“确定”。

using System.Configuration告诉编译器/ IntelliSense在该名称空间中搜索您使用的任何类。否则,您System.Configuration.ConfigurationManager每次都必须使用全名()。但是,如果您不添加引用,则在任何地方都找不到该名称空间/类。

请注意,DLL可以具有任何名称空间,因此System.Configuration.dll,理论上该文件可以具有名称空间Some.Random.Name。为了清楚/一致,它们通常是相同的,但是也有例外。


40

确定..重新启动VSTS后,它可以工作。该链接为相同的问题提供了解决方案。希望我以前能看过。:)


16
七年多来了,这真是个遗憾,答案如此频繁。
恢复莫妮卡·塞利奥(Monica Cellio)

4
当确实不是答案时,没有什么比将您自己的答复标记为答案要好了。糟糕的模组无法编辑为正确的答案。杜德(Dude)标出了自己的分数答案
。...– ggiaquin16

1
@ ggiaquin16,如果您接受自己,您将得不到积分;)
JAD

@calios,或者如果您阅读了原始问题,则可以看到提问者已经在问题的第一个版本中将程序集添加到项目中。对于这种特定的VS版本和版本,必须重新启动IDE,否则该错误只会不断发生。 就是解决方案。这里给出的两个高度评价的答案与实际提出的问题从来没有关系,但是您不会想知道为什么有人会先不阅读就回答问题。(按照做事的目的,只是针对在这种情况下似乎非常有效的要点...)
ebyrob

24

System.Configuration为所有项目添加as引用将解决此问题。

  1. 转到Project->Add Reference

  2. 在出现的框中,单击All assemblies左侧列表中的列表选项卡。

  3. 在中央列表中,滚动到System.Configuration并确保选中该框。

  4. 单击“确定”进行申请,您现在可以访问该ConfigurationManager课程。



9

如果您收到许多警告(在我的情况下为64,在解决方案中!),例如

CS0618:“ ConfigurationSettings.AppSettings”已过时:“此方法已过时,已由System.Configuration!System.Configuration.ConfigurationManager.AppSettings替换”

因为您要升级较旧的项目,所以可以节省很多时间,如下所示:

  1. 添加System.Configuration作为对“ 参考”部分的参考
  2. 将以下两个using语句添加到每个class(.cs)文件的顶部:

    using System.Configuration; using ConfigurationSettings = System.Configuration.ConfigurationManager;

通过此更改,

ConfigurationSettings.AppSettings["mySetting"]

现在将引用正确的配置管理器,而不再是已弃用的配置管理器,并且所有CS0618警告将立即消失。

当然,请记住,这是一个快速的技巧。从长远来看,您应该考虑重构代码。


9

我已经为这个问题找到了更好的解决方案configurationmanager does not exist in the current context

要从中读取连接字符串,web.config我们需要使用ConfigurationManagerclass及其方法。如果要使用,则需要使用System.Configuration; 添加名称空间。

尽管使用了此命名空间,但是当您尝试使用ConfigurationManager该类时,系统会显示错误“当前上下文中不存在configurationmanager”。解决此问题的方法:

ConfigurationManager.ConnectionStrings["ConnectionSql"].ConnectionString; 

6

您确定添加了对.NET程序集的引用,而不是其他内容?我将删除您的引用,然后尝试重新添加它,确保您从Visual Studio引用对话框的.NET选项卡中进行选择-GAC中的最新版本应为2.0.0.0。


属性窗口中的程序集详细信息:名称:System.configuration路径:C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.configuration.dll版本:2.0.0.0运行时版本:v2.0.50727有什么可疑之处吗?谢谢!
Pencilslate

不,这完全符合预期。真的很奇怪-很抱歉,但是我以前从未见过。祝好运!
Dan Diplo

6
  1. 右键单击项目
  2. 选择管理器NuGet程序包
  3. 查找System.Configuration
  4. 通过Microsoft选择System.Configuration.ConfigurationManager
  5. 安装

现在你可以:

using System.Configuration;

4

为了进行健全性检查,请尝试创建一个新的Web应用程序项目,打开Default.aspx页面的后面代码。在Page_Load中添加一行以访问您的连接字符串。

默认情况下,应添加System.Configuration作为参考。您还应该已经在代码文件的顶部看到了using语句。

我的文件背后的代码现在看起来像这样,并且可以正常编译。

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

namespace WebApplication1
{
  public partial class _Default : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {
      string connString = ConfigurationManager.ConnectionStrings["MyConnectionStringName"].ConnectionString;
    }
  }
}

假设我的web.config中有一个连接字符串,其名称等于“ MyConnectionStringName”,如下所示...

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
    </configSections>
    <connectionStrings>
        <add name="MyConnectionStringName"
            connectionString="Data Source=.;Initial Catalog=MyDatabase;Integrated Security=True"
            providerName="System.Data.SqlClient" />
    </connectionStrings>
</configuration>

是的,我知道这很基本。但是,如果您没有更好的主意,有时可以帮助您检查一些您认为应该起作用的简单问题。




0

如果您错误地添加对另一个不相关项目的引用,也可能会出现此错误。检查是否适用于您。


0

要解决此问题,请转到解决方案资源管理器,右键单击引用,然后单击添加引用,然后选择.net并找到system.configuration,然后单击确定。


0

添加配置管理器文件以连接到数据库web.config

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.