ChatGPT解决这个技术问题 Extra ChatGPT

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

我正在尝试从配置文件访问 connectionStrings。代码是 ASP.NET + C#。我已将 System.Configuration 添加到引用中,并且还提到了 using。但它仍然不接受大会。

我正在使用 VSTS 2008。知道可能是什么原因吗?

另一个奇怪的事情是显示为“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>
你能添加一些代码吗?你说它不接受大会是什么意思?您是否收到特定的错误消息?

K
Kieran

不仅需要使用 命名空间 System.Configuration。您还必须添加对 assembly System.Configuration.dll 的引用,方法是

右键单击 References / Dependencies 选择 Add Reference Find 并添加 System.Configuration。

这肯定会奏效。同样对于 NameValueCollection,您必须编写:

using System.Collections.Specialized;

+1 谢谢基兰。当大多数其他程序集可以通过包含“使用”语句来简单地调用时,您知道为什么必须这样做吗?
这是我的理解:它可能是错误的。添加引用时,您要求将 dll 复制到编译/构建时的 bin 文件夹中。创建项目时添加一些被视为核心的dll,即当您进入文件->新项目时,因此在该点设置了引用。它们都必须经过相同的过程,只是有些是为您完成的,有些是您必须手动完成的。您可以通过删除对系统 dll 的引用并观察所有代码失败来测试它。 =)
好的。所以我做了更多的研究,发现上面大部分都是真的。但是,某些文件不需要在运行时写入 bin 文件夹,因为它们位于 Global Assembly Cashe (GAC) 中,其中 bin 是本地程序集 Cashe。就像 System.dll 一样。
'System.Configuration' 命名空间可以在 'System' dll 中找到,这就是为什么当 Intellisense 接受 'using System.Configuration;' 时可能会有些头疼的原因但除非项目引用 System.Configuration.dll,否则不会找到 ConfigurationManager。
为什么我不知道的默认项目模板中没有添加 System.Configuration 作为参考?是否很少有人使用配置文件,以至于您决定需要手动添加引用以阻止潜在的不必要的引用膨胀?我只是觉得很烦人,每个项目,“添加参考”。
D
David Ferenczy Rogožan

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

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

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


p
pencilslate

好的..重新启动VSTS后它工作了。 link 针对同一问题提出了解决方案。希望我以前能看到它。 :)


7 年多过去了,仍然很遗憾这是答案的频率。
当它确实不是答案时,没有什么比将您自己的回复标记为答案。太糟糕的模组无法编辑它以获得实际的正确答案。哥们用自己的答案标记了分数....
@ggiaquin16 如果你接受自己,你就不会得到积分;)
@calios 或者如果您阅读原始问题,您可以看到提问者已经在问题的第一个版本中将程序集添加到项目中。对于这个特定的程序集和 VS 版本,必须重新启动 IDE,否则错误将继续发生。这就是解决方案。这里的两个高度评价的答案与实际提出的问题无关,但你不会想知道为什么有人会在没有先阅读问题的情况下回答问题。 (本着只为在这种情况下看起来非常有效的点做事......)
W
WonderWorker

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

转到 Project -> Add Reference 在出现的框中,单击左侧列表中的所有程序集列表选项卡。在中央列表中,滚动到 System.Configuration 并确保选中该框。单击确定应用,您现在将能够访问 ConfigurationManager 类。


为什么不使用 Nuget 寿?因为您可能已经在使用 Nuget 来管理依赖项。
别忘了using System.Configuration;
E
Esther Lalremruati

添加此答案,因为建议的解决方案都不适合我。

右键单击引用选项卡以添加引用。单击“程序集”选项卡搜索“System.Configuration”单击“确定”。


S
Saad Lembarki

只需安装

Install-Package System.Configuration.ConfigurationManager -Version 4.5.0

然后使用

using System.Configuration;

对于 dotnet 核心,我必须运行 dotnet add package System.Configuration.ConfigurationManager 才能使其正常工作。
S
Stephen Rauch

右键单击项目选择管理器 NuGet 包查找 System.Configuration 选择 Microsoft Install 的 System.Configuration.ConfigurationManager

现在你可以:

using System.Configuration;

M
Matt

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

CS0618:“ConfigurationSettings.AppSettings”已过时:“此方法已过时,已被 System.Configuration!System.Configuration.ConfigurationManager.AppSettings 取代”

因为您正在升级旧项目,所以可以节省大量时间,如下所示:

添加 System.Configuration 作为参考部分的参考。将以下两个 using 语句添加到每个类 (.cs) 文件的顶部: using System.Configuration;使用 ConfigurationSettings = System.Configuration.ConfigurationManager;

通过这种变化,所有的发生

ConfigurationSettings.AppSettings["mySetting"]

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

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


J
Josh Gallagher

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

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

尽管您使用了此命名空间,但当您尝试使用 ConfigurationManager 类时,系统会显示错误“当前上下文中不存在配置管理器”。要解决这个问题:

ConfigurationManager.ConnectionStrings["ConnectionSql"].ConnectionString; 

D
Dan Diplo

您确定您添加了对 .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 有什么可疑之处吗?谢谢!
不,这完全符合预期。真奇怪-对不起,我以前从未见过。祝你好运!
N
Nevada

要进行完整性检查,请尝试创建一个新的 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>

是的,我知道这是初级的。但是,如果你没有更好的想法,有时它有助于检查一些你知道应该工作的非常简单的东西。


M
Mohith Maratt

对于 Visual Studio 2019

右键单击项目并转到管理 NuGet 包。

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

搜索 System.Configuraion 并安装 System.Configuration.ConfigurationManager

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

现在在您的代码中,配置管理器将被识别。

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


S
Steve Rey

如果此代码位于单独的项目中,例如库项目。不要忘记添加对 system.configuration 的引用。


P
Peter O.

如果您错误地添加了对不同的、不相关的项目的引用,您也可能会收到此错误。检查这是否适用于您。


K
Keshav Patel

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


s
shyamu

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


J
James Hirschorn

在 NetCore 3.1 中,我不得不改用 Microsoft.Extensions.Configuration

    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

Web 配置的配置管理器 (web.config) 已过时。所以看看这个https://docs.microsoft.com/en-us/dotnet/api/system.configuration.configurationmanager.appsettings?redirectedfrom=MSDN&view=dotnet-plat-ext-3.1#System_Configuration_ConfigurationManager_AppSettings

创建设置实例

var appSettings = ConfigurationManager.AppSettings;