2011-10-24 28 views
7

私はC#を使用してサービスを書く途中にあり、のapp.configファイル内に文字列のリストを格納する必要があります。私はこれらの161を持っています。C#のアプリケーション構成 "app.config"ファイル...コレクションの格納方法?

この情報をapp.configファイルに保存するにはどうすればよいですか?これらは強く型付けされた値であるため、コードに有効な.NETタイプを簡単に使用してアクセスする必要があるため、方法が必要です。

明白なパフォーマンスの問題のためにコンマ区切りリストを使用する1つの値を使用しないようにしたいと思います。

+0

コンマ区切りのリストはパフォーマンスにどのような影響を与えますか?以前は設定ファイルにカンマで区切った文字列を使用していましたが、パフォーマンス上の問題は気になりませんでした。 – Tim

+0

@Tim - おそらくこれのドライバではないが、161項目の場合、コンマ区切りのリストはapp.configファイルの最も洗練された解決策ではないと私は同意します。 app.configがXMLであり、とにかくデシリアライズされるとすれば、データをXML内に格納するほうがはるかにいいです。 – Fenton

答えて

11

私はあなたのプロジェクトのプロパティノードを展開し、ソリューションエクスプローラで2010

  1. MicrosoftのVisual Studioのを使用しています。

  2. ソリューションエクスプローラで、新しい設定を追加したい.settingsファイルをダブルクリックします。このファイルのデフォルト名はです。設定。設定です。 セッティングデザイナー

  3. 、あなたの設定の値名前タイプ範囲、およびを設定します。各行は単一の設定を表します。

  4. 必要なタイプはSystem.Collections.Specialized.StringCollectionです。 をクリックした後にこれを見つけることができますをクリックしてをクリックしたときに表示されるドロップダウンリストの最後にブラウズします。

  5. TextBoxの最後に表示されるボタンをクリックします。

  6. 表示されるダイアログで文字列に1つずつ入力します。

This is how it goes.

10

基本的にBest Way Of Saving Lists in App.Config

であなたのapp.configファイルにリスト(または任意のカスタムオブジェクト)を格納するの良い資料では、データを表すオブジェクトを作成し、そこです。

public class MyConfig 
{ 
    public string[] myList; 
    public string someOtherValueIfYouWant; 
} 

そして、それのためのコンフィグハンドラを作成...

public class ConfigSectionHandler : IConfigurationSectionHandler 
{ 
    public const string SECTION_NAME = "MyConfig"; 
    public object Create(object parent, object configContext, XmlNode section) 
    { 
     string szConfig = section.SelectSingleNode("//MyConfig").OuterXml; 
     MyConfig retConf = null; 

     if (szConfig != string.Empty || szConfig != null) 
     { 
      XmlSerializer xsw = new XmlSerializer(typeof(MyConfig)); 
      MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(szConfig)); 
      ms.Position = 0; 
      retConf = (MyConfig)xsw.DeSerialize(ms); 
     } 
     return retConf; 
    } 

} 

そして、これはあなたのapp.configファイルに次のXMLを配置することができます...

アプリを教えてください。あなたのクールconfigセクション

<configSections> 
    <section name="MyConfig" type="ConfigSectionHandler,someAssembly" /> 
</configSection> 

そして追加configセクションに関する設定...

<MyConfig> 
    <myList>First one</myList> 
    <myList>Second one</myList> 
    <myList>Keep going</myList> 
    <myList>And so on</myList> 
    <someOtherValueIfYouWant>some non array config</someOtherValueIfYouWant> 
</MyConfig> 
+1

警告:このトピックでは、System.Configuration.IConfigurationSectionHandlerインターフェイスを使用します。このインターフェイスは、.NET Framework Version 2.0で廃止されました。 System.Configuration.ConfigurationSectionクラスを使用する例については、「方法:ConfigurationSectionを使用してカスタム構成セクションを作成する」(http://msdn.microsoft.com/en-us/library/2tw134k3(v=vs.100).aspx)を参照してください。 ) – woohoo

-3

https://stackoverflow.com/a/30178144/878539

StringCollectionはannoyance'nessときのためにVS2015RCにませをお勧めしますプロジェクトのプロパティ設定ダイアログウィンドウをロードし、データを再保存します。 serializeAs = "Xml"という項目がある場合は、プロパティウィンドウを開くたびに上書きするかどうかを示すダイアログボックスがポップアップ表示されます。はい/いいえは絶対に何もしません。

各ファイルのデータが一致しないため、この問題は解決されており、既知の問題です。私の他のポスト関連を参照してください。

私はVS2010を使用していて、そのように提案していますが、十分な担当者がいないため、VS2015RCを通って上がっています。

カスタム設定ストレージなどの回避策を使用するか、コレクションをデザイナーまたはapp.configから退出させる方法を見つけることができます。どちらか一方。

実行可能な解決策は、ダイアログウィンドウを表示したり、設定プロパティ情報を編集したりすることはほとんどありません。

商用プロジェクトにどのような種類のプロダクションやリリースをお勧めしますか? :P

関連する問題