2009-11-26 4 views
4

최근에 유지 관리 할 프로그램이 많았으며 몇 가지 모범 사례를 채택하는 데 도움을 얻으려고합니다. 그들은 본질적으로 공통 DLL을 사용하여 앱이 모두 공유하는 일련의 설정을 관리하는 3 개의 독립적 인 소프트웨어입니다. DLL은 다음과 같이 작동합니다. 사용자 설정 파일 (Windows의 사용자 구성 폴더에 깊게 묻혀있는 XML 파일)과 하드 코드 된 경로 (egad!)로 지정된 수정 파일을 서로 바꿉니다.여러 프로그램에 대한 C#의 중앙 집중식 설정

사용자 설정이이고 앱 설정이 아닌 이유를 뒷받침하는 이론적 근거는 DLL을 여러 위치 (하나의 앱에서 사용할 수 있음)에서 찾을 수 있으므로 사용자 설정 파일이 일반적인 것입니다 (모두 DLL의 복사본은 동일한 컴파일입니다), 응용 프로그램 설정을 사용하면 DLL 사본만큼 많은 app.config 파일이 생깁니다.

나는 이러한 구성을 중앙 집중화하고 무의미한 파일 교환을 끝내는 더 좋은 방법을 생각하고 있습니다. 하나의 접근 방식 (실제로, 가장 가능성이 가장 높은 접근 방식)은 모든 3 개의 응용 프로그램을 재 설계하여 모두 자체 "app.config"와 함께 중앙 DLL을 사용하는 것입니다. 다른 더 많은 추천 장소가 있습니까?

+0

응용 프로그램을 실행하면 .exe에 대한 app.config 만로드됩니다. 설정은 사용하는 모든 dll에 대해 별도의 .config 파일에서로드되지 않습니다. – ScottS

+0

DLL마다 설정이 여러 개있는 머신을 사용하도록 설정 했습니까? 나는 지금 내 맥북에있어 확인할 수 없다. – user7116

+0

@ScottS :이 설정은 앱이 아니라 DLL에 속합니다. – MPelletier

답변

7

Windows 레지스트리 사용을 고려해 보셨습니까? 우리는 모두 그것을 싫어하지만, 중앙 집중식이므로 응용 프로그램간에 쉽게 설정을 공유 할 수 있으므로이 경우 최상의 옵션 일 수 있습니다.

EDIT : 레지스트리가 마음에 들지 않는다면 (그리고 나는 당신을 비난하지 않습니다.) 애플리케이션 데이터 특수 폴더 아래의 디렉토리에 XML 또는 기타 구성 파일을 만들 수 있습니다. 이것은 요즘 내가 아는 한이 일을하는 방법입니다. 그것은 닷넷 DLL을인지

string appData = Environment.GetFolderPath(
    Environment.SpecialFolder.LocalApplicationData)); 
string folder = "MyApplicationName"; 
string fileName = "settings.xml"; 
string path = Path.Combine(Path.Combine(appData, folder), fileName); 
+0

있다, 오히려 그래도. 나는 일반적인 생각이 레지스트리에서 벗어나는 것이라고 생각했다. 나쁜 생각은 아니지만 다른 옵션을보고 싶습니다. – MPelletier

+1

레지스트리에 또 하나의 다리를 달아주는 것이 싫지만, 아마도 이것이 가장 좋은 답변 일 것입니다. 내 엉덩이. ;) – jrista

+2

@MPelletier : 중앙 집중식 구성으로 가면 레지스트리가 최상의 옵션이라고 생각합니다. 데이터베이스를 사용하고, 자신의 구성 프레임 워크를 작성하고, 사용자 지정 방식으로 구성을 저장할 수 있습니다. 등. 레지스트리는 Windows에 편재되어 있습니다 ... 바로 거기에 있으며 쉽게 액세스 할 수 있습니다. 그것으로 잘못 가기가 어렵습니다. 나는 당신이 미래에 더 나은 해결책을 내놓을 수 있도록, 레지스트리 접근에 대한 래퍼 작성을 권할 것이다. 그렇게하면 응용 프로그램에 덜 영향을 미칩니다. – jrista

2

이 정확한 문제를 들어, 당신이 GAC를 사용할 수 있습니다, 이것은 당신의 DLL을 중앙 집중화 것이다. 모든 소프트웨어는이 DLL에 액세스 할 수있는 위치를 알 수 있습니다. 이렇게하면 리팩토링 할 수 있습니다.

이것은 에 대해서만 패치입니다.이 문제는입니다. 나는 새로운 발달을 위해 이것을 추천하지 않을 것이다.

GAC in Wikipedia

+0

다른 앱에는 여전히 별도의 작업 디렉토리와 설정 파일이 있으므로 설정을 찾는 문제는 그대로 유지됩니다. –

+1

나는 그것을 이해하기 때문에 DLL이 구성의 중심점이다. GAC에 넣으려면 모두 DLL에 있기 때문에 모두 중앙 집중화됩니다. –

2

당신은 일반적인 파일에 설정을 사용할 수 있습니다 - 대부분 사용자 설정에서의 AppData에 저장 여기 장점은 당신이 어떠한 코드를 수정하지 않아도됩니다

폴더.

정상 설정 파일에 설정을 저장하고 DLL 설정에 대한 일반적인 파일을 참조 할 응용 프로그램 :

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings file="commondll.config"> 
    <add key="KeyToOverride" value="Original" /> 
    <add key="KeyToNotOverride" value="Standard" /> 
    </appSettings> 
</configuration> 

후 일반적인 파일 commondll.config에서 : 아마도

<appSettings> 
    <add key="KeyToOverride" value="Overridden" /> 
    <add key="KeyToBeAdded" value="EntirelyNew" /> 
</appSettings> 
관련 문제