c# - 在 app.config 的 configSection 中避免版本特定信息

标签 c# .net configuration app-config config

我制作了一个小型 GUI,用于管理 app.config 文件中的某些设置。 GUI 作为我的产品的一部分发布,可以更改 app.config 文件中的值,而无需在文本编辑器中打开它。

属性在自定义 configSection 中实现,使其在代码中具有强类型。我的问题是,当更新 app.config 文件时(当我从 GUI 保存时),我的程序集的完全限定名称是这样写在 configSection 中的:

<section name="ConfigurationSettings" type="PerformanceDude.MSBuildShellExtension.Common.ConfigurationSettings, Common, Version=2.2.1.0, Culture=neutral, PublicKeyToken=1ab1b15115e63xxx" />

当我将此程序集升级到新版本号时,GUI 代码程序集版本不再与 app.config 中的程序集引用匹配。

这是我加载设置的方式:

var config = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap() { ExeConfigFilename = ConfigFilePath }, ConfigurationUserLevel.None);
var settings = Config.GetSection("ConfigurationSettings") as ConfigurationSettings;

这是我保存设置的方式:

config.Save(ConfigurationSaveMode.Minimal, true);

我不想在每次更新时都编写升级脚本来更改版本。有谁知道解决这个问题的好办法吗?

最佳答案

我以前也做过类似的事情。我最终将配置文件加载为 xml,将相关部分反序列化为对象,然后将它们放回 xml。以这种方式避免使用 .net 配置 API 可以避免版本问题。

另一种方法是将旧版本的程序集重定向到新版本。如果您的程序集在 GAC 中,您可以使用策略文件来执行此操作,并在部署新版本时部署它们;那么配置中的版本号就无关紧要了。

关于c# - 在 app.config 的 configSection 中避免版本特定信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11296441/

相关文章:

c# - 非常简单的C#程序会生成“未处理NullReferenceException”错误

c# - c#中需要接口(interface)

windows - 如何配置 Atom 以使用代理文件 (pac) 设置?

c# - MySQL.EntityFrameworkCore : Object cannot be cast from DBNull to other types

c# - 构造函数注入(inject)过度使用

c# 仍然返回错误的核心数

.net - AppDomain.Unload 不释放我用反射加载的程序集

php - 设置站点 : config settings/issues 的本地版本

c# - 无法连接到任何指定的 MySQL 主机,以前的工作代码

c# - 在 Entity Framework 4.0 中缓存 POCO 对象