【问题标题】:Is there a way to use Slow Cheetah to transform app.config in Azure Worker Role?有没有办法使用 Slow Cheetah 来转换 Azure Worker Role 中的 app.config?
【发布时间】:2012-04-03 01:07:09
【问题描述】:

我正在尝试使用 Slow Cheetah 在本地数据库连接字符串和 SQL Azure 连接字符串之间切换。这是我正在通过 TeamCity 推送到 Azure 的 Azure 工作者角色。当我查看日志文件时,Slow Cheetah 进程正在正确运行并且正在生成转换后的 app.config,但是未来的构建步骤(我认为我无法控制)正在使用原始 app.config 写入转换后的文件.

有没有其他人用这种方法取得过任何成功,或者你能指出另一种方法来切换我的连接字符串。我被指出只使用一个连接字符串并编辑主机文件以指向我想要的数据库,但这似乎很乱。

【问题讨论】:

标签: azure connection-string app-config azure-worker-roles slowcheetah


【解决方案1】:

我同意 Monochrome 的连接字符串应该放在服务配置中,但是在某些情况下,您需要一些与连接字符串无关的配置更改,这些更改应该仅在部署到 Azure 时应用。例如,在我自己的一个项目中,我需要在部署到 Azure 时更改一些 log4net 配置。

我发现 this article 解释了如何使 SlowCheetah 与 Worker Role 项目和 Windows Azure 一起工作。您需要对 Azure 项目文件进行少量更改以复制转换后的配置文件。

<Target Name="CopyWorkerRoleConfigurations" BeforeTargets="AfterPackageComputeService">
    <Copy SourceFiles="..\WorkerRoleName\bin\$(Configuration)\WorkerRoleName.dll.config" DestinationFolder="$(IntermediateOutputPath)WorkerRoleName" OverwriteReadOnlyFiles="true" />
    </Target>
</Project>

您可能需要调整 SourceFiles 属性以适应您的目录结构。但仅此而已。

【讨论】:

    【解决方案2】:

    在处理 Azure 的生产和测试/本地环境时,最佳做法是将此类配置信息存储在服务配置文件中,而不是 web.config。您可以根据需要创建任意数量的服务配置文件,然后在发布解决方案时通过 GUI 或 cspack 选择所需的 .cscfg 文件。默认情况下,Visual Studio 中的 Azure 模板提供两个 .cscfg 文件:

    • ServiceConfiguration.Cloud.cscfg
    • ServiceConfiguration.Local.cscfg

    您可以使用这些现有文件添加两个不同的连接字符串条目,或创建自己的。您可以将连接字符串值存储在 .cscfg 文件中,如下所示:

    <ConfigurationSettings>
      <Setting name="DbConnectionString" value="blah" />
    </ConfigurationSettings>
    

    然后,你可以在你的代码中获取配置设置条目的值,如下所示:

    RoleEnvironment.GetConfigurationSettingValue("DbConnectionString")
    

    下面这个场景的相关 MSDN 主题:

    【讨论】:

    • 这是一个更简单的解决方案,我最终还是使用了它并放弃了我的 Slow Cheetah 努力。一种 hack,但为了支持自动部署到 azure,我只是将配置文件名硬编码到构建脚本中。谢谢单色。
    猜你喜欢
    • 2014-05-15
    • 2015-02-06
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多