Geçerli bağlamda 'ConfigurationManager' adı mevcut değil


468

connectionStringsYapılandırma dosyasından erişmeye çalışıyorum . Kod ASP.NET + C # şeklindedir. System.ConfigurationReferansa ekledim ve kullanarak da bahsettim. Ama yine de meclisi kabul etmiyordu.

VSTS 2008 kullanıyorum. Nedeni ne olabilir?

Bir diğer garip şey ise "System.configuration" olarak gösterilen derleme adı, diğer Sistem derlemeleri için adların görüntülenmediği küçük bir c harfidir.

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

Yapılandırma:

<?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
Biraz kod ekleyebilir misiniz? Bununla derken meclisi kabul etmezdi? Belirli bir hata mesajı alıyor musunuz?
Joshua Belden

Yanıtlar:


820

Yalnızca ad alanını kullanmak gerekli değildir System.Configuration. Ayrıca, derlemeye başvuruyu da eklemeniz gerekir System.Configuration.dll.

  1. Referanslar / Bağımlılıklar'a sağ tıklayın
  2. Referans Ekle'yi seçin
  3. Bulun ve ekleyin System.Configuration.

Bu kesinlikle işe yarayacaktır. Ayrıca NameValueCollectionyazmak için:

using System.Collections.Specialized;

1
+1 Teşekkürler Kieran. Diğer meclislerin çoğu 'using' ifadesini ekleyerek çağrılabilirken bunun neden yapılması gerektiğini biliyor musunuz?
Dhaust

13
Bu benim anlayışım: yanlış olabilir. Referans eklediğinizde, derleme / derleme bin klasörüne kopyalanacak dll istiyoruz. Bazı dll's çekirdek olarak görülen proje oluşturulduğunda, yani dosya-> yeni proje gittiğinizde referanslar o noktada ayarlanır eklenir. Hepsi aynı işlemden geçmeli, bazıları sizin için yapılırken bazıları el ile yapmalısınız. Sistem dll referansı silerek ve tüm kodunuzun başarısız izleyerek test edebilirsiniz. =)
Kieran

7
TAMAM. Bu yüzden biraz daha araştırma yaptım ve yukarıda çoğunlukla doğru olduğunu gördüm. Ancak bazı dosyaların, bin yerel birleştirme kasası olduğu Global Assembly kasasında (GAC) olduğu gibi çalıştırılan bin klasörüne yazılması gerekmez. System.dll gibi.
Kieran

4
'System.Configuration' ad alanı 'System' dll dosyasında bulunabilir, bu nedenle Intellisense 'System.Configuration'ı kullanarak' kabul ettiğinde bazı kafa çizikleri olabilir. ancak System.Configuration.dll proje tarafından başvurulmadıkça ConfigurationManager'ı bulamaz.
jaybro

99

Projenizde, .NET sekmesinde, Add Reference ... 'ı sağ tıklatın, System.Configurationbileşen adını bulun ve Tamam'ı tıklatın.

using System.Configurationderleyiciye / IntelliSense'e bu ad alanında kullandığınız sınıfları aramasını söyler. Aksi takdirde, System.Configuration.ConfigurationManagerher zaman tam adı ( ) kullanmanız gerekir . Ancak başvuruyu eklemezseniz, bu ad alanı / sınıf hiçbir yerde bulunmaz.

Bir DLL herhangi bir ad alanına sahip olabileceğini unutmayın, bu nedenle dosya System.Configuration.dllteorik olarak ad alanına sahip olabilir Some.Random.Name. Açıklık / tutarlılık için genellikle aynıdır, ancak istisnalar vardır.


40

Tamam .. VSTS yeniden başlatıldıktan sonra çalıştı. Bağlantı aynı sorun için bir çözüm önerdi. Keşke daha önce görmüş olabilir. :)


16
7 yıl sonra ve cevabın ne sıklıkta olduğu hala bir utanç.
Monica Cellio

4
cevap olmadığında kendi cevabınızı cevap olarak işaretlemek gibi bir şey yoktur. Çok kötü modlar gerçek doğru cevap için onu düzenleyemez. Dostum puan için kendi cevabını işaretledi ....
ggiaquin16

1
@ ggiaquin16 Eğer kendinizi kabul ederseniz puan alamazsınız;)
JAD

@calios veya orijinal soruyu okuduysanız, sorgulayıcının soruyu ilk sürümünde projeye zaten eklediğini görebilirsiniz. VS'nin bu özel montajı ve sürümü için IDE'yi yeniden başlatmak gerekiyordu veya hata devam ediyordu. bu çözelti oldu. Burada yüksek puan alan iki cevap hiçbir zaman sorulan soru ile ilgili değildi, ama birisinin bir soruyu neden önce okumadan neden cevaplayacağını merak etmiyorsunuz. (sadece bu durumda çok etkili görünen noktalar için bir şeyler yapmak için ...)
ebyrob

24

