web-dev-qa-db-ja.com

CloudConfigurationManager.GetSettingがnullを返す

指示に従う ここ 私は持っています:

var connectionString = CloudConfigurationManager.GetSetting("StorageConnectionString");

しかし、connectionStringnullです。これが私のapp.configです。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <connectionStrings>
    <add name="StorageConnectionString"
         connectionString="DefaultEndpointsProtocol=https;AccountName=storage;AccountKey=key" />
  </connectionStrings>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Data.OData" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.2.0.0" newVersion="5.2.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
22
weston

コメントが収まらない場合でも、これは機能します。CloudConfigManagerへの参照があるためです。

Microsoft.WindowsAzure.CloudConfigurationManagerへの参照なしでアプリケーションを作成し、接続文字列が上記のようにweb.configまたはapp.configにある場合、ConfigurationManagerを使用して接続文字列を取得できます。 System.Configuration.dllへの参照をプロジェクトに追加し、別の名前空間宣言を追加する必要があります。

using System.Configuration;

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
    ConfigurationManager.ConnectionStrings["StorageConnectionString"].ConnectionString);
9
weston

MSDNのドキュメントに従って http://msdn.Microsoft.com/en-us/library/windowsazure/Microsoft.windowsazure.cloudconfigurationmanager.aspx

CloudConfigurationManagerが読み取ることができるのは、appSettingsタグ内の構成設定のみです。構成設定が別のタグ内にある場合、GetSettingを呼び出すとNullが返されます。

20
Nikolai Joukov

同じ問題があった。接続文字列を使用する代わりに、次のようにconfiguration-> appSettings-> add keyを使用します...

<configuration>
    <appSettings>
        <add key="StorageConnectionString" value="[ConnectionStringHere]" />
    </appSettings>
</configuration>
18
dascalos

私も同じ問題を抱えていました。 Azure SDK 2.0を使用するようにプロジェクトを更新しました。 WebロールとワーカーロールのNuGetパッケージを更新しましたが、Visual StudioのAzureプロジェクトはまだ古いバージョンのままでした。

これを修正するには、Azureプロジェクトを右クリックして[プロパティ]を選択します。 [アプリケーション]タブの下に、Azure SDKを更新するためのボタンが表示されます。

9
Scott Scowden

私の理解に基づいて、クラウドサービスが不足している場合は、CloudConfigurationManager.GetSettingがweb.configを調べることを指摘しておきます。クラウドサービス内にいる場合は、cscfgを調べます。

これを参照してください link。

4
Ankur D

すべての参照が同期していることを確認してください。 2012-06ライブラリと2012-10ライブラリがあり、それらをCopy Local = trueに設定して、SDKバージョンを確認します。私はまったく同じことを扱って、私を狂わせました。

4
SocialMitch

これは、Azure SDKをバージョン2.2にアップグレードしたときに起こりました。

それを修正するために、Azure ConfigurationManagerの新しいバージョンを使用するようにpackages.configを変更しました。

<package id="Microsoft.WindowsAzure.ConfigurationManager" version="2.0.1.0" targetFramework="net45" />
4
Matt Frear

このチュートリアルに従ってください:

次のような構成設定を取得できます。

RoleEnvironment.GetConfigurationSettingValue("StorageConnectionString")
3
user888734

これは、Azureソリューション(Web +ワーカーロール)に再度アクセスしてAzure 2.5用に更新した後で同じ問題が発生しました。 CloudConfigurationManager.GetSettingのヘルプを確認します。クラウドプラットフォーム(Azure)で実行されている場合はServiceConfiguration.csfgから読み取り、.net Webアプリとして実行されている場合はappまたはweb.configから読み取ります。

したがって、私の修正は、起動プロジェクトをWebプロジェクトではなく、Azureクラウドプロジェクトに戻すだけでした。
間違ったプラットフォームでホストされていて、設定のない.configファイルから読み取っていたため、nullになりました。 (ドー!)

1
Alfontz

同じ問題が2回発生しました。 Visual Studioを再起動した後、Azureエミュレーターを再起動した後でも、CloudConfigurationManager.GetSetting( "SettingName")はnullを返します。

私はそれが以前に機能したことを確信し、最新のSDKを手に入れました。

したがって、ソリューションはPCを再起動しており、その後CloudConfigurationManager.GetSetting( "SettingName")は正しい値を返します。

1

Azure SDKを2.0から2.2にアップグレードした後、これを取得しました。私は修正することができました:

  1. Azureプロジェクトを右クリックし、[プロパティ]を選択します。 [アプリケーション]タブに従ってAzure SDKを更新します。 (rattrickの回答に感謝します)。
  2. 右クリックしてNuGetパッケージを管理します。左側で[更新]をクリックして、WindowsAzure.ConfigurationManagerを更新します。
1
acarlon

これは古いスレッドですが、上記の方法で問題が解決しない場合の解決策を共有したいので、アプリケーションを実行するときにAzure Storage Emulatorが実行されていることを確認してください。少なくとも私にとってこれは起こりました。私にとっては、ここで述べたようにエミュレータの問題を処理するクラスを作成する必要がありました...

http://blog.simontimms.com/2013/08/28/configuration-settings-in-an-Azure-worker-role/

class ConfigurationProvider
{
    private static string GetStorageConnectionString(string name)
    {
        try
        {
            return RoleEnvironment.GetConfigurationSettingValue(name);
        }
        catch (SEHException)
        {
            return System.Configuration.ConfigurationManager.ConnectionStrings[name].ConnectionString;
        }
    }

    public static string StorageConnectionString()
    {
        return GetStorageConnectionString("StorageConnectionString");
    }

    public static string DefaultConnection()
    {
        return GetStorageConnectionString("DefaultConnection");
    }
}
1
user3104116

かなり似たような問題がありました。 Azure SDK 2.0から2.2に更新しました-このプロセス中に、NuGet Managerを使用してMicrosoft.WindowsAzure.Storageを最新に更新しました。 PackageManagerは自動的にMicrosoft.WindowsAzure.Configurationを1.8.0.0にしました。これを実行することができませんでした(.Net 2.0用でした!?)。すべての参照を手動で設定した後

  • Microsoft.WindowsAzure.Storage 2.1.0.0
  • Microsoft.WindowsAzure.Configuration 2.0.0.0

すべてが働いた。

これは、CloudConfigurationManager.GetSettingがアセンブリをロードし、機能を(リフレクション経由で)呼び出す方法が原因であると思います。

0
BerndK

Azure SDKを2.2から2.3にアップグレードした後も同じです。

Azureプロジェクトを右クリックして、[プロパティ]を選択します。 [アプリケーション]タブで[アップグレード...]をクリックします(rattrickの回答に感謝します)。

次に、解決すべきエラーがもう1つありました。コンピュートエミュレーターでAzureプロジェクトを実行しようとすると、例外がスローされました。 ServiceRuntime.dll追加情報:konnte nicht erstellt werden。

VS2013の[エラーリスト]ウィンドウで、次の警告が表示されました:

同じ依存アセンブリの異なるバージョン間で競合が見つかりました。 Visual Studioで、この警告をダブルクリックして(または選択してEnterキーを押して)、競合を修正します。それ以外の場合は、アプリケーション構成ファイルの「ランタイム」ノードに次のバインディングリダイレクトを追加します。C:\ Program Files(x86)\ MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets 1635

私はVSにこの警告を解決させ、すべてがうまくいきました。

0
huha