【问题标题】:Avoid version specific information in configSection in app.config避免 app.config 中 configSection 中的版本特定信息
【发布时间】:2012-07-03 00:44:17
【问题描述】:

我制作了一个小型 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);

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

【问题讨论】:

  • 是否可以包含用于序列化和保存配置的代码?
  • 加载和保存代码现在在描述中:)
  • 你有没有想过解决这个问题?
  • 不记得了。不这么认为。

标签: c# .net configuration app-config config


【解决方案1】:

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

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

【讨论】:

  • 实际上 --- 如果您将配置 DLL 添加到 GAC,则在定义配置部分时不需要完全限定名称。您所需要的只是(类、程序集)
  • 当然@SASS_Shooter,但关键是如果他有策略文件,他不需要关心是否有东西放在那里。
  • DLL 不在 GAC 中。如果我将配置加载为 XML,则数据不会在 C# 中强类型化。使用配置部分的整个想法是让我能够通过包含强类型属性的 C# 对象来加载和保存每个属性。不过,谢谢你的提议 :)
猜你喜欢
  • 1970-01-01
  • 2016-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-22
  • 2012-08-17
  • 2019-03-19
  • 2015-06-06
相关资源
最近更新 更多