System.ConfigurationTüm projelere referans olarak eklenmesi bunu çözecektir.

  1. Git Project->Add Reference

  2. Görünen kutuda All assemblies, sol taraftaki listeden liste sekmesini tıklayın .

  3. Orta listeden, System.Configurationkutunun işaretli olduğundan emin olun.

  4. Başvurmak için Tamam'ı tıkladığınızda artık ConfigurationManagersınıfa erişebileceksiniz .


19

Önerilen çözümlerin hiçbiri benim için işe yaramadığından bu yanıtı eklemek.

  1. Referans eklemek için referanslar sekmesine sağ tıklayın.
  2. Montajlar sekmesini tıklayın
  3. 'System.Configuration' araması yapın
  4. Tamam'ı tıklayın.

9

Çok fazla uyarı alıyorsanız (benim durumumda bir çözümde 64!)

CS0618: 'ConfigurationSettings.AppSettings' geçersiz: 'Bu yöntem eski, System.Configuration! System.Configuration.ConfigurationManager.AppSettings ile değiştirildi'

daha eski bir projeyi yükselttiğiniz için aşağıdaki gibi çok zaman kazanabilirsiniz:

  1. Ekle System.Configurationsizin için bir referans olarak Başvurular bölümünde.
  2. usingHer class ( .cs) dosyasının üstüne aşağıdaki iki ifadeyi ekleyin :

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

Bu değişiklikle,

ConfigurationSettings.AppSettings["mySetting"]

artık doğru yapılandırma yöneticisine atıfta bulunacak, artık kullanımdan kaldırılmış olana başvurmayacak ve tüm CS0618 uyarıları hemen kaldırılacak.

Elbette, bunun hızlı bir saldırı olduğunu unutmayın. Uzun vadede, kodu yeniden düzenlemeyi düşünmelisiniz.


9

Sorun için daha iyi bir çözüm buldum configurationmanager does not exist in the current context .

Kaynak bir dize okumak web.configiçin ConfigurationManagersınıf ve yöntemini kullanmamız gerekir . Kullanmak istiyorsanız kullanarak ad alanı eklemeniz gerekirSystem.Configuration ;

Bu ad alanını kullansanız da, ConfigurationManagersınıfı kullanmaya çalıştığınızda sistem "geçerli bağlamda configurationmanager mevcut değil" hatası veriyor . Bu problemi çözmek için:

ConfigurationManager.ConnectionStrings["ConnectionSql"].ConnectionString; 

6

Başka bir şeye değil, .NET derlemesine bir başvuru eklediğinizden emin misiniz? Başvurunuzu kaldırır ve daha sonra Visual Studio başvuru iletişim kutusundaki .NET sekmesinden seçtiğinizden emin olarak yeniden eklemeyi denerim - en son sürüm GAC'de 2.0.0.0 olmalıdır.


Özellik penceresinden derleme ayrıntıları: Ad: System.configuration Yol: C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.configuration.dll Sürüm: 2.0.0.0 Çalışma Zamanı Sürümü: v2.0.50727 Bir şey şüpheli görünüyor mu? Teşekkürler!
pencilslate

Hayır, tam olarak beklendiği gibi. Ne kadar garip - üzgünüm, ama bunu daha önce hiç görmedim. İyi şanslar!
Dan Diplo

6
  1. Project'e sağ tıklayın
  2. Yönetici NuGet Paketini Seçin
  3. System.Configuration'ı bulun
  4. Microsoft tarafından System.Configuration.ConfigurationManager öğesini seçin
  5. Yüklemek

şimdi yapabilirsin:

using System.Configuration;

4

Sağlık kontrolü için yeni bir Web Uygulaması Projesi oluşturmayı deneyin, Default.aspx sayfasının arkasındaki kodu açın. Bağlantı dizenize erişmek için Page_Load öğesine bir satır ekleyin.

Varsayılan olarak başvuru olarak System.Configuration eklenmelidir. Ayrıca kod dosyanızın üst kısmında using ifadesini de görmelisiniz.

Dosyanın arkasındaki kod şimdi böyle görünüyor ve sorunsuz derliyor.

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

Bu benim web.config içinde "MyConnectionStringName" eşit bir ada sahip bir bağlantı dizesi olduğunu varsayar ...

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

Evet, biliyorum temel. Ancak daha iyi fikirleriniz yoksa, bazen çalışması gerektiğini bildiğiniz gerçekten basit bir şeyi kontrol etmenize yardımcı olur.


3

Sadece yükle

Install-Package System.Configuration.ConfigurationManager -Version 4.5.0

sonra kullan

using System.Configuration;

2

Bu kod, kütüphane projesi gibi ayrı bir projedeyse. System.configuration öğesine başvuru eklemek için sahte yapmayın.


0

Yanlışlıkla farklı, ilgisiz bir projeye başvuru eklerseniz bu hatayı alabilirsiniz. Bunun sizin için geçerli olup olmadığını kontrol edin.


0

Bu sorunu çözmek için Çözüm Gezgini'ne gidin ve referansı sağ tıklatıp başvuru ekle'yi tıklatıp .net'i seçin ve system.configuration'ı seçin bir Tamam'ı seçin Tamam


0

Web.config veritabanına bağlanmak için yapılandırma yöneticisi dosyasını ekleyin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.