Имя «ConfigurationManager» не существует в текущем контексте


468

Я пытаюсь получить доступ connectionStringsиз файла конфигурации. Код является ASP.NET + C #. Я добавил System.Configurationв ссылку, а также упомянул с использованием. Но все равно он не примет сборку.

Я использую 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; }
        }  
    }  
}

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>

1
Можете ли вы добавить код? Что ты имеешь в виду под этим не будет принимать сборку? Вы получаете конкретное сообщение об ошибке?
Джошуа Белден

Ответы:


820

Не только необходимо использовать пространство имен System.Configuration . Вы также должны добавить ссылку на сборку System.Configuration.dll ,

  1. Щелкните правой кнопкой мыши по ссылкам / зависимостям
  2. Выберите Добавить ссылку
  3. Найти и добавить System.Configuration.

Это будет работать наверняка. Также для NameValueCollectionвы должны написать:

using System.Collections.Specialized;

1
+1 Спасибо, Киран. Знаете ли вы, почему это нужно делать, когда большинство других сборок можно просто вызвать, добавив оператор using?
Дауст

13
Это мое понимание: это может быть неправильно. Когда вы добавляете ссылку, вы просите, чтобы dll была скопирована в папку bin на compile / build. Некоторые dll, рассматриваемые как core, добавляются при создании проекта, т.е. когда вы идете file-> new project, поэтому ссылки устанавливаются в этот момент. Все они должны пройти один и тот же процесс, просто некоторые из них сделаны для вас, а некоторые - вручную. Вы можете проверить это, удалив ссылку на вашу системную dll и наблюдая, как весь ваш код проваливается. =)
Киран

7
ХОРОШО. Поэтому я провел еще немного исследований и обнаружил, что вышеизложенное в основном верно. Однако некоторые файлы не нужно записывать в папку bin при запуске, так как они находятся в кэш-памяти Global Assembly (GAC), где bin - это кэш локальной сборки. Как и System.dll.
Киран

4
Пространство имен 'System.Configuration' можно найти в dll 'System', поэтому могут возникнуть некоторые царапины, когда Intellisense принимает 'using System.Configuration;' но не найдет ConfigurationManager, если проект не ссылается на System.Configuration.dll.
Джейбро

99

В вашем проекте щелкните правой кнопкой мыши, Добавить ссылку ... , на вкладке .NET найдите System.Configurationимя компонента и нажмите ОК.

using System.Configurationговорит компилятору / IntelliSense искать в этом пространстве имен любые используемые вами классы. В противном случае вам придется System.Configuration.ConfigurationManagerкаждый раз использовать полное имя ( ). Но если вы не добавите ссылку, это пространство имен / класс нигде не будет найдено.

Обратите внимание, что DLL может иметь любое пространство имен, поэтому System.Configuration.dllтеоретически файл может иметь пространство имен Some.Random.Name. Для ясности / последовательности они обычно одинаковы, но есть исключения.


40

Хорошо .. это работало после перезапуска VSTS. Ссылка предложил решение одной и той же задачи. Хотел бы я видеть это раньше. :)


16
Спустя 7 лет и до сих пор обидно, как часто это ответ.
Восстановить Монику Челлио

4
нет ничего лучше, чем пометить свой ответ как ответ, когда это действительно не ответ. Слишком плохие моды не могут редактировать это для фактического правильного ответа. Чувак пометил свой ответ на баллы ....
ggiaquin16

1
@ ggiaquin16 ты не получишь очки, если
JAD

@calios или если вы прочитаете оригинальный вопрос, вы увидите, что спрашивающий уже добавил сборку в проект в первой версии вопроса. Для этой конкретной сборки и версии VS необходимо было перезапустить IDE, иначе ошибка просто продолжала бы происходить. это было решение. Два высоко оцененных ответа здесь никогда не имели отношения к фактически задаваемому вопросу, но вы не думаете, что кто-то ответит на вопрос, не прочитав его сначала. (в духе делания вещей только ради очков, которые в этом случае кажутся очень эффективными ...)
ebyrob

24

