我有一个需要在不同环境(调试,测试,生产)中使用不同设置的Web服务。设置这些不同环境的单独配置文件最简单的方法是什么?我在网上找到的所有内容都告诉我如何使用配置管理器来检索设置,但没有告诉我如何根据当前构建配置找到特定的设置。
我有一个需要在不同环境(调试,测试,生产)中使用不同设置的Web服务。设置这些不同环境的单独配置文件最简单的方法是什么?我在网上找到的所有内容都告诉我如何使用配置管理器来检索设置,但没有告诉我如何根据当前构建配置找到特定的设置。
我发现为每个环境准备多个配置文件非常有效。例如:
然后,我使用 web.config 或 app.config 中内置的 configSource 属性链接到“主”版本。
<appSettings configSource="config\endpoints.xml"/>
<Choose>
<When Condition="$(BuildEnvironment) == 'debug'">
<PropertyGroup>
<ConfigFile>debug.config</ConfigFile>
</PropertyGroup>
</When>
<When Condition="$(BuildEnvironment) == 'test'">
<PropertyGroup>
<ConfigFile>test.config</ConfigFile>
</PropertyGroup>
</When>
<When Condition="$(BuildEnvironment) == 'prod'">
<PropertyGroup>
<ConfigFile>prod.config</ConfigFile>
</PropertyGroup>
</When>
</Choose>
我们使用几种不同的方法。
Environment.MachineName.config(适用于用户)
System.Configuration.ExeConfigurationFileMap fileMap = new System.Configuration.ExeConfigurationFileMap();
if (System.IO.File.Exists(String.Format("./{0}.config", Environment.MachineName)))
fileMap.ExeConfigFilename = String.Format(@"./{0}.config", Environment.MachineName);
else
fileMap.ExeConfigFilename = "live.config";
System.Configuration.Configuration config = System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(fileMap, System.Configuration.ConfigurationUserLevel.None);
#如果是调试环境 debug.config
#如果是测试环境 test.config
#如果是生产环境 prod.config
System.Configuration.ExeConfigurationFileMap fileMap = new System.Configuration.ExeConfigurationFileMap();
#if (DEBUG)
fileMap.ExeConfigFilename = "./debug.config";
#elif (TEST)
fileMap.ExeConfigFilename = "./test.config";
#else
fileMap.ExeConfigFilename = "./production.config";
#endif
System.Configuration.Configuration config = System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(fileMap, System.Configuration.ConfigurationUserLevel.None);
虽然这可能会变得乏味。