CloudConfigurationManager.GetSetting返回null

时间:2013-03-13 11:36:09

标签: c# azure app-config azure-storage

按照说明here我:

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>

17 个答案:

答案 0 :(得分:19)

根据MSDN http://msdn.microsoft.com/en-us/library/windowsazure/microsoft.windowsazure.cloudconfigurationmanager.aspx

中的文档

CloudConfigurationManager只能读取appSettings标记内的配置设置。如果您的配置设置在不同的标记内,则调用GetSetting将返回Null。

答案 1 :(得分:18)

有同样的问题。而不是使用连接字符串,使用配置 - &gt; appSettings-&gt;这样添加键...

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

答案 2 :(得分:10)

这很有效,即使评论不适合,因为我确实有一个参考CloudConfigManager:

  

如果您创建的应用程序没有引用Microsoft.WindowsAzure.CloudConfigurationManager,并且您的连接字符串位于web.config或app.config中,如上所示,则可以使用ConfigurationManager检索连接字符串。您需要向项目添加对System.Configuration.dll的引用,并为其添加另一个名称空间声明:

using System.Configuration;

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

答案 3 :(得分:9)

我遇到了同样的问题。我已将项目更新为使用Azure SDK 2.0。我为我的Web和辅助角色更新了NuGet包,但Visual Studio中的Azure项目仍然是旧版本。

要解决此问题,请右键单击Azure项目,然后选择“属性”。在“应用程序”选项卡下,您将看到一个用于更新Azure SDK的按钮。

答案 4 :(得分:4)

当我将Azure SDK升级到2.2版时,发生了这种情况。

要修复它,我更改了packages.config以使用更新版本的Azure ConfigurationManager。

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

答案 5 :(得分:4)

根据我的理解,我想指出,如果你的云服务用完了,CloudConfigurationManager.GetSetting会查看web.config。如果您在云服务中,它将查看cscfg。

请参考这个 link.

答案 6 :(得分:4)

确保所有参考文献都是同步的。有2012-06库和2012-10将它们设置为Copy Local = true并验证SDK版本。我处理完全相同的事情,让我疯了。

答案 7 :(得分:3)

遵循本教程:

您可以获得如下配置设置:

RoleEnvironment.GetConfigurationSettingValue("StorageConnectionString")

答案 8 :(得分:1)

我将Azure SDK从2.0升级到2.2后得到了这个。我能够解决:

  1. 右键单击Azure项目,然后选择“属性”。根据“应用程序”选项卡更新Azure SDK。 (感谢rattrick的回答)。
  2. 右键单击以管理NuGet包。在左侧单击“更新并更新WindowsAzure.ConfigurationManager。

答案 9 :(得分:1)

这是一个旧线程,但如果上述方法无法解决问题,我想分享我的解决方案,然后确保在运行应用程序时Azure存储模拟器正在运行;至少对我而言,这发生了。对我来说,我必须创建一个类来处理这里提到的模拟器问题......

  

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");
    }
}

答案 10 :(得分:1)

在重新访问我的Azure解决方案(Web + Worker角色)以更新Azure 2.5后,我遇到了同样的问题。查看CloudConfigurationManager.GetSetting的帮助,如果它在云平台(Azure)下运行,则从ServiceConfiguration.csfg读取,如果作为.net网络应用运行,则从应用或{{1}读取}。

所以我的修复只是将启动项目更改回Azure云项目,而不是Web项目 我得到了null,因为它是在错误的平台上托管并从web.config文件中读取而没有设置。 (DOH!)

答案 11 :(得分:1)

我有同样的问题(两次)。 即使重新启动Visual Studio并重新启动Azure模拟器后,CloudConfigurationManager.GetSetting(&#34; SettingName&#34;)也会返回null。

我确信它之前有效,我有最新的SDK。

所以解决方案是重新启动我的PC,之后CloudConfigurationManager.GetSetting(&#34; SettingName&#34;)返回正确的值。

答案 12 :(得分:0)

将Azure SDK从2.2升级到2.3后也是如此。

右键单击Azure项目,选择“属性”。在“应用程序”选项卡中,单击&#34;升级...&#34; (感谢rattrick的回答)。

然后还有一个错误需要解决: 尝试在Compute Emulator中运行Azure项目引发了异常: System.Configuration.ConfigurationErrorsException未处理 消息:未处理的类型&#39; System.Configuration.ConfigurationErrorsException&#39;发生在Microsoft.WindowsAzure.ServiceRuntime.dll中 其他信息:konnte nicht erstellt werden。

在&#34;错误列表&#34; VS2013的窗口有以下警告:

发现同一依赖程序集的不同版本之间存在冲突。在Visual Studio中,双击此警告(或选择它并按Enter键)以修复冲突;否则,将以下绑定重定向添加到&#34;运行时&#34;应用程序配置文件中的节点:C:\ Program Files(x86)\ MSBuild \ 12.0 \ bin \ Microsoft.Common.CurrentVersion.targets 1635

我让VS解决此警告,一切正常。

答案 13 :(得分:0)

我遇到了类似的问题。我从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加载程序集并调用funktions(通过反射)的方式。

答案 14 :(得分:-1)

我遇到了同样的问题。没有任何建议对我有用,但“问题”很简单。一个简单的方法就是要了解这个类的工作原理

它不会进入您的app.config / web.config或存储应用程序设置的任何位置。 CloudConfigurationManager适用于ServiceConfiguration.*.cscfgServiceConfiguration.csdef。 .csdef必须包含设置的定义,但不能包含ConfigurationSettings部分下的值。设置本身位于.cscfg文件中(在同一部分下但包含值;我认为双重定义的原因是确保云和本地配置具有相同的设置)。

您可以通过在Visual Studio中右键单击您的角色并选择“属性” - >“gt;来设置它们。设置(如果是StorageConnectionString,只需选择“您的订阅”,如果您的存储帐户已连接到云服务),或通过手动编辑它们。如果你弄乱了设置,你会得到一个感叹号图标。

这很简单。

答案 15 :(得分:-1)

这对我有用......

using System.Configuration;

...

var connectionString = ConfigurationManager.ConnectionStrings["StorageConnectionString"].ConnectionString;

答案 16 :(得分:-2)

在安装Azure SDK 2.6(之前正在使用)之后,在传递文字字符串时获得空值。

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

替换了文字字符串,它运行正常。

   string connectionStr = "AzureStorage";

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

   CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionstring);