6

私のプロジェクトには、コードから参照されたとき (つまり、値を確認できるオブジェクトの上にカーソルを置いたとき) に、Properties.Settings ファイルの内容と同じではない設定があります。古い値です。設定エディターに移動して値を別の値に更新できますが、古い値が残ります。.Properties.Settings.Default.Save() メソッドを使用すると、設定は変更されますが、デバッグを停止すると、その変更はエディターに反映されません。Settings.settings ファイルをテキスト エディターで開くと、VS の設定エディターと同じものが表示されます。また、コンピューターで他の Settings.settings ファイルを検索すると、その 1 つだけが表示されます (他のファイルも表示されますが、それらは明らかに無関係であり、古い日付が変更されており、同じ設定名はありません)。

このファイルはどこにあり、値が本来あるべき値と異なるのはなぜですか?

編集:

元の設定変数を再度同期することができなかったので、設定 GUI インターフェイスを使用して新しい設定変数を作成しました。そして、それは適切に伝播しているようです。誰もが私が調べることを提案していたすべてのファイルには、設定変数に必要な値がありましたが、デバッグセッションを実行して同じ変数を見たとき、トレースできない古い値でした。

振り返ってみると、約 1.5 か月前に別の変数で同様の問題を経験しましたが、そのときはここまで深く掘り下げませんでした。私も同じことをしなければなりませんでした。同じような名前の新しい変数を作成し、古い変数を削除して移動します。

編集2:

設定変数名を変更し、VSがその変更をプログラムを介して独自に伝播させることも、一種のハードリブートのようです。

4

4 に答える 4

10

設定ファイルが見つかりません。これは、プロジェクト ファイルである Setting.settings という名前ではありません。「user.config」という名前が付けられ、次のような奇妙な名前のディレクトリに保存されます。

C:\Users\HPassant\AppData\Local\MyCompany\
WindowsFormsApplication1._Url_ghbcotszbdzyqv2ovpc1keo1yctxkcw5\1.0.0.0

ここで、"HPassant" はユーザー名、"MyCompany" は [AssemblyCompany] 属性、"WindowsFormsApplication1" はプロジェクト名で、その後にさまざまな値のハッシュ、[AssemblyVersion] が続きます。Reflector または ILSpy でアルゴリズムを確認できます。ClientConfigPaths クラス コンストラクターを参照してください。

于 2011-09-06T20:24:14.420 に答える
3

デフォルトの Properties.Settings 値は、 の値によってオーバーライドされますapp.config

デプロイされたアプリケーションのapp.config名前が に変更された場合はYourApplicationName.exe.config、アプリケーション パラメータの構成を処理するための推奨される方法です。

于 2011-09-06T18:15:58.750 に答える
1

@Albin Sunnanbo が説明したように、設定を保存すると、設定は YourApplicationName.exe.config に保存されます。

したがって、 Settings.Default.Save() を呼び出すと、プロジェクトの app.config ではなく、このファイルが変更されます。バイナリには app.config の知識がなく、デプロイされたコピーのみを気にします。

設定変数には複数のスコープがあります。スコープを Application に設定すると、この値の「インスタンス」は 1 つだけになります。これをユーザーに設定すると、一意の Windows ユーザーごとに独自の設定のコピーが作成されます。

app.config / Properties.Settings で提供するものはデフォルト値です。これらは、Settings.Default.Save() を呼び出すと、YourApplicationName.exe.config で上書きされます。

デバッグ時に、/bin/debug フォルダーに YourApplicationName.exe.config が見つかります。そこを見ると、アプリケーションの値が app.config の値ではなく、このファイルの値と同じであることがわかります。

于 2011-09-06T19:15:42.000 に答える