0

現在使用している設定ファイルを appconfig ファイルに移行したい。現時点では、そのコピーを作成しようとしていますが、これまでのところ、Config' Manager を使用してファイルに書き込むことさえできません。

私がする必要があるのは、最初にファイルを作成してから書き込み、最後に既に存在するファイルを更新することです!. かなり単純に思えますが、これまでのところ、毎回私を避けています。これまでに言及したすべての資料は、すべて存在すると想定しています。MS MCTS リファレンス ブックにも、サンプル用に既に作成された構成ファイルがあります。

それを作成し、十分な権限があると仮定して、アプリケーションのデフォルトの bin フォルダーに書き込むプログラム的な方法はありますか。

例を見るととても簡単に見えますが、問題のファイルのタイムスタンプを見ると....彼の頭をかきむしっています...脱帽です!

つまり、それらは異なるタイプの構成ファイルですか? 私は web.config と app.config を知っていますが、人々はこの単純な命名テンプレートから実際にどれだけ逸脱していますか?

返信ありがとうございます。イブラー

4

5 に答える 5

5

まず第一に、あなたapp.configは設定ファイルだと言います。そうではない。これは、コンパイル中に構成ファイルを作成するために VS によって使用される Visual Studio 内のソース ファイルです。コンパイル中に、Visual Studio が app.config を検出すると、それをコンパイルの出力フォルダーにコピーし、名前を次のように変更します (アセンブリの完全修飾名がNameSpace.your.applicationName.

NameSpace.your.applicationName.exe.config

これは、探しているファイルであり、作成中のカスタム コードで読み取り/書き込みを行う必要があります。

他の回答が言及しているように、これを行うには注意してください。それは些細なことではありません。このファイルは、CLR がアプリケーションの構成を管理するために使用する完全なシステムの一部にすぎず、簡単に台無しにすることができます。

最後に、 という構成ファイル要素を調査してくださいconfigSource。これを使用すると、 app.config に要素を配置して、構成システムを「リダイレクト」して、特定の構成セクションを別のファイルで探すことができます。app.config の section 要素を次のように変更して使用します。

<MyConfigSectionName configSource="ConfigFolder\MySpecConfigFile.xml" />

または、既存の .Net 構成セクションを別のファイルに移動するには、

<appSettings configSource="ConfigFolder\MyAppSettings.xml" />

次に、必要な設定を含む別の構成ファイルを作成し、そのファイルを開いて読み取り、書き込みを行うことができます...

ファイル MyAppSettings.xml の内容:

<?xml version="1.0" encoding="utf-8" ?>

<appSettings>
  <add key="limitToSingleInstance" value="true"/>
  <add key="maximumCacheFiles" value="1000"/>
  <add key="maximumThreadCount" value="5"/>
</appSettings>
于 2009-12-09T14:59:46.697 に答える
1

カスタム構成ファイルを作成し、いくつかの構成データを保存してから、必要に応じてそれを作成するためにいくつかの if exists ステートメントと共に読み戻す方法の例を次に示します。これを C# に変換するのはそれほど面倒ではないことを願っています。

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    If System.IO.File.Exists(System.IO.Directory.GetCurrentDirectory() + "\Settings.Config") Then
        FileOpen(1, System.IO.Directory.GetCurrentDirectory() + "\Settings.Config", OpenMode.Random, OpenAccess.ReadWrite)
        FileGet(1, SettingVar1, 1)
        FileGet(1, SettingVar2, 2)
        FileGet(1, SettingVar3, 3)
        'etc
        FileClose(1)
    Else
        FileOpen(1, System.IO.Directory.GetCurrentDirectory() + "\Settings.Config", Openmode.Random, OpenAccess.ReadWrite)
        FilePut(1, "Static Setting to write", 1) 'insert a string
        FilePut(1, 3, 2) 'insert a number
        FilePut(1, New DBMC, 3) 'Any object
        'etc...
        FileClose(1)
    End If
End Sub

.NET には、VB が参照できる組み込みの設定ファイル (My.Settings) があり、これと同じことを行いますが、コードを使用してファイルを管理するオーバーヘッドはありません。設定変数を保存するためのレジストリ (勇気があり、プログラムがアンインストールされたときにレジストリをクリーンアップすることを約束する場合) や、これを行うための他の多くの正しい方法もあります。

また、多くの開発者はランダム アクセス ファイルの使用に難色を示しており、大きなランダム アクセス ファイルに関連する特定のオーバーヘッド コストのために、一般的にはあまり使用されていないことに注意してください。ただし、簡単にするために、ランダムアクセスファイルは、構成ファイルを作成および制御するための非常に理解しやすい方法です。

于 2009-12-09T15:21:16.257 に答える
1

動作しました。

1) まず、設定ファイルをプロジェクトに追加します。

2) アプリケーションの名前に名前を付けるか、名前を変更します。

3) .config で終わっていることを確認してください

4) 出力フォルダーにコピーされるように、構成ファイルのプロパティを設定します。

5) プロジェクトがプロジェクト参照の下の構成アセンブリを正しく参照していることを確認します。

6) 構成オブジェクトを次のように作成します。

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

--> 今のところ、列挙オブジェクトの "None" のままにしておきます...後で別のユーザーなどで実験してください。

7) プロジェクトをデバッグして数回実行し、構成オブジェクトが構成ファイルを正しく取得し、そのファイル パス プロパティが構成ファイルの場所を正しく指していることを確認します。したがって、実行時には、これは \bin\debug\ の下になります .... -----> has ffile プロパティもチェックし、それが true であることも確認します。

8) この段階で、構成オブジェクトが適切にセットアップされ、準備が整いました。ここで、キーと値のペアの概念を使用して Hashtable または Dictionary にエントリを追加するかのように、エントリを追加します。

config.AppSettings.Settings.Add("Key", "Value");

9) サンプル テスト データを追加したら、最後に行うことは構成を保存することです。

config.Save();

10) 最後に、ビルド出力フォルダーに移動し、ファイル構成ファイルが変更されているかどうかを確認します。

更新:出力ディレクトリにあるvshost.exeファイルが混乱する可能性があることに気付くかもしれません。構成オブジェクトが構成ファイルではなく、これらのxmlファイルの1つを指していることに気付いたからです。VS IDE の外部では、vhsost ファイルが展開されず、使用されないため、これは問題ありませんが、IDE では、そこですべてを機能させることができます。これが発生した場合は、以下の私の投稿に従ってください。

それは私が多かれ少なかれ探していた答えでした...とにかく私が得たすべての返信に感謝します。

于 2009-12-14T17:35:40.587 に答える
0

私は自分で構成ファイルに頭を悩ませました。最後に、私は単に独自の設定クラスを作成し、必要に応じてディスクとの間で XML として (逆) シリアル化することを選択しました。

独自の設定ファイルをシリアル化する際の考慮事項:

  • より柔軟
  • もっとコードを書かなければならない
  • タイプ セーフ (文字列 ID ではなく、タイプによる設定を参照)

もちろん他にもたくさんの考慮事項がありますが、3番目は私のお気に入りです。

于 2009-12-09T14:49:38.337 に答える