misc.log

日常茶飯事とお仕事と

C#の設定ファイルが保存される場所はどうやってきまるか

備忘録。

C#で下記のように設定情報を保存した場合に保存される場所は、ユーザーフォルダの下です。が、そのフォルダ名にはハッシュ値のような英数字の羅列が入っています。そして、1つのアプリについて数個のフォルダができていることがあります。これ、なんなんだろう?と思っていたのですが、謎が解けました。

Properties.Settings.Default["設定項目1"] = settingValue1;
Properties.Settings.Default.Save();

パスに含まれるハッシュ値は下記の情報を元に作っているようです。

  1. アセンブリの厳密名(Strong Name)を用いる(アセンブリキャッシュとかに登録されるものの場合)
  2. 上記に当てはまらない場合は、アセンブリのパス

普通に作るアプリだと厳密名なんて付けないので、パスになります。ということは動かしたパスが違えば設定ファイルは別々になりますし、DebugとReleaseでそれぞれVisual Studioから実行すれば、それだけで2つのフォルダーが出来るわけですね。なるほど。

上記の事は下記サイトに記載されていました。

docs.microsoft.com

上記サイトはVisual Studio 2005でさらにVisual Basic .NETのものなので、Windows10も無かった頃の話で少しパスが違うのですが、設定ファイル「user.config」付近は

<appdomainname>_<eid>_<hash>\<verison>

で、やはりハッシュのようです。で、ハッシュ情報の生成については

<hash> is a SHA1 hash of evidence gathered from the CurrentDomain, in the following order of preference:

  1. StrongName
  2. URL

If neither of these is available, use the .exe path.

とのこと。なるほどね。同じような質問はstackoverflowにもあったようです。

stackoverflow.com

参考まで。