Nama 'Pengelola Konfigurasi' tidak ada dalam konteks saat ini

468

Saya mencoba mengakses connectionStringsdari file konfigurasi. Kode ini adalah ASP.NET + C #. Saya telah menambahkan System.Configurationreferensi dan juga disebutkan dengan menggunakan. Tapi tetap saja tidak akan menerima majelis.

Saya menggunakan VSTS 2008. Ada ide apa yang bisa menjadi alasannya?

Hal aneh lainnya adalah nama rakitan ditampilkan sebagai "Konfigurasi Sistem", huruf kecil c yang bukan bagaimana nama ditampilkan untuk rakitan Sistem lainnya.

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; }
        }  
    }  
}

Konfigurasi:

<?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>
pensil
sumber
1
Bisakah Anda menambahkan beberapa kode? Apa yang Anda maksudkan dengan itu tidak akan menerima majelis? Apakah Anda mendapatkan pesan kesalahan tertentu?
Joshua Belden

Jawaban:

820

Tidak hanya perlu menggunakan namespace System.Configuration . Anda juga harus menambahkan referensi ke majelis System.Configuration.dll , dengan

  1. Klik kanan pada Referensi / Ketergantungan
  2. Pilih Tambahkan Referensi
  3. Temukan dan tambahkan System.Configuration.

Ini pasti akan berhasil. Juga untuk NameValueCollectionAnda harus menulis:

using System.Collections.Specialized;
Kieran
sumber
1
+1 Terima kasih Kieran. Apakah Anda tahu mengapa ini harus dilakukan ketika sebagian besar majelis lain hanya dapat dipanggil dengan memasukkan pernyataan 'menggunakan'?
Dhaust
13
Ini pemahaman saya: mungkin salah. Ketika Anda menambahkan referensi, Anda meminta dll untuk disalin ke folder bin pada kompilasi / build. Beberapa dll dilihat sebagai inti ditambahkan ketika proyek dibuat, yaitu ketika Anda pergi file-> proyek baru sehingga referensi diatur pada saat itu. Mereka semua harus melalui proses yang sama hanya saja beberapa dilakukan untuk Anda dan beberapa harus Anda lakukan secara manual. Anda dapat mengujinya dengan menghapus referensi ke dll Sistem Anda dan melihat semua kode Anda gagal. =)
Kieran
7
BAIK. Jadi saya telah melakukan sedikit riset lebih lanjut dan menemukan bahwa sebagian besar benar. Namun beberapa file tidak perlu ditulis ke folder bin saat dijalankan karena mereka berada di Global Assembly cashe (GAC), di mana bin adalah cashe assembly lokal. Seperti System.dll.
Kieran
4
Namespace 'System.Configuration' dapat ditemukan di dll 'System', itu sebabnya mungkin ada beberapa goresan kepala ketika Intellisense menerima 'using System.Configuration;' tetapi tidak akan menemukan ConfigurationManager kecuali System.Configuration.dll direferensikan oleh proyek.
jaybro
99

Di proyek Anda, klik kanan, Tambah Referensi ... , di tab .NET, cari System.Configurationnama komponen dan klik OK.

using System.Configurationmemberitahu kompiler / IntelliSense untuk mencari di namespace itu untuk setiap kelas yang Anda gunakan. Jika tidak, Anda harus menggunakan nama lengkap ( System.Configuration.ConfigurationManager) setiap kali. Tetapi jika Anda tidak menambahkan referensi, namespace / kelas itu tidak akan ditemukan di mana pun.

Perhatikan bahwa DLL dapat memiliki namespace apa pun, sehingga System.Configuration.dllsecara teori file tersebut dapat memiliki namespace Some.Random.Name. Untuk kejelasan / konsistensi mereka biasanya sama, tetapi ada pengecualian.

Rameez
sumber
40

Oke .. itu berhasil setelah restart VSTS. The Link menyarankan solusi untuk masalah yang sama. Seandainya aku bisa melihatnya sebelumnya. :)

pensil
sumber
16
Lebih dari 7 tahun kemudian dan masih memalukan seberapa sering ini jawabannya.
Pasang kembali Monica Cellio
4
tidak seperti menandai jawaban Anda sendiri sebagai jawabannya, padahal memang bukan jawabannya. Mod yang terlalu buruk tidak dapat mengeditnya untuk jawaban yang benar dan aktual. Bung menandai jawabannya sendiri untuk poin ....
ggiaquin16
1
@ ggiaquin16 Anda tidak mendapatkan poin jika Anda menerima diri Anda sendiri;)
JAD
@calios atau jika Anda membaca pertanyaan awal, Anda dapat melihat bahwa penanya telah menambahkan perakitan ke proyek dalam versi pertama dari pertanyaan tersebut. Untuk perakitan khusus ini dan versi VS, perlu me-restart IDE atau kesalahan hanya akan terus terjadi. bahwa adalah solusinya. Dua jawaban berperingkat tinggi di sini tidak pernah relevan dengan pertanyaan yang sebenarnya diajukan, tetapi Anda tidak berpikir untuk bertanya-tanya mengapa seseorang menjawab pertanyaan tanpa membacanya terlebih dahulu. (dalam rangka melakukan hal-hal hanya untuk poin yang tampaknya sangat efektif dalam kasus ini ...)
ebyrob
24

