3

我有一个带有 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

4 回答 4

5

问题出在我如何配置我的 Azure 项目,我将在下面解释。我还在MSDN 论坛上问过这个问题,并在那里得到了一些帮助。

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

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

  1. Azure 云服务
  2. Azure 网站

Azure 云服务可能包含也可能不包含WebRole。如果是这样,则可以通过类似于http://servicename.cloudapp.net的端点访问它。另一方面,Azure 网站托管在类似http://websitename.azurewebsites.net的端点上。差异远不止域名。

Web角色与网站

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

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

网站解决方案

无论如何,这次我将我的项目重新创建为“Web 应用程序”解决方案(而不是“云服务”)。我将我的设置存储在 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"];

进一步讨论

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

于 2013-12-23T04:01:40.260 回答
2

从 Azure SDK 2.2 升级到 2.3 后,我遇到了类似的问题。看来我升级项目后,解决方案->启动项目从Azure项目更改为Web角色项目。结果是当我运行解决方案时,Web 角色项目在 IIS Express 中运行,而不是在 Azure 模拟器中运行。将解决方案的启动项目更改回 Azure 项目解决了这个特定问题。

于 2014-04-09T15:32:53.983 回答
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" />

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

于 2015-05-05T09:50:15.933 回答
0

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

  1. 右键单击 Azure 项目并选择属性。根据应用程序选项卡更新 Azure SDK。
  2. 右键单击以管理 NuGet 包。在左侧单击更新并更新 WindowsAzure.ConfigurationManager。
于 2013-12-21T08:57:42.053 回答