Назва "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; }
        }  
    }  
}

Налаштування:

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

13
Це моє розуміння: воно може бути неправильним. Коли ви додаєте посилання, ви просите скопіювати dll у папку bin при компіляції / збірці. Деякі DLL, які розглядаються як ядра, додаються під час створення проекту, тобто коли ви переходите до файла-> новий проект, щоб посилання були встановлені в цьому пункті. Всі вони повинні пройти один і той же процес, лише те, що деякі зроблені для вас, а деякі - вручну. Ви можете перевірити це, видаливши посилання на ваш системний dll і спостерігаючи, як весь код не виходить. =)
Киеран

7
ДОБРЕ. Тож я провів трохи більше досліджень і виявив, що вище в основному так. Однак деякі файли не потрібно буде записувати в папку бін під час запуску, оскільки вони знаходяться в касі глобальної асамблеї (GAC), де бін - це касова локальна збірка. Як і System.dll.
Киеран

4
Простір імен 'System.Configuration' можна знайти в dll 'System', тому може виникнути певна подряпина в голові, коли Intellisense приймає 'за допомогою System.Configuration;' але не знайде ConfigurationManager, якщо проект не посилається на System.Configuration.dll.
jaybro

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.


Деталі складання у вікні властивості: Ім'я: Шлях конфігурації системи.C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.configuration.dll Версія: 2.0.0.0 Версія виконання: v2.0.50727 Що-небудь виглядає підозрілим? Дякую!
олівцем

Ні, це точно так, як очікувалося. Як насправді дивно - пробачте, але я ніколи цього не бачив. Удачі!
Dan Diplo

6
  1. Клацніть правою кнопкою миші на Project
  2. Виберіть Менеджер пакунків NuGet
  3. Знайдіть System.Configuration
  4. Виберіть System.Configuration.ConfigurationManager від Microsoft
  5. Встановити

тепер ти можеш:

using System.Configuration;

4

Для перевірки обґрунтованості спробуйте створити новий проект веб-додатків, відкрийте код позаду сторінки Default.aspx. Додайте рядок у Page_Load, щоб отримати доступ до рядка з'єднання.

За замовчуванням має бути додано System.Configuration як посилання. Ви також повинні бачити використовувальний оператор у верхній частині файла коду.

Мій код за файлом зараз виглядає так і збирається без проблем.

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

Щоб вирішити цю проблему, перейдіть до Провідника рішень та клацніть правою кнопкою миші та натисніть кнопку Додати посилання та вибрав.


0

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.