Menambahkan System.Configurationreferensi sebagai ke semua proyek akan menyelesaikan ini.

  1. Pergi ke Project->Add Reference

  2. Di kotak yang muncul, klik All assembliestab daftar di daftar sebelah kiri.

  3. Di daftar pusat, gulir ke System.Configurationdan pastikan kotak dicentang.

  4. Klik ok untuk mendaftar, dan sekarang Anda dapat mengakses ConfigurationManagerkelas.

kalios
sumber
19

Menambahkan jawaban ini, karena tidak ada solusi yang disarankan yang berfungsi untuk saya.

  1. Klik kanan pada tab referensi untuk menambahkan referensi.
  2. Klik pada tab Assemblies
  3. Cari 'System.Configuration'
  4. Klik OK.
Esther Lalremruati
sumber
9

Jika Anda mendapatkan banyak peringatan (dalam kasus saya 64 dalam solusi!) Suka

CS0618: 'ConfigurationSettings.AppSettings' usang: 'Metode ini sudah usang, telah digantikan oleh System.Configuration! System.Configuration.ConfigurationManager.AppSettings'

karena Anda meningkatkan proyek yang lebih lama, Anda dapat menghemat banyak waktu sebagai berikut:

  1. Tambahkan System.Configurationsebagai referensi ke bagian Referensi Anda .
  2. Tambahkan dua usingpernyataan berikut ke atas setiap .csfile class ( ):

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

Dengan perubahan ini semua kejadian dari

ConfigurationSettings.AppSettings["mySetting"]

sekarang akan merujuk manajer konfigurasi yang tepat, tidak lagi yang sudah usang, dan semua peringatan CS0618 akan segera hilang.

Tentu saja, ingat bahwa ini adalah peretasan cepat. Untuk jangka panjang, Anda harus mempertimbangkan untuk mengembalikan kode tersebut.

Mat
sumber
9

Saya mendapatkan solusi yang lebih baik untuk masalah ini configurationmanager does not exist in the current context.

Untuk membaca string koneksi dari web.configkita perlu menggunakan ConfigurationManagerkelas dan metodenya. Jika Anda ingin menggunakan, Anda perlu menambahkan namespace menggunakan System.Configuration;

Meskipun Anda menggunakan namespace ini, ketika Anda mencoba menggunakan ConfigurationManagerkelas maka sistem menunjukkan kesalahan "konfigurasi manajer tidak ada dalam konteks saat ini". Untuk mengatasi masalah ini:

ConfigurationManager.ConnectionStrings["ConnectionSql"].ConnectionString; 
Emu
sumber
6

Apakah Anda yakin telah menambahkan referensi ke rakitan .NET dan bukan yang lain? Saya akan menghapus referensi Anda dan kemudian mencoba menambahkannya kembali, memastikan Anda memilih dari tab .NET di dialog referensi Visual Studio - versi terbaru harus 2.0.0.0 di GAC.

Dan Diplo
sumber
Rincian perakitan dari jendela properti: Nama: System.configuration Path: C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.configuration.dll Versi: 2.0.0.0 Versi Runtime: v2.0.50727 Ada yang terlihat mencurigakan? Terima kasih!
pencilslate
Tidak, itu persis seperti yang diharapkan. Sungguh aneh - Maaf, tapi saya belum pernah melihat ini sebelumnya. Semoga berhasil!
Dan Diplo
6
  1. Klik kanan pada Project
  2. Pilih Paket Manajer NuGet
  3. Temukan System.Configuration
  4. Pilih System.Configuration.ConfigurationManager oleh Microsoft
  5. Install

sekarang kamu bisa:

using System.Configuration;
Samir Morimoto
sumber
4

Untuk pemeriksaan kewarasan, coba buat Proyek Aplikasi Web baru, buka kode di belakang untuk halaman Default.aspx. Tambahkan baris di Page_Load untuk mengakses string koneksi Anda.

Seharusnya System.Configuration ditambahkan sebagai referensi secara default. Anda juga harus sudah melihat pernyataan penggunaan di bagian atas file kode Anda.

Kode saya di belakang file sekarang terlihat seperti ini dan dikompilasi tanpa masalah.

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;
    }
  }
}

Ini mengasumsikan saya memiliki string koneksi di web.config saya dengan nama sama dengan "MyConnectionStringName" seperti begitu ...

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

Ya, itu dasar saya tahu. Tetapi jika Anda tidak memiliki ide yang lebih baik kadang-kadang ada baiknya memeriksa sesuatu yang sangat sederhana yang Anda tahu harus berhasil.

Nevada
sumber
3

Cukup instal

Install-Package System.Configuration.ConfigurationManager -Version 4.5.0

lalu gunakan

using System.Configuration;
Saad Lembarki
sumber
2

Jika kode ini pada proyek yang terpisah, seperti proyek perpustakaan. Jangan memalsukan untuk menambahkan referensi ke konfigurasi system.

Steve Rey
sumber
0

Anda juga bisa mendapatkan kesalahan ini jika Anda menambahkan referensi ke proyek yang berbeda dan tidak terkait karena kesalahan. Periksa apakah itu berlaku untuk Anda.

Ike
sumber
0

Untuk Mengatasi masalah ini, buka Solution Explorer Dan klik kanan referensi dan klik tambah referensi dan pilih .net dan temukan system.configuration pilih klik ok

Keshav Patel
sumber
0

Tambahkan file manajer konfigurasi untuk terhubung ke web.config database

shyamu
sumber