「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への参照を削除し、すべてのコードが失敗するのを監視することで、テストできます。=)
キーラン2010

7
OK。ですから、もう少し調査を行ったところ、上記がほとんど真実であることがわかりました。ただし、一部のファイルはグローバルアセンブリキャッシュ(GAC)にあるため、実行時にbinフォルダーに書き込む必要はありません。ここで、binはローカルアセンブリキャッシュです。System.dllのように。
Kieran、

4
'System.Configuration'名前空間は 'System' dllにあります。これが、Intellisenseが 'using System.Configuration;'を受け入れるときに頭を引っかくことがある理由です。System.Configuration.dllがプロジェクトによって参照されていない限り、ConfigurationManagerは見つかりません。
jaybro 2016

99

プロジェクトで、右クリックして[ 参照の追加... ]を選択し、.NETタブでSystem.Configurationコンポーネント名を見つけて[OK]をクリックします。

using System.Configurationコンパイラ/ IntelliSenseに、その名前空間で使用するクラスを検索するように指示します。それ以外の場合は、System.Configuration.ConfigurationManager毎回フルネーム()を使用する必要があります。ただし、参照を追加しない場合、その名前空間/クラスはどこにも見つかりません。

DLLは任意の名前空間を持つことができるので、ファイルSystem.Configuration.dllは理論的には名前空間を持つことができることに注意してくださいSome.Random.Name。明快さ/一貫性のために、それらは通常同じですが、例外があります。


40

わかりました。VSTSを再起動した後に機能しました。リンクは、同じ問題の解決策を提案しました。以前見たことがあったらいいのに。:)


16
7年以上が経過した今でも、これが答えである頻度は残念です。
Monica Cellio 2016

4
それが本当に答えではないとき、自分の答えを答えとしてマークするのと同じです。あまりにも悪いmodは実際の正しい答えのためにそれを編集することはできません。デュードは自分のポイントの答えをマークしました...
ggiaquin16

1
@ ggiaquin16自分を受け入れてもポイントは獲得できません;)
JAD

@caliosまたは、元の質問を読んだ場合、質問者が質問の最初のバージョンでプロジェクトに既にアセンブリを追加していたことがわかります。この特定のアセンブリとバージョンのVSでは、IDEを再起動する必要がありました。そうしないと、エラーが発生し続けるだけです。 それが解決策でした。ここで評価の高い2つの回答は、実際に尋ねられる質問に関連することはありませんが、なぜ誰かが最初に質問を読まずに質問に回答するのか疑問に思わないでしょう。(この場合に非常に効果的と思われるポイントだけのために物事を実行するという
流れで

24

System.Configurationすべてのプロジェクトへの参照としてを追加すると、これを解決できます。

  1. 移動Project->Add Reference

  2. 表示されるボックスAll assembliesで、左側のリストにあるリストタブをクリックします。

  3. 中央のリストでスクロールしSystem.Configurationて、ボックスがオンになっていることを確認します。

  4. [OK]をクリックして適用すると、ConfigurationManagerクラスにアクセスできるようになります。


19

提案された解決策のどれも私にとってうまくいかないので、この答えを追加します。

  1. 参照を追加するには、[参照]タブを右クリックします。
  2. アセンブリタブをクリックします
  3. 「System.Configuration」を検索します
  4. OKをクリックします。

9

あなたがたくさんの警告を受け取っているなら(私の場合、解決策では64です!)

CS0618: 'ConfigurationSettings.AppSettings' is obsolete: 'このメソッドは廃止され、System.Configuration!System.Configuration.ConfigurationManager.AppSettings'に置き換えられました

古いプロジェクトをアップグレードしているため、次のように時間を大幅に節約できます。

  1. 参照セクションにSystem.Configuration参照として追加します。
  2. using各クラス(.cs)ファイルの先頭に次の2つのステートメントを追加します。

    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アセンブリへの参照を追加しただけで、他には追加していませんか?参照を削除してから再度追加して、Visual Studioの参照ダイアログの[.NET]タブから選択していることを確認します。GACでは最新バージョンが2.0.0.0である必要があります。


プロパティウィンドウからのアセンブリの詳細:名前:System.configurationパス:C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.configuration.dllバージョン:2.0.0.0ランタイムバージョン:v2.0.50727疑わしいものがありますか?ありがとう!
鉛筆版2009

いいえ、そのとおりです。本当に奇妙です-すみませんが、これまでに見たことはありません。幸運を!
Dan Diplo、

6
  1. プロジェクトを右クリック
  2. 選択マネージャーNuGetパッケージ
  3. System.Configurationを見つける
  4. MicrosoftによるSystem.Configuration.ConfigurationManagerを選択します。
  5. インストール

今することができます:

using System.Configuration;

4

健全性チェックのために、新しいWebアプリケーションプロジェクトを作成して、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>

ええ、それは私が知っている初歩です。しかし、より良いアイデアがない場合は、動作するはずであることがわかっている非常に単純なものに対してチェックすることが時々役立ちます。


3

インストールするだけ

Install-Package System.Configuration.ConfigurationManager -Version 4.5.0

次に使用します

using System.Configuration;

2

このコードがライブラリプロジェクトのような別のプロジェクトにある場合。system.configurationへの参照を追加することを忘れないでください。


0

誤って別の無関係なプロジェクトへの参照を追加した場合にも、このエラーが発生することがあります。それがあなたに当てはまるかどうか確認してください。


0

この問題を解決するには、ソリューションエクスプローラーに移動し、[参照]を右クリックして[参照の追加]をクリックし、.netを選択してsystem.configurationを見つけ、[OK]をクリックします。


0

データベースweb.configに接続するための構成マネージャーファイルを追加します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.