指示に従う ここ 私は持っています:
var connectionString = CloudConfigurationManager.GetSetting("StorageConnectionString");
しかし、connectionString
はnull
です。これが私の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>
コメントが収まらない場合でも、これは機能します。CloudConfigManagerへの参照があるためです。
Microsoft.WindowsAzure.CloudConfigurationManagerへの参照なしでアプリケーションを作成し、接続文字列が上記のようにweb.configまたはapp.configにある場合、ConfigurationManagerを使用して接続文字列を取得できます。 System.Configuration.dllへの参照をプロジェクトに追加し、別の名前空間宣言を追加する必要があります。
using System.Configuration;
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
ConfigurationManager.ConnectionStrings["StorageConnectionString"].ConnectionString);
MSDNのドキュメントに従って http://msdn.Microsoft.com/en-us/library/windowsazure/Microsoft.windowsazure.cloudconfigurationmanager.aspx
CloudConfigurationManagerが読み取ることができるのは、appSettingsタグ内の構成設定のみです。構成設定が別のタグ内にある場合、GetSettingを呼び出すとNullが返されます。
同じ問題があった。接続文字列を使用する代わりに、次のようにconfiguration-> appSettings-> add keyを使用します...
<configuration>
<appSettings>
<add key="StorageConnectionString" value="[ConnectionStringHere]" />
</appSettings>
</configuration>
私も同じ問題を抱えていました。 Azure SDK 2.0を使用するようにプロジェクトを更新しました。 WebロールとワーカーロールのNuGetパッケージを更新しましたが、Visual StudioのAzureプロジェクトはまだ古いバージョンのままでした。
これを修正するには、Azureプロジェクトを右クリックして[プロパティ]を選択します。 [アプリケーション]タブの下に、Azure SDKを更新するためのボタンが表示されます。
私の理解に基づいて、クラウドサービスが不足している場合は、CloudConfigurationManager.GetSettingがweb.configを調べることを指摘しておきます。クラウドサービス内にいる場合は、cscfgを調べます。
これを参照してください link。
すべての参照が同期していることを確認してください。 2012-06ライブラリと2012-10ライブラリがあり、それらをCopy Local = trueに設定して、SDKバージョンを確認します。私はまったく同じことを扱って、私を狂わせました。
これは、Azure SDKをバージョン2.2にアップグレードしたときに起こりました。
それを修正するために、Azure ConfigurationManagerの新しいバージョンを使用するようにpackages.configを変更しました。
<package id="Microsoft.WindowsAzure.ConfigurationManager" version="2.0.1.0" targetFramework="net45" />
このチュートリアルに従ってください:
次のような構成設定を取得できます。
RoleEnvironment.GetConfigurationSettingValue("StorageConnectionString")
これは、Azureソリューション(Web +ワーカーロール)に再度アクセスしてAzure 2.5
用に更新した後で同じ問題が発生しました。 CloudConfigurationManager.GetSetting
のヘルプを確認します。クラウドプラットフォーム(Azure)で実行されている場合はServiceConfiguration.csfg
から読み取り、.net
Webアプリとして実行されている場合はappまたはweb.config
から読み取ります。
したがって、私の修正は、起動プロジェクトをWebプロジェクトではなく、Azureクラウドプロジェクトに戻すだけでした。
間違ったプラットフォームでホストされていて、設定のない.config
ファイルから読み取っていたため、nullになりました。 (ドー!)
同じ問題が2回発生しました。 Visual Studioを再起動した後、Azureエミュレーターを再起動した後でも、CloudConfigurationManager.GetSetting( "SettingName")はnullを返します。
私はそれが以前に機能したことを確信し、最新のSDKを手に入れました。
したがって、ソリューションはPCを再起動しており、その後CloudConfigurationManager.GetSetting( "SettingName")は正しい値を返します。
Azure SDKを2.0から2.2にアップグレードした後、これを取得しました。私は修正することができました:
これは古いスレッドですが、上記の方法で問題が解決しない場合の解決策を共有したいので、アプリケーションを実行するときに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");
}
}
かなり似たような問題がありました。 Azure SDK 2.0から2.2に更新しました-このプロセス中に、NuGet Managerを使用してMicrosoft.WindowsAzure.Storageを最新に更新しました。 PackageManagerは自動的にMicrosoft.WindowsAzure.Configurationを1.8.0.0にしました。これを実行することができませんでした(.Net 2.0用でした!?)。すべての参照を手動で設定した後
すべてが働いた。
これは、CloudConfigurationManager.GetSettingがアセンブリをロードし、機能を(リフレクション経由で)呼び出す方法が原因であると思います。
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にこの警告を解決させ、すべてがうまくいきました。