LoadingProperties.Settings在运行时从不同的文件我想在加载默认配置文件后执行此操作。我使用VisualStudio中的Settings.SettingsGUI为我创建App.config文件。配置文件最终看起来像这样:1234在代码中,我可以像这样访问设置:Console.WriteLine("Defaultsettingvalue:"+Properties.Settings.Default.SettingSomething);我的想法是,在运行应用程序时,我应该能够在运行时指定一个配置文件,并让应用程序将配置文件加载到Properties.Settings.Default对象中,而不是使用默认的app.config文件。配置文件的格式是一样的,但是设置的值会有所不同。我知道使用ConfigurationManager.OpenExeConfiguration(configFile)执行此操作的方法;ConfigurationManager.OpenExeConfiguration(配置文件);但是,在我运行的测试中,它不会更新Properties.Settings.Default对象以反映配置文件中的新值。在考虑了这个问题之后,我已经能够想出一个我喜欢的解决方案。我确定它有一些陷阱,但我认为这对我需要做的事情有用。本质上,Properties.Settings类是由VisualStudio自动生成的;它为您生成该类的代码。我能够找到生成代码的位置,并添加一些函数调用来自己加载配置文件。这是我的补充:internalsealedpartialclassSettings:global::System.Configuration.ApplicationSettingsBase{//解析配置文件并加载其设置publicvoidLoad(stringfilename){System.Xml.Linq.XElementxml=null;尝试{stringtext=System.IO.File.ReadAllText(filename);xml=System.Xml.Linq.XElement.Parse(文本);}catch{//Pokemoncatch语句(必须全部捕获)//如果加载文件时发生异常,//假设文件无法读取或//配置文件格式不正确。//xml变量将为null,并且//不会加载任何设置。}if(xml!=null){foreach(System.Xml.Linq.XElementcurrentElementinxml.Elements()){switch(currentElement.Name.LocalName){case"userSettings":case"applicationSettings":foreach(System.Xml.Linq.XElementsettingNamespaceincurrentElement.Elements()){if(settingNamespace.Name.LocalName=="SnipetTester.Properties.Settings"){foreach(System.Xml.Linq.XElement设置在settingNamespace.Elements()){LoadSetting(setting);}}}休息;默认值:中断;}}}}//根据配置文件中的xml表示加载设置privatevoidLoadSetting(System.Xml.Linq.XElementsetting){stringname=null,type=null,value=null;如果(setting.Name.LocalName=="setting"){System.Xml.Linq.XAttributexName=setting.Attribute("name");if(xName!=null){name=xName.Value;}System.Xml.Linq.XAttributexSerialize=setting.Attribute("serializeAs");if(xSerialize!=null){type=xSerialize.Value;}System.Xml.Linq.XElementxValue=setting.Element("value");if(xValue!=null){value=xValue.Value;}}if(string.IsNullOrEmpty(name)==false&&string.IsNullOrEmpty(type)==false&&string.IsNullOrEmpty(value)==false){switch(name){//陷阱之一是每次你添加一个新的//setting到配置文件,你需要添加另一个//case到t他切换语句。case"SettingSomething":this[name]=value;休息;默认值:中断;我添加的代码公开了一个接受配置文件名作为参数的Properties.Settings.Load(stringfilename)函数。它将解析文件并加载它在配置文件中遇到的任何设置。要恢复到原始配置,只需调用Properties.Settings.Reload()。希望这可以帮助别人!这取决于应用程序的类型:Web应用程序和Windows应用程序-如果您愿意将配置文件存储在与您的应用程序相同的文件夹(或子文件夹)中,请创建一个具有configSourcexml属性的设置提供程序并实现IApplicationSettingsProvider。样品在这里和这里。您可能还需要使用IConfigurationManagerInternal接口来替换默认的.NET配置管理器。实施提供商时,不要忘记区分用户设置和应用程序设置以及漫游配置文件。如果您想快速上手,只需反编译LocalFileSettingsProvider类(默认设置提供程序)并根据需要更改它(您可能会发现一些有用的代码,您可能需要复制它依赖的所有类)。祝你好运使用ExeConfigurationFileMap和ConfigurationManager.OpenMappedExeConfiguration查看。请参阅破解.Net2.0配置的秘密ExeConfigurationFileMap允许您在调用OpenMappedExeConfiguration()时一起或零散地专门配置机器、exe、漫游和本地配置文件的确切路径名。您不需要指定所有文件,但在创建Configuration对象时将识别并合并所有文件。使用OpenMappedExeConfiguration时,请务必了解通过您请求的级别的所有级别的配置将始终合并。如果指定了自定义exe和本地配置文件,但未指定计算机和漫游文件,则将找到默认计算机和漫游文件并将其与指定的exe和用户文件合并。如果指定文件未与默认文件同步,则可能会出现意想不到的后果。您可以包含类型,因此您不需要每次都手动更新源。`privatevoidLoadSetting(System.Xml.Linq.XElementsetting){stringname=null,type=null;字符串值=空;以上就是C#学习教程:运行时从不同文件加载Properties.Settings共享的所有内容,如果对你有用,需要进一步了解C#学习教程,希望大家多多关注——如果(setting.Name.LocalName=="设置"){System.Xml.Linq.XAttributexName=setting.Attribute("名称");if(xName!=null){name=xName.Value;}System.Xml.Linq.XAttributexSerialize=setting.Attribute("serializeAs");if(xSerialize!=null){type=xSerialize.Value;}System.Xml.Linq.XElementxValue=setting.Element("value");if(xValue!=null){if(this[name].GetType()==typeof(System.Collections.Specialized.StringCollection)){foreach(stringsinxValue.Element("ArrayOfString").Elements()){如果(!((System.Collections.Specialized.StringCollection)this[name]).Contains(s))((System.Collections.Specialized.StringCollection)this[name]).Add(s);}}else{value=xValue.Value;}if(this[name].GetType()==typeof(int)){this[name]=int.Parse(值);}elseif(this[name].GetType()==typeof(bool)){this[name]=bool.Parse(value);}else{这个[名称]=值;}}}`本文摘自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处:
