24

按照此处的说明,我有:

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>
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 回答
9

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

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

于 2013-05-21T01:46:21.743 回答
4

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

于 2013-03-13T12:09:30.917 回答
4

当我将 Azure SDK 升级到 2.2 版时,这发生在我身上。

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

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

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

请参考此 链接。

于 2015-05-05T09:59:41.467 回答
3

按照本教程:

您可以像这样获得配置设置:

RoleEnvironment.GetConfigurationSettingValue("StorageConnectionString")
于 2013-12-06T18:29:38.237 回答
1

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

  1. 右键单击 Azure 项目并选择属性。根据应用程序选项卡更新 Azure SDK。(感谢rattrick的回答)。
  2. 右键单击以管理 NuGet 包。在左侧单击更新并更新 WindowsAzure.ConfigurationManager。
于 2013-12-22T09:16:29.140 回答
1

我有同样的问题(两次)。即使在重新启动 Visual Studio 和重新启动 Azure 模拟器之后,CloudConfigurationManager.GetSetting("SettingName") 也会返回 null。

我确信它以前可以工作,并且我拥有最新的 SDK。

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

于 2014-04-09T09:22:11.137 回答
1

在重新访问我的 Azure 解决方案(Web + Worker 角色)以将其更新为Azure 2.5. 查看 的帮助CloudConfigurationManager.GetSetting,如果它在云平台 (Azure) 下运行,它会从 中读取ServiceConfiguration.csfg,如果作为.netWeb 应用程序运行,则从应用程序或web.config.

所以我的解决方法是简单地将启动项目改回 Azure 云项目,而不是 Web 项目。
我得到空值,因为它托管在错误的平台上并且从.config没有设置的文件中读取。(呸!)

于 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.0 更新到 2.2 - 在此过程中,我使用 NuGet 管理器将 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 加载程序集并调用函数(通过反射)的方式。

于 2013-11-10T20:22:34.997 回答
0

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

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

然后还有一个错误需要解决:尝试在计算模拟器中运行 Azure 项目引发异常:未处理 System.Configuration.ConfigurationErrorsException 消息:Microsoft.WindowsAzure 中发生了“System.Configuration.ConfigurationErrorsException”类型的未处理异常。 ServiceRuntime.dll 附加信息: konnte nicht erstellt werden。

VS2013的“错误列表”窗口出现如下警告:

发现同一依赖程序集的不同版本之间存在冲突。在 Visual Studio 中,双击此警告(或选择它并按 Enter)以修复冲突;否则,将以下绑定重定向添加到应用程序配置文件中的“运行时”节点: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/web.config或您存储应用程序设置的任何位置。CloudConfigurationManagerServiceConfiguration.*.cscfg和一起使用ServiceConfiguration.csdef。.csdef 必须包含设置的定义,但不能包含该ConfigurationSettings部分下的值。设置本身位于 .cscfg 文件中(在同一部分但包括值;我想双重定义的原因是确保云和本地配置具有相同的设置)。

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

就那么简单。

于 2014-09-23T10:13:53.377 回答
-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);
于 2015-06-29T15:23:51.293 回答