ChatGPT解决这个技术问题 Extra ChatGPT

The name 'ConfigurationManager' does not exist in the current context

I am trying to access connectionStrings from the config file. The code is ASP.NET + C#. I have added System.Configuration to reference and also mentioned with using. But still it wouldn't accept the assembly.

I am using VSTS 2008. Any idea what could be the reason?

Another weird thing is the assembly name shown as "System.configuration", a lower case c which is not how names are displayed for other System assemblies.

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; }
        }  
    }  
}

Config:

<?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>
Can you add some code? What do you mean by it wouldn't accept the assembly? Are you getting a specific error message?

K
Kieran

It's not only necessary to use the namespace System.Configuration. You have also to add the reference to the assembly System.Configuration.dll , by

Right-click on the References / Dependencies Choose Add Reference Find and add System.Configuration.

This will work for sure. Also for the NameValueCollection you have to write:

using System.Collections.Specialized;

+1 Thanks Kieran. Do you know why this has to be done when most other assemblies can simply be called by including the 'using' statement?
This is my understanding: it may be wrong. When you add the reference you are asking the dll to be copied to the bin folder on compile/ build. Some dll's seen as core are added when the project is created, ie when you go file->new project so the references are set up at that point. They all have to go through the same process just that some are done for you and some you have to do manually. You could test it out by deleting the reference to your System dll and watching all your code fail. =)
OK. So I have done a little more research and found that above is mostly true. However some of the files will not need to be written to the bin folder on run as they are in the Global Assembly cashe (GAC), where bin is local assembly cashe. Like the System.dll.
The 'System.Configuration' namespace can be found in 'System' dll, that's why there may be some head scratching when Intellisense accepts the 'using System.Configuration;' but will not find ConfigurationManager unless the System.Configuration.dll is referenced by the project.
Why System.Configuration is not added as a reference in the default project template I don't know? Do so few people use the configuration file that it was decided you needed to add the reference manually to stop potential unnecessary reference bloat? I just find it very annoying, every project, "Add Reference".
D
David Ferenczy Rogožan

In your project, right-click, Add Reference..., in the .NET tab, find the System.Configuration component name and click OK.

using System.Configuration tells the compiler/IntelliSense to search in that namespace for any classes you use. Otherwise, you would have to use the full name (System.Configuration.ConfigurationManager) every time. But if you don't add the reference, that namespace/class will not be found anywhere.

Note that a DLL can have any namespace, so the file System.Configuration.dll could, in theory, have the namespace Some.Random.Name. For clarity/consistency they're usually the same, but there are exceptions.


p
pencilslate

Ok.. it worked after restarting the VSTS. The link suggested the solution for the same problem. Wish i could have seen it before. :)


Over 7 years later and it's still a shame how often this is the answer.
nothing like marking your own reply as the answer, when it is indeed not the answer. Too bad mods can't edit it for the actual correct answer. Dude marked his own answer for points....
@ggiaquin16 you don't get the points if you accept yourself ;)
@calios or if you read the original question you can see that the questioner had already added the assembly to the project in the first version of the question. For this particular assembly and version of VS it was necessary to restart the IDE or the error would just keep happening. that was the solution. The two highly rated answers here were never relevant to the question actually being asked, but you don't think to wonder why someone would answer a question without reading it first. (in the vein of doing things just for points that does seem very effective in this case...)
W
WonderWorker

Adding the System.Configuration as reference to all the projects will solve this.

Go to Project -> Add Reference In the box that appears, click the All assemblies list tab in the left hand list. In the central list, scroll to System.Configuration and make sure the box is checked. Click ok to apply, and you'll now be able to access the ConfigurationManager class.


why not use Nuget tho? Since you're likely already using Nuget to manage dependencies.
dont forgot using System.Configuration;
E
Esther Lalremruati

Adding this answer, as none of the suggested solutions works for me.

Right-click on references tab to add reference. Click on Assemblies tab Search for 'System.Configuration' Click OK.


S
Saad Lembarki

Just install

Install-Package System.Configuration.ConfigurationManager -Version 4.5.0