Добавление System.Configurationссылки на все проекты решит эту проблему.

  1. Перейти к Project->Add Reference

  2. В появившемся окне нажмите All assembliesвкладку списка в списке слева.

  3. В центральном списке выделите System.Configurationи убедитесь, что флажок установлен.

  4. Нажмите кнопку ОК, чтобы подать заявку, и теперь вы сможете получить доступ к ConfigurationManagerклассу.


19

Добавление этого ответа, так как ни одно из предложенных решений не работает для меня.

  1. Щелкните правой кнопкой мыши на вкладке ссылок, чтобы добавить ссылку.
  2. Нажмите на вкладку Сборки
  3. Поиск 'System.Configuration'
  4. Нажмите ОК.

9

Если вы получаете много предупреждений (в моем случае 64 в решении!), Как

CS0618: «ConfigurationSettings.AppSettings» устарел: «Этот метод устарел, его заменил System.Configuration! System.Configuration.ConfigurationManager.AppSettings»

потому что вы обновляете старый проект, вы можете сэкономить много времени следующим образом:

  1. Добавить System.Configurationв качестве ссылки на ваш раздел ссылок .
  2. Добавьте следующие два usingоператора в начало каждого .csфайла class ( ):

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

Этим изменяются все вхождения

ConfigurationSettings.AppSettings["mySetting"]

теперь будет ссылаться на правильного менеджера конфигурации, а не на устаревший, и все предупреждения CS0618 немедленно исчезнут.

Конечно, имейте в виду, что это быстрый взлом. В долгосрочной перспективе вы должны рассмотреть возможность рефакторинга кода.


9

Я получил лучшее решение для этой проблемы configurationmanager does not exist in the current context.

Для чтения строки соединения web.configнам нужно использовать ConfigurationManagerкласс и его метод. Если вы хотите использовать, вам нужно добавить пространство имен с помощью System.Configuration;

Хотя вы использовали это пространство имен, при попытке использовать ConfigurationManagerкласс система выдает ошибку «менеджер конфигурации не существует в текущем контексте». Для решения этой проблемы:

ConfigurationManager.ConnectionStrings["ConnectionSql"].ConnectionString; 

6

Вы уверены, что добавили ссылку на сборку .NET, а не что-то еще? Я бы удалил вашу ссылку, а затем попытался бы добавить ее снова, убедившись, что вы выбираете на вкладке .NET в справочном диалоге Visual Studio - последняя версия должна быть 2.0.0.0 в GAC.


Сведения о сборке из окна свойств: Имя: System.configuration Путь: C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.configuration.dll Версия: 2.0.0.0 Версия времени выполнения: v2.0.50727 Что-нибудь выглядит подозрительно? Спасибо!
Карандашный лист

Нет, это именно так, как и ожидалось. Как странно - извините, но я никогда не видел этого раньше. Удачи!
Дэн Диплом

6
  1. Щелкните правой кнопкой мыши на Project
  2. Выберите менеджер NuGet Package
  3. Найти System.Configuration
  4. Выберите System.Configuration.ConfigurationManager от Microsoft
  5. устанавливать

Теперь вы можете:

using System.Configuration;

4

Для проверки работоспособности попробуйте создать новый проект веб-приложения, откройте код для страницы 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>

Да, это элементарно, я знаю. Но если у вас нет идей получше, иногда это помогает проверить что-то действительно простое, что, как вы знаете, должно работать.


3

Просто установите

Install-Package System.Configuration.ConfigurationManager -Version 4.5.0

затем используйте

using System.Configuration;

2

Если этот код находится в отдельном проекте, как проект библиотеки. Не забывайте добавлять ссылку на system.configuration.


0

Вы также можете получить эту ошибку, если по ошибке добавите ссылку на другой, не связанный проект. Проверьте, относится ли это к вам.


0

Чтобы решить эту проблему, перейдите в Solution Explorer, щелкните правой кнопкой мыши ссылку, щелкните Добавить ссылку, выберите .net и найдите system.configuration, нажмите кнопку ОК.


0

Добавьте файл менеджера конфигурации для подключения к базе данных web.config

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.