2017-11-03 23 views
0

C# 사용자 정의 구성에서 새로운 기능입니다.App.config 사용자 정의 섹션의 유형은 무엇입니까?

간단한 예제를 만들고 싶습니다. 할 수 없습니다 ... https://stackoverflow.com/a/25806445/6121574

지금 내가 유형 'System.Configuration.ConfigurationErrorsException'의 처리되지 않은 예외가 System.Configuration.dll 에서 발생 를 얻을 :이 같은 구성 파일에 액세스, https://stackoverflow.com/a/14890095/6121574 그러나 : 나는이 시도 파일 또는 어셈블리로드 My.Assembly

제 질문은 : App.config 파일의 My.Assembly 란 무엇입니까? 내 코드를 작동시키는 방법?

using System; 
using System.Collections.Generic; 
using System.Configuration; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 



namespace My 
{ 
    public class MyConfigSection : ConfigurationSection 
    { 
     [ConfigurationProperty("", IsRequired = true, IsDefaultCollection = true)] 
     public MyConfigInstanceCollection Instances 
     { 
      get { return (MyConfigInstanceCollection)this[""]; } 
      set { this[""] = value; } 
     } 
    } 
    public class MyConfigInstanceCollection : ConfigurationElementCollection 
    { 
     protected override ConfigurationElement CreateNewElement() 
     { 
      return new MyConfigInstanceElement(); 
     } 

     protected override object GetElementKey(ConfigurationElement element) 
     { 
      //set to whatever Element Property you want to use for a key 
      return ((MyConfigInstanceElement)element).Name; 
     } 
    } 

    public class MyConfigInstanceElement : ConfigurationElement 
    { 
     //Make sure to set IsKey=true for property exposed as the GetElementKey above 
     [ConfigurationProperty("name", IsKey = true, IsRequired = true)] 
     public string Name 
     { 
      get { return (string)base["name"]; } 
      set { base["name"] = value; } 
     } 

     [ConfigurationProperty("code", IsRequired = true)] 
     public string Code 
     { 
      get { return (string)base["code"]; } 
      set { base["code"] = value; } 
     } 
    } 

    class Program 
    { 


     static void Main(string[] args) 
     { 
      var config = ConfigurationManager.GetSection("registerCompanies") 
        as MyConfigSection; 

      foreach (MyConfigInstanceElement e in config.Instances) 
      { 
       Console.WriteLine("Name: {0}, Code: {1}", e.Name, e.Code); 
      } 

     } 
    } 
} 

의 App.config 내

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="registerCompanies" 
      type="My.MyConfigSection, My.Assembly" /> 
    </configSections> 
    <registerCompanies> 
    <add name="Tata Motors" code="Tata"/> 
    <add name="Honda Motors" code="Honda"/> 
    </registerCompanies> 
</configuration> 

답변

0

프로젝트 이름이 "My"인 경우. 이 설정으로 작동합니다. 3 시간 후 해결책을 찾았습니다. :)

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="registerCompanies" 
      type="My.MyConfigSection, My" /> 
    </configSections> 
    <registerCompanies> 
    <add name="Tata Motors" code="Tata"/> 
    <add name="Honda Motors" code="Honda"/> 
    </registerCompanies> 
</configuration> 
0

유형 속성에 대한 스트링의 첫 번째 부분은 입력 그 자체이고, 즉 타입을 포함하는 어셈블리가 이어진다. 당신의 유형은 Company.Project.Configuration.Settings, 그리고 그이 Company.Project.dll의 어셈블리에 보관 한 경우에, 당신이 사용하는 것이

"Company.Project.Configuration.Settings을 Company.Project"