Azure WebRole CloudConfigurationManager.GetSetting返回null

时间:2013-12-06 20:02:25

标签: c# azure azure-cloud-services

我有一个带有WebRole项目的Azure云解决方案。

Windows Azure Tools version: 2.2
WebRole项目中的

packages.config包含:

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

我“Nuget Enable Package Restore”因此假设在构建期间链接和引用了正确的包。

以下行在我的开发盒Azure Compute仿真器上运行正常,但是,当我部署(签入在线TFS,构建解决方案并开始部署到Azure)时,此行返回null:

CloudConfigurationManager.GetSetting("StorageConnectionString")

我已经阅读了其他几篇文章,但到目前为止还没有能够解决这个问题。我不知道某个包/ SDK不兼容的地方吗?

4 个答案:

答案 0 :(得分:5)

问题结果与我如何配置我的Azure项目有关,我将在下面解释。我也asked the question in MSDN forums并在那里得到了一些帮助。

  

TLDR; 在Visual Studio中,我的项目设置为带有WebRole的Azure云服务。但是,我正在将该项目部署到生产中的“Azure网站”。 Azure云服务与WebRole Azure网站之间存在重要差异。

以下是一些更多细节:Azure可以托管网站/ Web服务,作为两种不同项目类型和服务配置的一部分。当您转到Azure门户并创建新服务时,您可以创建:

  1. Azure云服务
  2. Azure网站
  3. Azure Cloud Service可能包含也可能不包含 WebRole 。如果是,则可以通过看起来像 http://servicename.cloudapp.net 的端点访问它。另一方面,Azure网站托管在类似 http://websitename.azurewebsites.net 的端点上。差异远远超出了域名。

    WebRole与网站

    WebRole(您可以在Visual Studio中创建“Cloud Service”解决方案的一部分)连接到您创建的 Cloud Service 的其余部分,因此可以引用和使用资源属于Cloud Service的属性,例如存储在 .cscfg 文件中的设置和配置。 CloudConfigurationManager 库正确解析并引用这些设置。

    但是,网站是一个独立项目,非常类似于您部署到IIS Express的Web应用程序。一个网站本质上映射到Visual Studio中的“Web应用程序”解决方案。即使您在Web应用程序中引用了 CloudConfigurationManager 库,也不知道如何处理此类项目。

    网站解决方案

    无论如何,我这次将我的项目重新创建为“Web应用程序”解决方案(而不是“Cloud Service”)。我将我的设置存储在Web.Config(以及Web.Debug.Config和Web.Release.Config风格)中:

    <configuration>
    
        <appSettings>
            <add key="MyAppSettingKey" value="MyAppSettingValue" />
        </appSettings>
    
        <system.web>
            <compilation debug="true" targetFramework="4.5.1" />
        </system.web>
    
    </configuration>
    

    在代码中,我使用了 ConfigurationManager 库:

    string mySetting = ConfigurationManager.AppSettings["MyAppSettingKey"];
    

    进一步讨论

    随意检查this MSDN thread以进一步讨论这个主题。

答案 1 :(得分:2)

从Azure SDK 2.2升级到2.3后,我遇到了类似的问题。似乎在我升级我的项目之后,解决方案 - &gt;启动项目已从Azure项目更改为Web角色项目。结果是当我运行解决方案时,Web角色项目在IIS Express中运行,而不是在Azure模拟器中运行。将解决方案的启动项目更改回Azure项目可修复此特定问题。

答案 2 :(得分:2)

根据我的理解,

如果您的云服务用完或本地用完,CloudConfigurationManager.GetSetting将会调查web​​.config。

请将您的设置从ServiceConfiguration.Cloud.cscfg文件添加到web.config文件,它将起作用。

例如:
在ServiceConfiguration.Cloud.cscfg文件中:
 <Setting name="SqlServerConnectionString" value="your connections string" />
添加
 <add key="SqlServerConnectionString" value="your connections string" />

如果您有任何问题,请告诉我。

答案 3 :(得分:0)

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

  1. 右键单击Azure项目,然后选择“属性”。根据“应用程序”选项卡更新Azure SDK。
  2. 右键单击以管理NuGet包。在左侧单击“更新并更新WindowsAzure.ConfigurationManager”。
相关问题