如何处理和部署每个环境的配置属性?

时间:2014-07-07 19:35:55

标签: c# .net

我有一个配置,例如,外部服务器的主机名,用于存储存储在设置文件中的文件(如图像和PDF)。这些设置存储在名为CommonSettings的类库中。此路径的值可能会根据部署应用程序的环境而更改。这是:

  • 对于本地环境,值为"localhost"
  • 对于质量检查环境,值为"qa-external-files"
  • 对于prod环境,值为"prod-external-files"

然后我必须在代码中访问这些设置,但我需要从代码中解除每个环境的设置值。例如,我希望实现类似的功能(使用C#在Console Application中进行测试):

using CommonSettings;

String externalServerHostName = CommonSettings.Properties.Setting.Default.ExternalServerHostName;
Console.Write(externalServerHostName);
//prints localhost when I execute this from my machine
//prints qa-external-files when I execute this from the qa environment

在Java中,我可以通过创建文件夹结构来处理这种情况,每个环境都有一个文件夹,然后每个文件夹包含文件(属性文件)中的相关设置,并使用自动构建工具(maven)生成仅包含库的文件夹属性文件根据我想要/需要的环境。

我可以使用.net进行类似的处理吗?或者我应该使用构建工具来处理这个问题吗?

1 个答案:

答案 0 :(得分:1)

是否可以将配置设置存储在app.config文件而不是类库中?如果是这样,您可以根据您所处的环境将转换应用于app.config。您应该在构建期间而不是在运行时期间处理转换是正确的。

如果您有ASP.Net应用程序,则web.config转换更容易:

http://msdn.microsoft.com/en-us/library/dd465326(v=vs.110).aspx

如果你使用的是WPF或者不使用ASP,那么在app.config上进行转换需要做更多的工作。幸运的是,Visual Studio有一个VSIX文件可以帮助解决这个问题:

http://www.hanselman.com/blog/SlowCheetahWebconfigTransformationSyntaxNowGeneralizedForAnyXMLConfigurationFile.aspx