【问题标题】:Azure web.config per environment每个环境的 Azure web.config
【发布时间】:2011-06-11 17:02:45
【问题描述】:

我在 VS2010 中有一个 Azure 项目(Azure 1.3)。有2个webroles,一个网页项目和一个WCF项目。在调试模式下,我希望 Web 项目对 DEV 环境使用 web.config,并且在发布 PROD 时必须使用 web.config。

最好的方法是什么?

目前我在使用带有转换 XSLT 的 Web.Debug.config 时遇到问题。它似乎在 Azure 中不起作用....

【问题讨论】:

  • SO answer 提供了设置 Azure 配置转换所需的最少步骤数。

标签: web-config azure


【解决方案1】:

以不同的方式解决您的问题。考虑一下 web.config 在使用 Azure 时始终是静态的并且永远不会改变。改变的是您的 ServiceConfiguration.cscfg。

我们所做的是创建我们自己的配置提供程序,它首先检查 ServiceConfiguration.cscfg,然后如果设置/连接字符串不存在则回退到 web.config。这允许我们在开发期间直接在 IIS/WCF 中运行服务器,然后在部署到 Azure 时进行不同的设置。在某些情况下,您必须使用 web.config(是的,我在这里指的是 WCF),在这些情况下,您必须编写代码并创建约定,而不是将所有内容都存储在 web.config 中。我有一篇博文,其中展示了我在处理WIF (Windows Identity Foundation) and Azure. 时如何做到这一点的示例

【讨论】:

  • 这是一个很好的建议,尤其是当您考虑到您可以在实例运行时更改云配置这一事实,这与 Web 配置不同。话虽如此,我还在 Web 配置上使用了配置转换,这样可以省去那些难以从 web.config 移动的东西。
  • @aaron-weiker:这对于 appsettings 之类的东西来说是一个很好的建议,但如果您以不同的方式为 prod/dev 环境配置端点,这似乎不起作用。据我所知,不可能通过 *.cscfg 配置绑定/端点。但也许我错了。
  • @NikitaG。正确,您不能在运行时更改绑定。绑定被配置为包本身的一部分并且永远不会改变。如果您需要一些动态的东西,您需要将所有可能的端口添加到您的端点配置中,然后在运行时选择合适的端口。并不是说我认为这是一个好主意,而是让事情变得更有活力的一种方式。
  • 尝试创建一个自定义配置提供程序,它从 ServiceConfiguration (Prod/Dev) 读取当前环境键,然后从您的 web.config “自定义配置”键中读取相应的值: 等等...
  • 您在答案末尾提供的链接已损坏。你知道我在哪里可以找到更多关于这方面的信息吗?
【解决方案2】:

我同意 Mose,很好的问题!

Visual Studio 2010 包含此类问题的解决方案,即 web.config 转换。如果您查看您的 Web 角色,您会注意到它包括 Web.Debug.config 和 Web.Release.config 以及传统的 web.config。这些文件用于在部署期间转换 web.config。

典型示例是“我需要不同的数据库连接字符串进行开发和发布”,但它也适合您的情况。

Visual Web Developer Team 有一篇出色的博客文章解释了如何使用此功能(不要打扰 MSDN 文档,我知道它是如何工作的,但仍然不明白文档)。查看http://blogs.msdn.com/b/webdevtools/archive/2009/05/04/web-deployment-web-config-transformation.aspx

【讨论】:

  • 就像 Aaron 正确指出的那样,web.config(或其衍生版本 .debug.config 或 .release.config)在 Azure 中是“静态的”。所以我想知道这些机制是否也适用于serviceconfiguration.cscfg......
  • 我不确定,但这可能就是你要找的东西:blog.alexlambert.com/2010/05/…
  • 这是一个类似的解决方案,但更详细:blogs.msdn.com/b/tomholl/archive/2011/02/23/…
  • 截至 2012 年 4 月,“发布到 Windows Azure...”选项使用 web.XXXX.config 文件正确转换 web.config 文件。
【解决方案3】:

我喜欢这个问题!

对于工作角色,我通过在运行时检测环境并在具有自定义配置的新 AppDomain 中启动我的“应用程序”来解决此问题:

  • bot.cloud.config
  • bot.dev.config
  • bot.win.config

效率惊人

我想对 web 项目做同样的事情,因为使用 Azure 特定的配置很麻烦:

  • 两个config不在同一个地方,调试时比较耗时
  • 您必须学习一种新的方式来编写符合标准的内容
  • 有时您会怀疑应用程序是否因为愚蠢的语法错误而退回到 web.config

我仍在寻找正确的方法,like in this post

【讨论】:

    【解决方案4】:

    另一种可能的解决方案是拥有两个 CloudService 项目,每个项目都有特定的 ServiceConfiguration.cscfg(dev/prod)。使用 Dev 进行开发,但部署 Prod。

    【讨论】:

    • 这是正确的,但您仍然需要开发一些查看云配置而不是 Aaron 指出的 web.config 的东西。
    【解决方案5】:

    目前我在使用 Web.Debug.config 时遇到问题 转换 XSLT。它似乎在 Azure 中不起作用......

    这取决于你是想让它在本地机器上工作还是在持续集成中工作。

    • 对于本地机器我尝试在这里回答:https://stackoverflow.com/a/9393533/182371
    • 对于持续集成,它更加容易。当您从指定配置属性值的命令行构建时,您的配置将被转换(无论在 VS 中构建时它会做什么)。因此,正确指定云和 Web 项目的构建配置将根据构建参数为您提供正确的输出。

    【讨论】:

      猜你喜欢
      • 2021-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-31
      • 1970-01-01
      • 2021-01-01
      • 1970-01-01
      • 2021-04-16
      相关资源
      最近更新 更多