C# CloudConfigurationManager.GetSetting返回null

C# CloudConfigurationManager.GetSetting返回null,c#,azure,app-config,azure-storage,C#,Azure,App Config,Azure Storage,我有以下指示: 但是connectionString是null,这是我的app.config: <?xml version="1.0" encoding="utf-8"?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <connectionStr

我有以下指示:

但是
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>


确保所有引用都同步。有2012-06库,2012-10将它们设置为Copy Local=true并验证SDK版本。我处理同样的事情,让我发疯

这很有效,即使评论不合适,因为我确实引用了CloudConfigManager:

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


我也有同样的问题。我已将该项目更新为使用Azure SDK 2.0。我为我的web和工作者角色更新了NuGet包,但VisualStudio中的Azure项目仍然在旧版本上


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

如MSDN中的文档所示

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

这对我来说很有效

using System.Configuration;


当我将Azure SDK升级到2.2版时,我就遇到了这种情况

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

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

我也有类似的问题。我从Azure SDK 2.0更新为2.2-在此过程中,我使用NuGet Manager将Microsoft.WindowsAzure.Storage更新为最新版本。PackageManager自动将Microsoft.WindowsAzure.Configuration设置为1.8.0.0。我无法运行它(它是针对.NET2.0的!?)。在我手动将所有引用设置为

  • Microsoft.WindowsAzure.Storage 2.1.0.0
  • Microsoft.WindowsAzure.Configuration 2.0.0.0
一切顺利


我认为这是因为CloudConfigurationManager.GetSetting加载程序集和调用函数的方式(通过反射)。

遵循本教程:

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

RoleEnvironment.GetConfigurationSettingValue("StorageConnectionString")

我在将Azure SDK从2.0升级到2.2之后得到了这个。我可以通过以下方式进行修复:

  • 右键单击Azure项目并选择属性。根据应用程序选项卡更新Azure SDK。(感谢拉特里克的回答)
  • 右键单击以管理NuGet包。在左侧单击更新并更新WindowsAzure.ConfigurationManager

  • 我也有同样的问题。不要使用连接字符串,而是像这样使用configuration->appSettings->add键

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

    将Azure SDK从2.2升级到2.3后,此处的内容相同:

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

    然后还有一个错误需要解决: 尝试在计算仿真程序中运行Azure项目时引发异常: System.Configuration.ConfigurationErrorsException未处理 消息:Microsoft.WindowsAzure.ServiceRuntime.dll中发生类型为“System.Configuration.ConfigurationErrorsException”的未处理异常 其他信息:konnte nicht erstellt werden

    在VS2013的“错误列表”窗口中,出现以下警告:

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

    我让VS解决了这个警告,一切正常。

    我也遇到了同样的问题(两次)。
       string connectionStr = "AzureStorage";
    
       var connectionstring = ConfigurationManager.ConnectionStrings[connectionStr].ConnectionString;
    
       CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionstring);
    
    即使在重新启动Visual Studio和Azure emulator之后,CloudConfigurationManager.GetSetting(“SettingName”)也会返回null

    我确信它以前已经工作过,并且我有最新的SDK


    因此,解决方案是重新启动我的电脑,然后CloudConfigurationManager.GetSetting(“SettingName”)返回正确的值。

    我也遇到了同样的问题。这些建议对我都不管用,但“问题”是直截了当的。一个简单的例子必须理解这个类是如何工作的

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

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


    就这么简单

    今天上午,我在重新访问Azure解决方案(Web+工作者角色)以更新Azure 2.5
    后遇到了相同的问题。查看
    CloudConfigurationManager.GetSetting
    的帮助,如果它在云平台(Azure)下运行,则从
    ServiceConfiguration.csfg
    ,如果作为
    .net
    web应用运行,则从应用或
    RoleEnvironment.GetConfigurationSettingValue("StorageConnectionString")
    
    <configuration>
        <appSettings>
            <add key="StorageConnectionString" value="[ConnectionStringHere]" />
        </appSettings>
    </configuration>
    
    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");
        }
    }
    
    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.ConnectionStrings["AzureStorage"].ConnectionString);
    
       string connectionStr = "AzureStorage";
    
       var connectionstring = ConfigurationManager.ConnectionStrings[connectionStr].ConnectionString;
    
       CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionstring);