.NETでSettings.settingsファイルを使用する場合、構成は実際にどこに保存されますか?


100

.NETでSettings.settingsファイルを使用する場合、構成は実際にどこに保存されますか?保存した設定を削除してデフォルトの状態に戻したいのですが、保存されている場所が見つかりません...

回答:


100

選択した設定が「ユーザー」スコープか「アプリケーション」スコープかによって異なります。

ユーザーの範囲

ユーザースコープの設定は次の場所に保存されます

C:\ Documents and Settings \ username \ Local Settings \ Application Data \ ApplicationName

実行時にそれらを読み書きできます。

VistaおよびWindows 7の場合、フォルダーは

C:\ Users \ username \ AppData \ Local \ ApplicationName

または

C:\ Users \ username \ AppData \ Roaming \ ApplicationName

適用範囲

アプリケーションスコープ設定はに保存されAppName.exe.config、実行時に読み取り専用になります。


20
VistaおよびWin7でのユーザースコープ設定のフォルダーは、C:\ Users \ username \ AppData \ Local \ ApplicationName \ Publisher \ ApplicationName \ VersionまたはC:\ Users \ username \ AppData \ Roaming \ ApplicationName \ Publisher \ ApplicationName \ Versionによって異なります。設定ペインのローミングプロパティ値。
jakdep 2010

4
そのアドインでない限り、その場合はAppName.dll.configになります
匿名タイプ

4
Windows 7のローカルuser.configはC:\ Users \ <username> \ AppData \ Local \ Publisher \ ApplicationName_Eid_EvidenceHash \ Version
The Lonely Coder

53

プログラムでuser.configファイルの場所を取得するために使用できるスニペットを次に示します。

public static string GetDefaultExeConfigPath(ConfigurationUserLevel userLevel)
{
  try
  {
    var UserConfig = ConfigurationManager.OpenExeConfiguration(userLevel);
    return UserConfig.FilePath;
  }
  catch (ConfigurationException e)
  {
    return e.Filename;
  }
}

ApplicationSettings(つまり、settings.settings)は、デフォルトでユーザー設定にPerUserRoamingAndLocalを使用します(覚えています)。

更新:奇妙ですが、ここでは間違った答えが多すぎます。ユーザースコープの設定ファイル(user.config)を探している場合は、次のフォルダー(Windows XPの場合)にあります。

C:\ Documents and Settings \(username)\ Local Settings \ Application Data \(company-name-if-exists)\(app-name).exe_(Url | StrongName)_(hash)\(app-version)\

URLまたはStrongNameは、アプリケーションアセンブリの厳密な名前かどうかに依存します。


そのパスのハッシュに何が貢献しているのでしょうか?アプリの後続のリリースごとに異なるハッシュ値が取得されるため、ApplicationSettingsBase.Upgrade()の呼び出しが無駄になります。:/
マルロス

2
ハッシュは、アプリが署名されている場合のStrongNameのSHA1ハッシュ、またはアプリが署名されていない場合のパスです。詳細はこちらmsdn.microsoft.com/en-us/library/ms379611(v=vs.80).aspx
アービター

20

Webアプリケーションではなくデスクトップについて話していると仮定します。

プロジェクトに設定を追加すると、VSはapp.configプロジェクトディレクトリに名前が付けられたファイルを作成し、そのファイルに設定を保存します。またSettings.cs、個々の設定への静的アクセサーを提供するファイルも作成します。

コンパイル時に、VSは(デフォルトではこれを変更できます)をapp.configビルドディレクトリにコピーし、実行可能ファイルと一致するようにその名前を変更します(たとえば、実行可能ファイルがという名前のfoo.exe場合、ファイルはfoo.exe.config)。 NET構成マネージャーは、実行時に設定を取得するときに検索します。

VS設定エディターで設定を変更するapp.configと、およびの両方が更新されSettings.csます。(で生成されたコードのプロパティアクセサーをSettings.cs見ると、app.configファイルにある設定のデフォルト値を含む属性でマークされていることがわかります。)app.configファイルを直接編集して設定を変更した場合、Settings.cs更新されませんが、新しい値は実行時にプログラムによって使用されます。コンパイル時にapp.configコピーさfoo.exe.configれるためです。これをオフにすると(ファイルのプロパティを設定して)、直接編集して設定を変更できます。foo.exe.configビルドディレクトリ内のファイルをます。

次に、ユーザースコープの設定があります。

アプリケーションスコープの設定は読み取り専用です。プログラムは、ユーザースコープの設定を変更および保存できるため、各ユーザーが自分の設定を持つことができます。これらの設定はfoo.exe.configファイルに保存されません(Vistaでは少なくとも、プログラムはサブディレクトリに書き込むことができないため)Program Files昇格なしの)。これらは、ユーザーのアプリケーションデータディレクトリの構成ファイルに保存されます。

そのファイルへのパスは%appdata%\%publisher_name%\%program_name%\%version%\user.config、例えばC:\Users\My Name\AppData\Local\My_Company\My_Program.exe\1.0.0\user.configです。プログラムに厳密な名前を付けた場合は、このパスのプログラム名に厳密な名前が追加されます。


1
パスのMy_CompanyコンポーネントがデフォルトでMicrosoftになるようです。これを実際に機能するように変更する方法はまだ見つけていません。

1
user565869、ビジュアルスタジオで試してみて、プロジェクトプロパティのアプリケーションタブを開き、アセンブリ情報ボタンをクリックすると、会社を変更できるようになりますか?ソリューション内のプロジェクトごとにこれを繰り返します
gg89

15

フォルダ名のハッシュについて理解するためにブラウジングしているときに、私は(この回答を介し)出会いました:

http://blogs.msdn.com/b/rprabhu/archive/2005/06/29/433979.aspx

(編集:Wayback Machineリンク:https : //web.archive.org/web/20160307233557/http ://blogs.msdn.com:80/b/rprabhu/archive/2005/06/29/ 433979.aspx

user.configファイルの正確なパスは次のようになります。

<Profile Directory>\<Company Name>\<App Name>_<Evidence Type>_<Evidence Hash>\<Version>\user.config

どこ

<Profile Directory>-移動プロファイルディレクトリまたはローカルディレクトリです。設定はデフォルトでローカルuser.configファイルに保存されます。ローミングに設定を保存するにはuser.config、ファイル、あなたが設定をマークする必要があるSettingsManageabilityAttributeSettingsManageabilityのセットRoaming

<Company Name> -通常、 AssemblyCompanyAttribute文字列です(文字列はエスケープされ、必要に応じて切り捨てられることに注意してください。アセンブリで指定されていない場合、フォールバック手順があります)。

<App Name> -通常、 AssemblyProductAttribute(会社名と同じ注意事項)。

<Evidence Type> そして <Evidence Hash> -アプリドメインの証拠から導き出された、適切なアプリドメインとアセンブリの分離を提供する情報。

<Version>-通常、で指定されたバージョンAssemblyVersionAttribute。これは、並べてデプロイされたアプリの異なるバージョンを分離するために必要です。

ファイル名は常に「user.config」です。


残念ながらブログのリンクは壊れています。きっと面白かったと思います。
UweBaemayr

3

これは、ユーザーのホームフォルダーのApplication Dataフォルダー(xpの場合はC:\ documents and settings \ user、Windows Vistaの場合はc:\ users \ user)にあるアプリケーション名のフォルダーにあります。

ここにもいくつかの情報あります。

PS:-実行ボックスで%appdata%でアクセスしてみてください!


2

ええと、Settings.Default.Reset()を使用してデフォルト設定を復元することはできませんか?


1

すべての設定は、それぞれの.configファイルに保存されます。

.settingsファイルは、属している一連の設定に対して厳密に型指定されたクラスを提供するだけですが、実際の設定はapp.configまたは.configファイルに保存されています。

.settingsファイルを追加すると、設定がない場合はapp.configが自動的に追加され、設定が格納されます。


1

設定ファイルがWebアプリにある場合は、web.configファイルにあります(プロジェクトの真下。他のタイプのプロジェクトにある場合は、app.configファイルにあります(これもプロジェクトの下にあります)。 。

編集する

コメントで指摘されているように、デザイン時のアプリケーション設定は、Webアプリケーション以外のアプリケーションのapp.configファイルにあります。ビルドすると、app.configファイルが出力ディレクトリにコピーされ、yourexename .exe.config という名前が付けられます。実行時には、yourexename.exe.configという名前のファイルのみが読み取られます。


1
正しくありません。app.configの名前は[appname] .exe.configに変更されるため、実行中のアプリケーションにはapp.config設定ファイルはありません。とにかく、このファイルには、settings.settinsのApplicationScoped設定のみが含まれます。
アービター

@アービター:おそらく私は質問を誤解したかもしれませんが、アダムはデザイン時のデフォルトについて尋ねているように見えました。それらはapp.configに保存されます。ビルド時に、app.configファイルがビルドディレクトリにコピーされ、名前が(theapp.exe.config)に変更されます。ただし、そのファイルを直接編集する場合(およびVisual Studioで作業している場合)、次にビルドするときに内容が上書きされるリスクがあります。結論:デプロイされたアプリの場合(またはIDEの外部で実行している場合)、name.exe.configファイルを変更します)。あなたはVS、変更のいずれかの設定で、デフォルト値、またはapp.configをで作業している場合
JMarsch

0

2つのファイル:1)app.configまたはweb.configファイル。彼女の設定は、ビルド後にテキストエディターでカスタマイズできます。2)settings.designer.csファイル。このファイルには、設定ファイルから設定をロードするための自動生成コードがありますが、設定ファイルに特定の設定がない場合のデフォルト値も存在します。


0

既に回答済みですが、設定デザイナーの設定を同期してデフォルト設定に戻すことはできませんか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.