将不同的MyExeName.config XML(项目设置文件)加载到默认值?

时间:2013-09-30 16:00:49

标签: c# winforms configuration configurationmanager settings.settings

我看到这个问题多次询问ASP.NET样式的应用程序设置,其中加载完成后代码包含对ConfigurationManager.AppSettings["MySettingHere"]的调用..

..但我的WinForms应用程序不使用此方法。相反,它使用项目设置路线(即我调用Properties.Settings.Default.MySettingName来获取我的值,并通过获取项目属性并选择设置选项卡来编辑我的设置) 作为文件的App.config存在于项目/解决方案的根目录中,但也有Settings.settings和Settings.Designer.cs,我认为这些是使用的并转换为获取数据的编译代码

基本上,Visual Studio提供了一个围绕设置加载/保存/值获取过程的类型安全包装器,我想要做的是提供要加载的设置文件的路径,而不是让它停留在采用默认的MyExeName应用程序目录中的.config文件

2 个答案:

答案 0 :(得分:0)

我假设您要从所需位置加载自定义配置文件,而不是加载默认配置,然后尝试此操作,

  

注意:项目中不能有多个App.config。应用程序将使用名为YourExcecutable.exe.config的配置文件   默认文件App.config。但你可以有多重配置   然后根据需要使用代码加载文件和加载。但你无法保持全部   它们同时加载。你只能在文件之间切换   你需要。

System.Configuration.ConfigurationFileMap fileMap = new ConfigurationFileMap("path to new file"); 
System.Configuration.Configuration configuration = System.Configuration.ConfigurationManager.OpenMappedMachineConfiguration(fileMap);

OR

AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", @"Config file path");

答案 1 :(得分:0)

到目前为止我找到的唯一解决方案是穷人的解决方案..

当我们在项目属性中使用“设置”选项卡时,解决方案将在项目的“属性”节点下获得Settings.Settings,Settings.Designer.cs,并且可能还会在项目的根目录中获得app.config。直接编辑这些文件似乎是由VS本身复制/更新/同步的。它还在后台维护一些代码,以确保对这些设置的数据类型访问。可能它基于Configmanager.AppSetings [“propertyName”]但是因为VS用于设置属性,并且你告诉它它是一个int(或其他),那么VS可以编写暴露命名空间/类/成员链的包装器代码ProjectNamespace.Properties.Settings.Default.PROPERTYNAME

看起来这段代码依赖于名为THE_EXE_NAME.exe.config的设置文件,并与EXE本身一起存储。 ..所以我只需要使用我想要使用的设置文件,将其复制到存储在磁盘上的文件的顶部,然后调用ProjectNamespace.Properties.Settings.Default.Reload(),它会重新加载我想要使用的值超出新文件。我可以想到为什么这不理想的无数原因但是到目前为止我已经能够想出来了