有没有办法使用Slow Cheetah转换Azure Worker角色中的app.config?

时间:2012-03-18 00:43:08

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

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

有没有其他人使用此方法取得任何成功,或者您是否可以指向另一种方法来切换我的连接字符串。我被指向只使用一个连接字符串并编辑hosts文件指向我想要的数据库,但这看起来很混乱。

2 个答案:

答案 0 :(得分:5)

在处理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主题:

答案 1 :(得分:4)

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

我发现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属性以适合您的目录结构。但这就是它的全部内容。

相关问题