如何在.NET中为不同的环境使用不同的.settings文件?

Car*_*arl 11 .net settings application-settings

.NET允许您使用.settings文件来管理应用程序设置.我想以一种我可以这样做的方式单独存储生产,开发和测试设置:

EnvironmentSettings environmentSettings;

// get the current environment (Production, Development or Test)
ApplicationEnvironment Environment = (ApplicationEnvironment)
    Enum.Parse(typeof(ApplicationEnvironment), Settings.Default.ApplicationEnvironment);

switch (Environment)
{
    case ApplicationEnvironment.Production:
        environmentSettings = Settings.Production;
        break;
    ...
}

string reportOutputLocation = environmentSettings.ReportOutputLocation;
Run Code Online (Sandbox Code Playgroud)

基本上,我想要两个单独的Settings类:存储所选环境和非环境特定属性的常规Settings类,以及名为EnvironmentSettings的第二个类的3个静态实例.使用的实例应取决于常规Settings类中指定的环境.

有没有办法在静态构造函数或其他东西中手动设置所有这些设置的值?如果我必须这样做,我宁愿只有一个大的Settings类,其中包含"DevOutputLocation","LiveOutputLocation"等属性.

我可以在我的项目中有多个.settings文件,但这只是创建了不相互派生的单独类.所以我可以创建DevelopmentSettings.settings,ProductionSettings.settings和TestSettings.settings文件并给它们相同的属性,但是我需要在任何地方使用一堆switch语句来确定要使用哪个类,因为它们不是从公共类派生的.

Res*_*uta 2

我正在对 .config 文件使用这种方法,我相信它也会对您有所帮助。只需查看Scott Hanselman 的博客文章和这个问题即可。意识形态很简单,但效果很好。您所需要的只是:

  1. 为不同的配置创建多个文件
  2. 按照惯例命名它们,例如 my.dev.settings、my.live.settings
  3. 创建构建后事件(请参阅链接)
  4. 享受=)

具有设置的类的实例化代码将始终在默认设置中查找(每次构建后都会用所需的设置进行替换),因此这种方法只需最少的努力。