ชื่อ '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
คุณสามารถเพิ่มรหัสได้ไหม คุณหมายถึงอะไรที่ไม่ยอมรับการประชุม? คุณได้รับข้อความแสดงข้อผิดพลาดเฉพาะหรือไม่
Joshua Belden

คำตอบ:


820

มันไม่เพียง แต่จำเป็นต้องใช้namespace System.Configurationคุณต้องเพิ่มการอ้างอิงไปยังแอสเซมบลี System.Configuration.dllโดย

  1. คลิกขวาที่การอ้างอิง / การอ้างอิง
  2. เลือกเพิ่มการอ้างอิง
  3. System.Configurationค้นหาและเพิ่ม

มันจะทำงานได้อย่างแน่นอน นอกจากนี้สำหรับNameValueCollectionคุณต้องเขียน:

using System.Collections.Specialized;

1
+1 ขอบคุณ Kieran คุณรู้หรือไม่ว่าทำไมต้องทำเช่นนี้เมื่อเรียกใช้งานแอสเซมบลีอื่น ๆ ส่วนใหญ่โดยรวมถึงคำสั่ง 'ใช้'?
Daily

13
นี่คือความเข้าใจของฉัน: มันอาจจะผิด เมื่อคุณเพิ่มการอ้างอิงที่คุณขอให้ dll ที่จะคัดลอกไปยังโฟลเดอร์ถังขยะในการรวบรวม / สร้าง dll บางตัวที่ถูกมองว่าเป็นแกนหลักจะถูกเพิ่มเมื่อโครงการถูกสร้างขึ้นเช่นเมื่อคุณไปที่ไฟล์ -> โครงการใหม่ดังนั้นการอ้างอิงจะถูกตั้งค่า ณ จุดนั้น พวกเขาทั้งหมดต้องผ่านกระบวนการเดียวกันเพียงบางอย่างทำเพื่อคุณและบางอย่างที่คุณต้องทำด้วยตนเอง คุณสามารถทดสอบได้โดยลบการอ้างอิงถึง System dll ของคุณและดูรหัสของคุณทั้งหมดล้มเหลว =)
Kieran

7
ตกลง. ดังนั้นฉันได้ทำการวิจัยเพิ่มเติมอีกเล็กน้อยและพบว่าข้างต้นเป็นจริงส่วนใหญ่ อย่างไรก็ตามไฟล์บางไฟล์ไม่จำเป็นต้องเขียนลงในโฟลเดอร์ bin เมื่อทำงานเนื่องจากอยู่ใน Global Assembly cashe (GAC) โดยที่ bin เป็นแคชแอสเซมบลีในพื้นที่ เช่น System.dll
Kieran

4
เนมสเปซ 'System.Configuration' สามารถพบได้ใน 'System' dll นั่นคือสาเหตุที่อาจมีการเกาหัวเมื่อ Intellisense ยอมรับ 'การใช้ System.Configuration;' แต่จะไม่พบ ConfigurationManager เว้นแต่ว่า System.Configuration.dll จะถูกอ้างอิงโดยโครงการ
jaybro

99

ในโครงการของคุณคลิกขวาเพิ่มการอ้างอิง ...ในแท็บ. NET ค้นหาSystem.Configurationชื่อคอมโพเนนต์และคลิกตกลง

using System.Configurationแจ้งให้คอมไพเลอร์ / IntelliSense ค้นหาในเนมสเปซนั้นสำหรับคลาสที่คุณใช้ มิฉะนั้นคุณจะต้องใช้ชื่อเต็ม ( System.Configuration.ConfigurationManager) ทุกครั้ง แต่ถ้าคุณไม่เพิ่มการอ้างอิงเนมสเปซ / คลาสนั้นจะไม่พบที่ใดก็ได้

โปรดทราบว่า DLL ที่สามารถมี namespace ใด ๆ เพื่อให้ไฟล์System.Configuration.dllสามารถในทางทฤษฎีมีการ Some.Random.Namenamespace เพื่อความชัดเจน / ความสอดคล้องพวกเขามักจะเหมือนกัน แต่มีข้อยกเว้น


40

ตกลง .. ใช้งานได้หลังจากรีสตาร์ท VSTS ลิงค์แนะนำทางออกสำหรับปัญหาเดียวกัน หวังว่าฉันจะได้เห็นมันมาก่อน :)


16
กว่า 7 ปีต่อมาและมันก็ยังเป็นที่น่าละอายที่คำตอบนี้บ่อยแค่ไหน
Reinstate Monica Cellio

4
ไม่มีอะไรที่เหมือนกับการทำเครื่องหมายคำตอบของคุณเองเป็นคำตอบเมื่อมันไม่ใช่คำตอบ การแก้ไขที่แย่เกินไปไม่สามารถแก้ไขได้สำหรับคำตอบที่ถูกต้อง Dude ทำเครื่องหมายคำตอบของเขาเองเพื่อหาคะแนน ....
ggiaquin16

1
@ ggiaquin16 คุณไม่ได้คะแนนถ้าคุณยอมรับด้วยตัวคุณเอง)
JAD

@calios หรือถ้าคุณอ่านคำถามต้นฉบับคุณจะเห็นว่าผู้ถามได้เพิ่มแอสเซมบลีในโครงการในเวอร์ชันแรกของคำถามแล้ว สำหรับชุดประกอบและรุ่น VS นี้โดยเฉพาะจำเป็นต้องรีสตาร์ท IDE หรือข้อผิดพลาดจะเกิดขึ้นต่อไป นั่นคือทางออก คำตอบที่ได้รับความนิยมสูงทั้งสองที่นี่ไม่เคยเกี่ยวข้องกับคำถามที่ถูกถามจริง แต่คุณไม่คิดว่าทำไมคนที่จะตอบคำถามโดยไม่อ่านก่อน (ในหลอดเลือดดำของการทำสิ่งต่าง ๆ เพียงเพื่อจุดที่ดูเหมือนจะมีประสิทธิภาพมากในกรณีนี้ ... )
5155

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 ไม่มีอยู่ในบริบทปัจจุบัน” เพื่อแก้ปัญหานี้:

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 อะไรที่น่าสงสัย? ขอบคุณ!
ดินสอ

ไม่นั่นเป็นไปตามที่คาดไว้ แปลกจริงๆ - ฉันขอโทษ แต่ฉันไม่เคยเห็นสิ่งนี้มาก่อน โชคดี!
Dan Diplo

6
  1. คลิกขวาที่โครงการ
  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

ในการแก้ปัญหานี้ให้ไปที่ Explorer โซลูชันและคลิกขวาอ้างอิงแล้วคลิกเพิ่มการอ้างอิงและเลือก. net และค้นหา system.configuration เลือกคลิกตกลง


0

เพิ่มไฟล์เครื่องมือจัดการการกำหนดค่าเพื่อเชื่อมต่อกับฐานข้อมูล web.config

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.