6

저는 거의 일주일 동안 applicationSettings에 관한 기사, 포럼 게시물을 읽었습니다.클래스 라이브러리의 applicationSettings를 호스트 실행 파일의 config 파일에 병합하는 방법

거의 모든 스레드에는 클래스 라이브러리가 배포 될 때 구성 파일을 가질 수없고 디자인시 구성되는 applicationSettings가 실행 파일 .exe.config 구성 파일에 지정/병합되어야 함을 올바르게 지적한 것으로 나타났습니다. dll을 호스트/소비하는 응용 프로그램

반드시 그렇지는 않습니다.

사용자가 어셈블리에서 하드 코딩 된 DefaultValueAttribute를 사용하여 지정된 값을 "덮어 쓸"방법을 제공하지 않는 한 클래스 라이브러리 설정을 병합 할 필요는 없습니다.

매우 간단하고 실용적인 예입니다. VB.NET을 사용합시다 1. ClassLibrary라는 클래스 라이브러리 프로젝트를 만들었습니다. 2. 모든 파일을 표시하고 MyProject를 확장하고 Settings.settings를 두 번 클릭합니다. 3. 값이 "Hello!"인 응용 프로그램 유효 범위의 Message라는 설정을 추가합니다. 4. Class1.vb의의 속성 (자동으로 추가 된 클래스)

Public Class Class1 

    Public Shared ReadOnly Property Message As String 
     Get 
      Return My.Settings.Message 
     End Get 
    End Property 

End Class 
  1. 는 VB 윈폼 프로젝트를 만들고의 WinForm 호출을 만듭니다.
  2. ClassLibrary 프로젝트에 대한 참조를 추가하십시오.
  3. 이미 생성 된 Form1에 단추를 추가하고 두 번 클릭하십시오. 8 Button1_Click 핸들러에 코드를 추가하십시오. 이렇게 보일 것입니다. IDE에서 모든 것을 아름답게 작동 중에 지금

, "시작 프로젝트로 설정"

공공 Form1 클래스

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 
    MessageBox.Show(ClassLibrary.Class1.Message) 
End Sub 

최종 클래스

  • 유무의 WinForm. 이 솔루션을 실행하면 예상되는 Hello! 버튼을 누르면 가서 라이브러리의 app.config에서 "Good bye!"이라고 말하도록 설정을 변경하십시오. 솔루션을 다시 실행하면 "안녕히 가십시오!"라는 메시지가 나타납니다.

    그러나 WinForm 프로젝트를 마우스 오른쪽 단추로 클릭하고 "탐색기에서 열기"를 선택하고 디버그 폴더로 이동하십시오. 아직 WinForm.exe.config 파일이 없습니다. 빨리 하나 만들어 보겠습니다. VS로 다시 전환하고 WinForm 프로젝트가 선택된 상태에서 모든 파일 표시를 클릭하십시오. MyProject를 확장하고 Settings.settings를 열고 설정을 작성한 다음 (do what does matter) 저장하고 저장하십시오. App.config가 만들어졌습니다.이 솔루션을 빌드하면 Debug 폴더에 WinForm.exe.config가 포함됩니다.

    것은 내가 그래서이의 WinForm에서의 값을 설정하는 메시지를 변경할 수의 WinForm의 설정

    <configuration> 
        <configSections> 
         <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > 
          <section name="WinForm.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
         </sectionGroup> 
        </configSections> 
        <startup> 
         <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client" /> 
        </startup> 
        <applicationSettings> 
         <WinForm.My.MySettings> 
          <!--<setting name="A" serializeAs="String"> 
           <value>A</value> 
          </setting>--> 
         </WinForm.My.MySettings> 
        </applicationSettings> 
    </configuration> 
    

    에 클래스 라이브러리 구성

    <configuration> 
        <configSections> 
         <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > 
          <section name="ClassLibrary.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
         </sectionGroup> 
        </configSections> 
    
        <applicationSettings> 
         <ClassLibrary.My.MySettings> 
          <setting name="Message" serializeAs="String"> 
           <value>Hello!</value> 
          </setting> 
         </ClassLibrary.My.MySettings> 
        </applicationSettings> 
    </configuration> 
    

    에서 설정 내 메시지를 병합하는 방법을 말해.exe.config를 다른 것으로 변경하면 응용 프로그램은이 새 값을 표시하여 DefaultValueAttribute를 재정의합니다.

  • 답변

    3

    최근에이 applicationSettings 문제에 대한 조사를 수행했습니다. 나는 내가 원하는 것을하는 비교적 편리한 두 가지 방법을 발견했다. 나는 그것에 관한 나의 생각을 함께두고 블로그 항목 here를 썼다.

    +0

    링크 된 블로그 게시물에는 두 가지 방법이 있으며 두 번째 방법은 저에게 효과적입니다. 링크가 끊어지는 경우 "applicationSettings configSource"를 검색하여 관련 정보를 찾습니다. – HotN