24

ここでの指示に従ってください:

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

しかし、ここに私のapp.configがありますconnectionStringnull

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

17 に答える 17

21

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

<configuration>
    <appSettings>
        <add key="StorageConnectionString" value="[ConnectionStringHere]" />
    </appSettings>
</configuration>
于 2014-01-05T19:55:43.443 に答える
20

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

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

于 2013-08-22T15:03:26.820 に答える
10

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

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

using System.Configuration;

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
    ConfigurationManager.ConnectionStrings["StorageConnectionString"].ConnectionString);
于 2013-03-14T09:58:57.553 に答える
4

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

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

<package id="Microsoft.WindowsAzure.ConfigurationManager" version="2.0.1.0" targetFramework="net45" />
于 2013-11-07T16:34:42.257 に答える
4

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

于 2013-03-13T12:09:30.917 に答える
1

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

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

于 2014-12-03T16:17:54.550 に答える
1

これは古いスレッドですが、上記の方法で問題が解決しない場合は、ソリューションを共有したいと思います。アプリケーションを実行するときに 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");
    }
}
于 2015-06-11T08:52:47.270 に答える
0

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

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

その後、解決すべきもう 1 つのエラーがありました: コンピューティング エミュレーターで Azure プロジェクトを実行しようとすると、例外がスローされました: System.Configuration.ConfigurationErrorsException が処理されませんでしたServiceRuntime.dll 追加情報: konnte nicht erstellt werden.

VS2013 の「エラー一覧」ウィンドウに、次の警告がありました。

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

VS にこの警告を解決させると、すべてが正常に機能しました。

于 2014-04-07T09:46:46.897 に答える
-1

これは私のために働いた...

using System.Configuration;

...

var connectionString = ConfigurationManager.ConnectionStrings["StorageConnectionString"].ConnectionString;
于 2013-11-04T04:23:52.933 に答える
-1

私も同じ問題を抱えていました。どのアドバイスも役に立ちませんでしたが、「問題」は簡単でした。このクラスがどのように機能するかを簡単に理解する必要があります。

アプリケーション設定を保存する場所app.configには入りません。と で動作します。.csdef には設定の定義が含まれている必要がありますが、セクションの下の値は含まれていません。設定自体は .cscfg ファイルにあります (同じセクションの下ですが、値が含まれています。二重定義の理由は、クラウドとローカルの両方の構成が同じ設定であることを確認するためだと思います)。web.configCloudConfigurationManagerServiceConfiguration.*.cscfgServiceConfiguration.csdefConfigurationSettings

これらは、Visual Studio でロールを右クリックして [プロパティ] -> [設定] を選択するか (StorageConnectionString の場合、ストレージ アカウントがクラウド サービスに接続されている場合は [サブスクリプション] を選択するだけです)、または手動で編集することによって設定できます。 . 設定を間違えると、感嘆符のアイコンが表示されます。

そのような単純な。

于 2014-09-23T10:13:53.377 に答える
-2

Was getting a null value with when passing a literal string as well after installing Azure SDK 2.6 (was working before).

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.ConnectionStrings["AzureStorage"].ConnectionString);

Replaced the literal string and it worked fine.

   string connectionStr = "AzureStorage";

   var connectionstring = ConfigurationManager.ConnectionStrings[connectionStr].ConnectionString;

   CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionstring);
于 2015-06-29T15:23:51.293 に答える