我在这里和 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>
请注意“类型”如何具有版本、文化和 PublicKeyToken。我需要消除这些,或者至少是版本。问题是我使用特定版本部署应用程序,然后我升级版本并发布更新。但是当对配置进行读取时,它会失败,因为版本是明确的。
所以我真正想要的是:
<configSections>
<section name="myoptionsdata" type="my.namespace.OptionsSection, myAssembly" />
</configSections>
我从未见过包含扩展类型值的示例。每个示例都显示 Save() 创建 type="namespace.class,assembly",但这似乎不是默认行为。
那么,参考上面的报价,我在哪里可以找到有关管理这些“可选”值的信息?
对于任何使用谷歌搜索的人,这是导致以下臭名昭著错误的原因之一:
异常:为 myoptionsdata 创建配置节处理程序时出错:无法加载文件或程序集“myAssembly,Version=1.0.3.0,Culture=neutral,PublicKeyToken=111222aaaabbb”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自 HRESULT 的异常:0x80131040)(C:\Users\me\AppData\Roaming\product\dir\name.config 第 4 行)
我相信我的问题与迄今为止尚未收到任何回复的问题类似。
“关闭菜单”,我只想将配置文件部署到特定位置(非默认)并允许用户以工具>选项形式设置选项。大多数应用程序都这样做。有没有简单且普遍接受的方法来做到这一点?我应该注意我的应用程序是 Outlook 插件,我这样做是因为我想将插件设置存储在插件特定的配置文件中,而不是 Outlook 配置附近的任何地方。