設定ファイルの謎に関する有名な一連の記事への質問として、ここと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>
'type'にVersion、Culture、およびPublicKeyTokenがあることに注意してください。これら、または少なくともバージョンを削除する必要があります。問題は、特定のバージョンでアプリをデプロイしてから、バージョンを上げてアップデートを発行することです。ただし、構成で読み取りが行われると、バージョンが明示的であるため失敗します。
だから本当に私が欲しいのはこれだけです:
<configSections>
<section name="myoptionsdata" type="my.namespace.OptionsSection, myAssembly" />
</configSections>
拡張型の値を含む例を見たことがありません。すべての例は、Save()がtype = "namespace.class、assembly"を作成していることを示していますが、それはデフォルトの動作ではないようです。
それで、上記の引用を参照して、これらの「オプションの」値の管理に関する情報はどこにありますか?
グーグルをしている人にとって、これは以下の悪名高いエラーの原因の1つです。
例外:myoptionsdataの構成セクションハンドラーの作成中にエラーが発生しました:ファイルまたはアセンブリを読み込めませんでした'myAssembly、Version = 1.0.3.0、Culture = neutral、PublicKeyToken=111222aaaabbb'またはその依存関係の1つ。見つかったアセンブリのマニフェスト定義がアセンブリ参照と一致しません。(HRESULTからの例外:0x80131040)(C:\ Users \ me \ AppData \ Roaming \ product \ dir \ name.config line 4)
私の質問は、これまでのところ何の回答も得られていないこの質問に似ていると思います。
「メニュー外」に移動して、構成ファイルを特定の場所(デフォルト以外)にデプロイし、ユーザーが[ツール]>[オプション]のような形式でオプションを設定できるようにします。ほとんどのアプリはこれを行います。これを行うための簡単で一般的に受け入れられている方法はありますか?私のアプリはOutlookアドインであり、Outlook構成の近くではなく、アドイン固有の構成ファイルにアドイン設定を保存したいので、このように構成ファイルを作成することに注意してください。