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

388

Я пытаюсь получить доступ к connectionStrings из файла конфигурации. Код - это ASP.NET + С#. Я добавил 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
    Можете ли вы добавить код? Что вы подразумеваете под этим не будет принимать сборку? Вы получаете конкретное сообщение об ошибке?
Теги:
visual-studio
visual-studio-2008

11 ответов

33
Лучший ответ

Хорошо, он работал после перезапуска VSTS. Ссылка

  • 13
    Спустя 7 лет и до сих пор обидно, как часто это ответ.
  • 4
    нет ничего лучше, чем пометить свой ответ как ответ, когда это действительно не ответ. Слишком плохие моды не могут редактировать это для фактического правильного ответа. Чувак пометил свой ответ за баллы ....
Показать ещё 2 комментария
748

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

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

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

using System.Collections.Specialized;
  • 0
    +1 Спасибо, Киран. Знаете ли вы, почему это нужно делать, когда большинство других сборок можно просто вызвать, добавив оператор using?
  • 11
    Это мое понимание: это может быть неправильно. Когда вы добавляете ссылку, вы просите, чтобы dll была скопирована в папку bin в compile / build. Некоторые dll, рассматриваемые как core, добавляются при создании проекта, т.е. когда вы идете file-> new project, поэтому ссылки устанавливаются в этот момент. Все они должны пройти один и тот же процесс, просто некоторые из них сделаны для вас, а некоторые - вручную. Вы можете проверить это, удалив ссылку на вашу системную dll и наблюдая, как весь ваш код проваливается. знак равно
Показать ещё 3 комментария
86

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

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

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

15

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

  • Щелкните правой кнопкой мыши по ссылке, чтобы добавить ссылку.
  • Перейдите на вкладку Ассемблирование
  • Поиск 'System.Configuration'
  • Нажмите "ОК".
9

Я получил лучшее решение для выпуска configurationmanager does not exist in the current context.

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

Хотя вы использовали это пространство имен, когда вы пытаетесь использовать класс ConfigurationManager, тогда система показывает ошибку "Configurationmanager не существует в текущем контексте". Чтобы решить эту проблему:

ConfigurationManager.ConnectionStrings["ConnectionSql"].ConnectionString; 
8

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

CS0618: "ConfigurationSettings.AppSettings" устарел: "Этот метод устарел, он был заменен на System.Configuration! System.Configuration.ConfigurationManager.AppSettings"

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

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

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

В результате этого изменения все события

ConfigurationSettings.AppSettings["mySetting"]

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

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

6

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

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

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

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

1

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

0

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

0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню