如何更改配置部分,部分,类型元素?具体版本

本文关键字:版本 元素 部分 何更改 配置部 类型 | 更新日期: 2023-09-27 18:35:33

我在这里和CodeProject上发布我的问题,作为对关于配置文件奥秘的著名文章系列的问题。

来自文章:

或者,您可以指定区域性、版本和公钥(对于 已签名的程序集)值(如果希望仅确保特定的 当 .config 文件为 解析。

我使用以下代码打开并初始化配置文件:

ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
fileMap.ExeConfigFilename = path;
config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
section = (OptionsSection)config.GetSection("myoptionsdata");
if (section == null)
{
    section = new OptionsSection(0, "aaaa", "bbbb", "cccc",14);
    config.Sections.Add("myoptionsdata", section);
    config.Save(ConfigurationSaveMode.Full);
}

这将创建以下内容:

<configSections>
    <section name="myoptionsdata" type="my.namespace.OptionsSection, myAssembly,
      Version=1.0.3.0, Culture=neutral, PublicKeyToken=111222aaaabbb"
      allowLocation="true" allowDefinition="Everywhere"
      allowExeDefinition="MachineToApplication" overrideModeDefault="Allow"
      restartOnExternalChanges="true" requirePermission="true" />
</configSections>

请注意"类型"如何具有版本、区域性和公钥令牌。我需要消除这些,或者至少是版本。问题是我使用特定版本部署应用程序,然后我提高了版本并发布更新。但是当对配置完成读取时,它会失败,因为版本是显式的。

所以我真正想要的就是这个:

<configSections>
    <section name="myoptionsdata" type="my.namespace.OptionsSection, myAssembly" />
</configSections>

我从未见过包含扩展类型值的示例。每个示例都显示 Save() 创建 type="namespace.class,assembly",但这似乎不是默认行为。

那么,参考上面的报价,我在哪里可以找到有关管理这些"可选"值的信息?

对于任何谷歌搜索的人来说,这是以下臭名昭著的错误的原因之一:

异常:创建配置节时出错 myoptionsdata 的处理程序:无法加载文件或程序集 'myAssembly,版本=1.0.3.0,区域性=中性, PublicKeyToken=111222aaaabbb' 或其依赖项之一。位于 程序集的清单定义与程序集引用不匹配。 (HRESULT的例外:0x80131040) (C:''Users''me''AppData''Roaming''product''dir'ame.config line 4)

我相信我的问题与这个问题相似,到目前为止还没有收到任何答复。

"离开菜单",我只想将配置文件部署到特定位置(非默认),并允许用户在 Tools>Options 类型的表单中设置选项。大多数应用程序都这样做。有没有简单且普遍接受的方法可以做到这一点?我应该注意,我的应用程序是 Outlook 加载项,我这样做我的配置文件是因为我想将加载项设置存储在特定于加载项的配置文件中,而不是靠近 Outlook 配置的任何地方。

如何更改配置部分,部分,类型元素?具体版本

包含自定义配置节的程序集具有强名称。对程序集进行强命名会显式阻止要执行的就地版本升级类型。从该程序集中删除强名称,程序集加载程序将不再关心它是什么版本。