2011-08-05 6 views
2

.NET C# 2008 Win Forms 솔루션에 여러 프로젝트가 있습니다. 이러한 프로젝트 중 일부는 프로젝트 속성, 설정 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 property도 포함됩니다. 프로젝트의 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

관련 문제