then use

using System.Configuration;

For dotnet core I had to run dotnet add package System.Configuration.ConfigurationManager in order to get this working.
S
Stephen Rauch

Right-click on Project Select Manager NuGet Package Find System.Configuration Select System.Configuration.ConfigurationManager by Microsoft Install

now you can:

using System.Configuration;

M
Matt

If you're getting a lot of warnings (in my case 64 in a solution!) like

CS0618: 'ConfigurationSettings.AppSettings' is obsolete: 'This method is obsolete, it has been replaced by System.Configuration!System.Configuration.ConfigurationManager.AppSettings'

because you're upgrading an older project you can save a lot of time as follows:

Add System.Configuration as a reference to your References section. Add the following two using statements to the top of each class (.cs) file: using System.Configuration; using ConfigurationSettings = System.Configuration.ConfigurationManager;

By this change all occurances of

ConfigurationSettings.AppSettings["mySetting"]

will now reference the right configuration manager, no longer the deprecated one, and all the CS0618 warnings will go away immediately.

Of course, keep in mind that this is a quick hack. On the long term, you should consider refactoring the code.


J
Josh Gallagher

I have gotten a better solution for the issue configurationmanager does not exist in the current context.

To a read connection string from web.config we need to use ConfigurationManager class and its method. If you want to use you need to add namespace using System.Configuration;

Though you used this namespace, when you try to use the ConfigurationManager class then the system shows an error “configurationmanager does not exist in the current context”. To solve this Problem:

ConfigurationManager.ConnectionStrings["ConnectionSql"].ConnectionString; 

D
Dan Diplo

Are you sure you have added a reference to the .NET assembly and not something else? I'd remove your reference and then try re-adding it, making sure you select from the .NET tab in Visual Studio reference dialogue - the latest version should be 2.0.0.0 in GAC.


Assembly details from property window: Name: System.configuration Path: C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.configuration.dll Version: 2.0.0.0 Runtime Version: v2.0.50727 Anything looks suspicious? Thanks!
No, that is exactly as expected. How really strange - I'm sorry, but I've never seen this before. Good luck!
N
Nevada

For a sanity check, try creating a new Web Application Project, open the code behind for the Default.aspx page. Add a line in Page_Load to access your connection string.

It should have System.Configuration added as reference by default. You should also see the using statement at the top of your code file already.

My code behind file now looks like this and compiles with no problems.

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;
    }
  }
}

This assumes I have a connection string in my web.config with a name equal to "MyConnectionStringName" like so...

<?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>

Yeah, it's elementary I know. But if you don't have any better ideas sometimes it helps to check against something really simple that you know should work.


M
Mohith Maratt

For Visual Studio 2019

Right click on project and go to Manage NuGet Packages.

https://i.stack.imgur.com/diaZb.png

Search for System.Configuraion and install System.Configuration.ConfigurationManager

https://i.stack.imgur.com/xUCAl.png

Now in your code, configuration manager will be recognized.

https://i.stack.imgur.com/4naPz.png


S
Steve Rey

If this code is on a separate project, like a library project. Don't forgeet to add reference to system.configuration.


P
Peter O.

You may also get this error if you add a reference to a different, unrelated project by mistake. Check if that applies to you.


K
Keshav Patel

To Solve this problem go to Solution Explorer And right click reference and click add reference and chose .net and find system.configuration select an click ok


s
shyamu

Add the configuration manager file to connect to the database web.config


J
James Hirschorn

In NetCore 3.1 I had to use Microsoft.Extensions.Configuration instead:

    public static async Task Main(string[] args)
    {
        var configuration = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile(path: "appsettings.json", optional: false, reloadOnChange: true)
            .Build();

...


F
Franz

The configuration manager of web configuration (web.config) is obsolete. So see this https://docs.microsoft.com/en-us/dotnet/api/system.configuration.configurationmanager.appsettings?redirectedfrom=MSDN&view=dotnet-plat-ext-3.1#System_Configuration_ConfigurationManager_AppSettings

create a instance of settings

var appSettings = ConfigurationManager.AppSettings;