2009-08-13 34 views
363

設定ファイルからconnectionStringsにアクセスしようとしています。コードはASP.NET + C#です。私はSystem.Configurationを参照に追加して使用しても述べました。しかしそれでもアセンブリを受け入れないだろう。名前 'ConfigurationManager'が現在のコンテキストに存在しません

私は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

コードを追加できますか?それがアセンブリを受け入れないということは何を意味しますか?特定のエラーメッセージが表示されますか?プロパティウィンドウから –

答えて

29

これはVSTSの再起動後に機能しました。 linkは同じ問題の解決法を提案していました。私が以前にそれを見てもらいたいと願っています。 :)

+9

7年以上経っており、これは答えがどれくらいの頻度で残っているかは残念です。 – Archer

+3

それは本当に答えではないときに答えとして自分の返信をマークするようなものはありません。あまりにも悪いMODは実際の正解に対して編集できません。デュードはポイントのために自分の答えをマーク.... – ggiaquin16

6

は、あなたは.NETアセンブリではなく、何か他のものへの参照を追加しましたか?私はあなたの参照を削除し、それを再追加しようとすると、Visual Studioの参照ダイアログで.NETタブから選択することを確認 - 最新バージョンは2.0.0.0 GACにする必要があります。健全性チェックのために

+0

アセンブリの詳細: 名前:System.configuration パス:C:\ WINDOWS \ Microsoft.NET \ Frameworkの\ v2.0.50727の\ System.configuration.dll バージョン:2.0.0.0 ランタイムバージョン:v2.0.50727の 何か疑わしいと思われますか?ありがとう! – pencilslate

+0

いいえ、それはまさに予想通りです。どのように本当に奇妙な - 私は申し訳ありませんが、私は以前これを見たことがない。がんばろう! –

3

、新しい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; 
    } 
    } 
} 

これは私がそうのような「MyConnectionStringName」に等しい名前を持つ私のweb.configファイル内の接続文字列を持っていると仮定し...

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

ええ、それは私が知っている小学校です。しかし、あなたが良いアイデアを持っていない場合は、時には本当にシンプルなものをチェックして、うまくいくはずです。

663

名前空間System.Configurationを使用するだけでなく、また、アセンブリへの参照をSystem.Configuration.dllに追加するには、参照タブを右クリックし、参照の追加を選択してからSystem.Configurationを探します。これは確実に機能します。私は問題configurationmanager does not exist in the current contextのためのよりよい解決策を得ている

using System.Collections.Specialized; 
+0

+1ありがとうKieran。 'using'ステートメントを含めることで、他のほとんどのアセンブリを単に呼び出すことができるときに、なぜこれを行う必要があるのか​​知っていますか? – Dhaust

+10

これは私の理解です。間違っている可能性があります。参照を追加すると、コンパイル/ビルドのbinフォルダにdllをコピーするように求められます。いくつかのdllは、プロジェクトが作成されたときに追加されます。つまり、ファイル→新規プロジェクトに移動したときに参照がその時点で設定されます。彼らはすべて同じプロセスを経なければなりません。ちょうどあなたのためにいくつか行われ、手作業でやる必要があるものです。 System dllへの参照を削除し、すべてのコードが失敗するのを見てテストすることができます。 =) – Kieran

+6

OK。だから私はもう少し研究をして、上記がほとんど真実であることを発見しました。しかし、ファイルのいくつかはbinがローカルアセンブリcasheであるグローバルアセンブリcashe(GAC)にあるように実行時にbinフォルダに書き込む必要はありません。 System.dllのように。 – Kieran

9

: もNameValueCollectionのためにあなたが書く必要があります。私たちはConfigurationManagerクラスとそのメソッドを使用する必要がweb.configからリードの接続文字列に

。あなたが使用したい場合は、System.Configurationを使って名前空間を追加する必要があります。

この名前空間を使用しましたが、ConfigurationManagerクラスを使用しようとすると、「configurationManagerは現在のコンテキストに存在しません」というエラーが表示されます。このコードは、ライブラリプロジェクトのように、別のプロジェクトにある場合

ConfigurationManager.ConnectionStrings["ConnectionSql"].ConnectionString; 
1

:この問題を解決するために 。 system.configurationへの参照を追加しないでください。

0

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

90

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

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

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

8

あなたは(溶液中の私の場合64には!)の警告の多くを取得している場合は

CS0618のように:「ConfigurationSettings.AppSettings」廃止されました:「このメソッドは廃止され、それが交換されていますSystem.ConfigurationによってSystem.Configuration.ConfigurationManager.AppSettings'

あなたは次のように古いプロジェクトはあなたが多くの時間を節約することができますアップグレードしているので:!

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

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

をこの変更により、

ConfigurationSettings.AppSettings["mySetting"] 

が今参照する

のすべてoccurances廃止予定のものはなくなり、すべてのCS0618の警告はすぐに消えてしまいます。

もちろん、これは迅速なハックです。長期的には、コードのリファクタリングを検討する必要があります。ソリューションエクスプローラ、右クリックの参照に移動し、参照の追加]をクリックし、.NET選んだとsystem.configurationを見つけ、この問題を解決するために

0

は、[OK]をクリックします]を選択

11

提案ソリューションのどれもが私のために働かないよう、この答えを追加します。

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