我有一个带有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不兼容的地方吗?
答案 0 :(得分:5)
问题结果与我如何配置我的Azure项目有关,我将在下面解释。我也asked the question in MSDN forums并在那里得到了一些帮助。
TLDR; 在Visual Studio中,我的项目设置为带有WebRole的Azure云服务。但是,我正在将该项目部署到生产中的“Azure网站”。 Azure云服务与WebRole 和 Azure网站之间存在重要差异。
以下是一些更多细节:Azure可以托管网站/ Web服务,作为两种不同项目类型和服务配置的一部分。当您转到Azure门户并创建新服务时,您可以创建:
Azure Cloud Service可能包含也可能不包含 WebRole 。如果是,则可以通过看起来像 http://servicename.cloudapp.net 的端点访问它。另一方面,Azure网站托管在类似 http://websitename.azurewebsites.net 的端点上。差异远远超出了域名。
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后得到了这个。我能够解决: