当前位置: 首页 > 编程语言 > C#

在运行时从外部配置文件重新加载配置设置Share

时间:2023-04-10 18:43:59 C#

ReloadingConfigurationSettingsfromExternalConfigurationFilesatRuntime.理想情况下,我希望将设置保存在XML文件中,能够在游戏服务器运行时编辑文件,然后向服务器发送命令以从文件中重新加载设置。我知道我也可以用数据库来做到这一点,但游戏服务器相当小,我认为将设置保存在一个平面文件中会更实用。我将对运行服务器的机器具有文件级访问权限。我应该如何使用它?使用http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.aspx以使用自定义配置部分通过设置部分的位置属性将app.config中的部分连接到外部配置文件。所有的xml加载和序列化都是由这些自定义类完成的代码由CarelZA提供:首先,ConfigurationManager通过config部分缓存应用程序的配置,您可以调用ConfigurationManager.RefreshSection()来使特定部分的缓存失效。在我添加的app.config中:我创建了一个名为“game.config”的文件,并将“复制到输出目录”设置为“始终复制”。在game.config中:然后在代码中,为了访问任何设置:settings=(NameValueCollection)ConfigurationManager.GetSection("gameSettings");返回设置[“设置名称”];并在重新加载命令发送到服务器时重新加载游戏配置:ConfigurationManager.RefreshSection("gameSettings");根据要求将我的评论作为答案发布:您可以设置它,以便服务器使用FileSystemWatcher自动加载文件设置。如果使用自定义设置类,只需锁定该类,从文件中重新加载它并解锁(如果使用多线程)。从/写入文件或序列化在.NET中是如此微不足道,这可能不是您需要帮助的地方,并且有很多选择可以如何做到这一点。听起来像是XML序列化的工作!无需手动解析和编辑XML,您可以通过创建设置对象、将其序列化为XML并在需要进行修改时反/序列化它来轻松实现相同的效果。这样,您就可以热交换配置文件。使用System.Xml.Serialization;例如,您可以让对象publicclassSettings{publicstringSomeProperty{get;设置;}公共字符串SomeProperty2{get;set;}}将其保存到磁盘,varsettings=newSettings{SomeProperty="Hello",SomeProperty2="Joe"};varfs=newFileStream("settings.xml");varxs=newXmlSerializer(settings.GetType());xs.Serialize(fs,settings);回读,varfs=newFileStream("settings.xml");varsettings=(Settings)fs.Deserialize(fs);请参阅System.Runtime.Caching(.NET4.0)中的MemoryCache。您可以自己编写一个执行以下步骤的简单类:在执行上述任何操作之前,您检查缓存以查看是否存在以前缓存的设置副本,只有在不存在时才继续。像这样滚动您自己的方法的优点是您不会像存储在web.config或app.config文件中的AppSettings那样触发应用程序的重启。(应该说这不是实现这个目标的唯一途径)以上就是C#学习教程:运行时从外部配置文件重新加载配置设置,希望大家多多关注——本文收集来自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: