CloudConfigurationManager.GetSetting在生产中返回空字符串

本文关键字:字符串 返回 生产中 GetSetting CloudConfigurationManager | 更新日期: 2023-09-27 17:59:47

我刚刚将我的项目升级到Azure Tools 1.8(2012年10月SDK),遇到了一个奇怪的问题;

在我的WorkerRole中,我对CloudConfigurationManager.GetSetting的调用返回null(可以是空字符串,很难从日志文件中判断)。换句话说;我无法从角色环境中获取设置。

信息:

  • Emulator/localhost运行良好
  • 通过RDP验证dll版本
  • 尝试获取各种测试设置
  • 同样的代码行现在在生产槽中运行得很好
  • 我在用微软。WindowsAzure。来自nuget的ConfigurationManager 1.8.0.0
  • 在app.config中也添加了测试设置,结果相同

有线索吗?

更新:

调用代码(WorkerRole中的方法Run())

public override void Run(){
   // Fetch connectionstring
   var connectionString = CloudConfigurationManager.GetSetting("ConnectionString");
   // connectionString is null here?
  [...]
}

该设置在门户中可见,因此它肯定已部署。

CloudConfigurationManager.GetSetting在生产中返回空字符串

我已经修复了它,以下步骤解决了它:

  • 其中一个项目引用了Microsoft.WindowsAzure.Configuration版本1.7.0.0。更改了这一点(如果这是原因,那就很奇怪了,因为输出中的dll版本正确。也许它是在运行时从GAC加载的?)
  • 已删除Microsoft.WindowsAzure.Configuration的程序集绑定重定向
  • osFamily从1升级到2(Windows 2008 SP2->Windows 2008 R2)

有些步骤可能是不必要的,但我不确定是哪一个:-)

使用RoleEnvironment怎么样。改为GetConfigurationSettingValue("ConnectionString");假设您正试图从服务配置文件(cscfg)中获取一个值?

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

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

我是在Azure SDK从2.0升级到2.2后得到的。我能够修复通过:

  1. 右键单击Azure项目并选择"属性"。根据"应用程序"选项卡更新Azure SDK。感谢rattrick1的回答
  2. 右键单击以管理NuGet软件包。在左侧单击"更新并更新WindowsAzure"。ConfigurationManager