2011-08-05 9 views
2

.NET C#2008 Winフォームソリューションに複数のプロジェクトがあります。これらのプロジェクトの中には、プロジェクトプロパティ、設定UI部分(設定ファイルではなく)を通じて定義された設定があります。私は、これらの設定が現在設定されているものを表示するアプリケーション(ユーザーから隠れている)のデバッグ部分を構築しようとしています。私は、アセンブリのすべてを取得する以下のコードを持っている:.NETアセンブリからプロジェクト設定をロード

AssemblyName[] assemComponents = Assembly.GetExecutingAssembly().GetReferencedAssemblies(); 

foreach (AssemblyName assemName in assemComponents) 
{ 
    ListViewItem item = listComponents.Items.Add(assemName.Name); 
    item.SubItems.Add(assemName.Version.ToString());         
} 

は現在、このコードブロックは、単にアセンブリ名とコントロールでのバージョンのリストを置きます。しかし、これらのAssemblyオブジェクト(またはその他のもの)を使用すると、設定されているプロジェクト設定を取得できるかどうかを知りたいと思います。

ご協力いただきありがとうございます。詳細をお知らせください。

答えて

5

設定デザイナに項目を追加すると、Visual Studioはファイルにこれらの設定を読み書きするためのクラスを生成します。デフォルト値を保持するこのクラスのインスタンスにアクセスするための静的Defaultプロパティも含まれています。 (プロジェクトのSettings.Designer.csを参照してください)。

あなたは、これらのクラスを見つけて、反射でそれらを調べることができます。

foreach (AssemblyName assemName in assemComponents) 
{ 
    foreach (var type in Assembly.Load(assem).GetTypes()) 
    { 
     // look for classes that derive from SettingsBase named "Settings" 
     if (type.Name == "Settings" && typeof(SettingsBase).IsAssignableFrom(type)) 
     { 
      // get the value of the static Default property 
      var defaults = (SettingsBase)type.GetProperty("Default").GetValue(null, null); 

      // walk the property list and get the value from the Default instance 
      foreach (SettingsProperty prop in defaults.Properties) 
      { 
       Debug.WriteLine(string.Format("{0}: {1}", prop.Name, defaults[ prop.Name ])); 
      } 
     } 
    } 
} 
+0

素晴らしい!!私は私のプロジェクトでコードをテストし、それは完全に動作します。あなたの非常に迅速な対応に感謝します。乾杯! – Mark

関連する問題