5

app.config.NET 4.0を使用していますが、このファイルを使用して同じパラメータ設定を保存したいと思います。私は次のことをします。Settingsプロジェクトプロパティのタブを使用してパラメータを作成します。

app.configこれにより、次のようにファイルに情報が追加されます。

<MyApp.Properties.Settings>
      <setting name="param1" serializeAs="String">
        <value>True</value>
      </setting>
<MyApp.Properties.Settings>

私のビューモデル(私のコード)では、次の方法で情報にアクセスできます。

bool myBool = MyApp.Properties.Default.param1;

設定ファイルの値を変更しようとすると、次のようになります。

Properties.Settings.Default.param1 = false;

ただし、これにより、param1読み取り専用のエラーが発生します。

では、コードから構成ファイルを更新するにはどうすればよいですか?

4

4 に答える 4

11

これが、「applicationSettings」セクションのapp.configにエントリを更新または追加するための私の関数です。もっと良い方法があるかもしれませんが、これは私にとってはうまくいきます。誰かがより良い方法を提案できるなら、それを共有してください、私たちは常により良いものを探しています。

    static string APPNODE = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name + ".Properties.Settings";
    static DateTime now = DateTime.Now;
    Utilities.UpdateConfig(APPNODE, "lastQueryTime", now.ToString());

    static public void UpdateConfig(string section, string key, string value)
    {
        Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

        ClientSettingsSection applicationSettingsSection = (ClientSettingsSection)config.SectionGroups["applicationSettings"].Sections[section];
        SettingElement element = applicationSettingsSection.Settings.Get(key);

        if (null != element)
        {
            applicationSettingsSection.Settings.Remove(element);
            element.Value.ValueXml.InnerXml = value;
            applicationSettingsSection.Settings.Add(element);
        }
        else
        {
            element = new SettingElement(key, SettingsSerializeAs.String);
            element.Value = new SettingValueElement();
            System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
            element.Value.ValueXml = doc.CreateElement("value");

            element.Value.ValueXml.InnerXml = value;
            applicationSettingsSection.Settings.Add(element);
        }

        config.Save(ConfigurationSaveMode.Modified);
        ConfigurationManager.RefreshSection("applicationSettings");            
    }
于 2013-04-18T18:48:11.547 に答える
5

さて、私はHari Gillalaのリンクを読みました。そこでは、あるユーザーがapp.configファイル(xmlファイル)を直接編集することを提案しました。

したがって、プロジェクトのプロパティ->設定で、必要なパラメータを作成します。次に、コードにパラメーターをロードするには、次のようにします。

_myViewModelProperty = MyApp.Properties.Settings.Default.MyParam1;

このようにして、configパラメーターの情報を簡単に読み取ることができます。入力されているので、disign時に、サインが正しいかどうかを確認できます。

de configファイルを更新するには、.NETのxmlライブラリを使用してapp.configファイルを編集します。

    System.Xml.XmlDocument xml = new System.Xml.XmlDocument();
    xml.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
    System.Xml.XmlNode node;
    node = xml.SelectSingleNode("configuration/applicationSettings/MyApp.Properties.Settings/setting[@name='myparam1']");
    node.ChildNodes[0].InnerText = myNewValue;
    xml.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);

このようにして、xmlドキュメント(xml変数)を作成し、app.configファイルの情報をロードします。次に、更新するノードを検索し、その情報(InnerTextプロパティ)を更新して、最後に変更を保存します。

このようにして、app.configを更新できます。ポータブルアプリケーションでは1人のユーザーのみが使用するため、これが必要です。アプリケーションを実行するすべてのコンピューターに構成を適用する必要があります。

于 2012-11-09T09:51:01.950 に答える
3

Properties.Settingsこのアクションを実行するには、を使用する必要があります。詳細については、このドキュメントを参照してください。

//modify
Properties.Settings.Default.param1 = false;
//save the setting
Properties.Settings.Default.Save();

設定にユーザーのスコープがあり、書き込み可能である必要がある場合、プロパティはローカル構成ファイルではなく、別の場所に保存されることに注意してください。詳細はこちらをご覧ください。

コメントとさらなる検索での議論の後に編集してください:

目的の結果を達成するための私の提案は、AppSettingsに切り替えることです。これは、いくつかの検索の結果、appsettingsがApplication Dataフォルダー内の.configファイルを変更することがわかったためです(私のマシンでいくつかのテストを実行すると、それが確認されます)。

この質問への回答のコメントを見てください。

回避策があるかどうかはわかりませんが、アプリケーションにポータブルapp.configファイルを持たせたい場合は、AppSettingsに切り替えるしか方法がないと思います。これにより、見つかったapp.configに変更を保存できると確信しています。プログラムフォルダにあります。

編集2:可能な解決策

私はあなたのアプリをポータブルにするための可能な解決策を見つけました![設定]で使用されるプロバイダーを変更して、アプリケーションの設定を保存し、カスタムプロバイダーを作成できます。

この質問への回答は、アプリケーション設定を移植可能にするためのコードへのリンクを提供します。やってみてください

于 2012-11-08T10:19:18.857 に答える
2

設定をユーザー設定としてマークします。

詳細な記事: http: //www.codeproject.com/Articles/25829/User-Settings-Applied

于 2012-11-08T10:16:59.623 に答える