「別のクラスライブラリにweb.configがあり、別のWebアプリケーションからweb.configアプリの設定を読み取っていた」ということに気づきませんでした。
VS2010ターゲットフレームワーク3.5を使用しています
ここで何が間違っているのかわかりませんが、ConfigurationManager.AppSettings["StoreId"];
を取得しようとするとnull
を取得しています
private string _storeid = GetStoreId;
public static string GetStoreId
{
get
{
return ConfigurationManager.AppSettings["StoreId"];
}
}
web.config:
<appSettings>
<add key="StoreId" value="123" />
</appSettings>
上記のコードは、メインのasp.netライブラリとは別のクラスライブラリを使用していますか?
上記の設定でapp.configをこのライブラリに追加した場合、ConfigurationManagerは適切なファイルを読み取っていません。これは、asp.netライブラリのweb.configファイルを参照するためです。
ユニットテストが必要な場合A COPY of APP.CONFIG inside the NIT TEST PROJECT
私はこれが古いことを知っていますが、私はここに戻ってきます:(
これの通常の原因は、コンテキストによるものです。
VSTOアドインプロジェクトとクラスライブラリプロジェクトを使用したソリューションがあるとします。App.Configがクラスライブラリにある場合、実行中のアプリケーションのコンテキストはVSTOアドインプロジェクトであるため、動作しません。構成から値を読み取るには、コンテキストを使用して構成ファイルをプロジェクトに移動する必要があります。
VSTOに慣れていない場合は、代わりにASP.Netプロジェクトとapp.configをweb.configに書きました
気の利いた解決策は、他のプロジェクトに設定ファイルのショートカットを追加して、1つのファイルのみを更新することです:
回答#2によるアセンブリファイルの共有に似ています: https://stackoverflow.com/a/15319582/495455
そして:
<appSettings>
<add key="StoreId" value="123" />
</appSettings>
aSP.NETアプリケーションのweb.config
ファイルにあり、Visual Studioのクラスライブラリプロジェクトに追加したapp.config
ファイルにはありませんか?この場合、null
を取得することはできません。これをVisual Studioのapp.config
クラスライブラリプロジェクトに追加した場合、nullを取得するのはまったく正常な動作です。
免責事項;)この投稿は遅すぎるのでOPには答えませんが、間違いなく最終的には読者を助けるでしょうこのページへ。
私が直面した問題:ConfigurationManager.AppSettings["uName"]
はC#Web APIプロジェクトでnull
を返します。
チェックした基本的なもの:
1)コードConfigurationManager.AppSettings["uName"]
で、web.config
ファイルと同じように正確なキー 'uName
'を使用していました、
すなわち
<appSettings>
<add key="uName" value="myValue" />
</appSettings>
チェックしていないしていないことタイプミスとしてuserName
uName
などの代わりに.
2)Web APIプロジェクトであるため、ファイルはweb.config
ではなくapp.config
として、またプロジェクトのルートフォルダ。 [画像を参照]。
ソリューション:
私のために働いた解決策、
変更ConfigurationManager.AppSettings["uName"]
からWebConfigurationManager.AppSettings["uName"]
and
私が持っていることを確認した
<appSettings>
<add key="uName" value="myValue" />
</appSettings>
rightファイルで.
正しいファイルは、Viewフォルダーのweb.confignotです
notherデバッグまたはリリースweb.config
私は答えを得ましたDLLは、App.configにcreate.soエントリが存在するプロジェクトにない別のプロジェクトから呼び出されます。プロジェクト設定ファイルの呼び出しに移動する必要があります。
たとえば、ソリューションに2つのプロジェクトがあり、1つのクラスライブラリと他のコンソールアプリケーションがあります。コンソールアプリケーションにクラスライブラリ参照を追加しているので、クラスライブラリプロジェクトにapp.configファイルを追加すると、null exception。コンソールアプリケーションの.config
アプリの設定はConfigurationManager.AppSettingsに読み込まれますが、ユーザー設定(プロジェクトプロパティのプロパティ設定)は読み込まれません。
上記の回答に同意し、さらにポイントを追加したいと思います
以下のコードの前後にスペースを入れないでください。
private static string Client_ID = ConfigurationManager.AppSettings["ida:ClientId"];
ida:ClientIdの間にスペースを入れると機能せず、nullを返します
キー値の名前が正しいことを確認してください
webConfigurationManagerを試すことができます
これは、クラスライブラリ(.dll)をテストしているときに起こりました。どちらも同じプロジェクトにありましたが、ライブラリのApp.configには必要な設定がありました。 itがライブラリを実行していたため、テスト用に作成したアプリには設定が必要でした。
ファイルエクスプローラーからプロジェクトをコピーし、プロジェクトの名前を変更すると、この問題が発生しました。これによりDebugフォルダーがコピーされ、「新しい場合にコピー」に設定していなかったため、古いApp.configファイルは上書きされませんでした。
デバッグフォルダーを削除して再構築するだけです。それが誰かを助けることを願っています。