5

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

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

4

2 回答 2

5

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

  • 服务配置.Cloud.cscfg
  • 服务配置.Local.cscfg

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

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

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

RoleEnvironment.GetConfigurationSettingValue("DbConnectionString")

此方案的相关 MSDN 主题如下:

于 2012-03-18T01:46:59.617 回答
4

I agree with Monochrome that connection strings should be put in the Service Configuration, however there are situations where you need some configuration changes not related to connection strings that should be applied only when deploying to Azure. In a project of my own, for example, I needed some log4net configuration to change when deployed to Azure.

I found this article that explains how to make SlowCheetah work with a Worker Role project and Windows Azure. You need to make a small change to your Azure project file to copy the transformed configuration file.

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

You might have to tweak the SourceFiles attribute to fit your directory structure. But that's all there is to it.

于 2012-10-12T09:51:18.163 回答