2013-08-16 2 views
3

여기서는 비즈니스 프로세스를 실행하기 위해 많은 수의 콘솔 응용 프로그램을 빌드합니다. 대부분이 모두 동일한 성격을 가지며 응용 프로그램 서버에 배포되고 원본 데이터베이스에 액세스하며 준비된 데이터를 대상 DB에 배치합니다. 일부 액세스 파일 공유 등.콘솔 응용 프로그램을 사용하여 타사 라이브러리를 구성하는 가장 좋은 방법

설치가 완료되면 SAME logging 패키지 (log4net)를 계속 사용하고 싶습니다. 각 app.config에 config를 유지합니다. 그러나, 나는 나와 함께 log4net을위한 DLL을 "가지고 다닌다"는 것을 계속 발견한다.

내가 말하는 것은 새로운 프로젝트를 시작할 때 log4net에 대한 참조를 만들어야한다는 것입니다. 나는 log4net을 GAC에 넣거나 완전히 내 dev 컴퓨터에 설치하지 않기로 결정했다. 대신 디렉토리에 전체 다운로드 패키지가 있고 일반적으로 다음을 수행합니다.

DLL을 가져 와서 내 콘솔 앱 프로젝트에/lib 디렉토리를 만들고 그 내용을 참조합니다.

로컬로 DLL을 복사하기 때문에 올바른 버전이 있다는 것을이 솔기의 윗부분은 항상 알 수 있습니다. 나는 또한 프로젝트에서 그것을 점검한다.

그러나 단점은 각 프로젝트에 각각/lib 디렉토리가 있고 대개 동일한 DLL이있는 것입니다.

내가 뭘 잘못하고 있니? 솔루션/프로젝트 개발에 대한 전체 아이디어가 누락 되었습니까? 내 프로젝트가 모두 너무나 다르기 때문에 모두 한 가지 솔루션으로로드하는 것을 원하지 않는다.

다른 사람들이이 문제를 어떻게 해결하는지 궁금합니다.

답변

1

ilmerge을 보았습니까? log4net.dll을 독립 실행 형으로 만들 수 있도록 실행 파일에 ilmerge 할 수 있어야합니다.(빌드 후 단계 등)

사용 예제 :

"$(SolutionDir)Lib\ilmerge" /targetplatform:v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319 /out:$(ProjectDir)bin\Merged\MyExe.exe MyExe.exe log4net.net40.dll 
+0

흠, 내가 질문을 오해. 우리는 Solution/Lib 디렉토리를 가지고 있습니다. 별도의/duplicate/lib 디렉토리를 갖는 것은 나쁘지 않습니다. IMO, 좋았어. 시간이 허락하는 한 독립적으로 각 프로젝트를 업그레이드 할 수 있습니다. 또한 패키지 관리를 위해 NuGet을 살펴보아야 할 것 같습니다. 특히 패키지 복원 : http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages –

+0

예, 실제로 이것이 우리의 목적을위한 최선의 방법이라고 생각합니다. 나가 나가 놓쳤다 거기 정당한 정연한 간계가 있는지 다만보고 싶었다. NuGet을 조사 할 계획입니다. –

1

DLL을 수용하기 위해 모든 콘솔 프로젝트에 대한 lib 폴더를 만드는 것이 시스템에 로컬로 존재한다는 것을 제외하고는 실제 목적을 달성하지 못합니다. 조직에 대해 걱정이된다면 아마도 최악의 상황이 될 것입니다. 개발 컴퓨터와 응용 프로그램 서버에 DLL의 중복 복사본이 여러 개 있기 때문입니다. 모두 동일합니다.

그리고 log4net이 업데이트를 릴리스하면 어떻게 될까요? 그런 다음 log4net, 재구성 및 재배포에 대한 모든 독립/실제 복사본과 참조를 업데이트해야합니다. 그리고 log4net 이외의 여러 타사 DLL을 사용하는 경우 문제는 최악입니다.

즉, 타사 참조를 추가하면 컴파일 할 때마다 DLL이 빌드 폴더에 로컬로 복사되고 콘솔 프로그램은 해당 로컬 복사본을 사용하게됩니다. 직접 확인해보고 참조의 Copy Local 속성 (true로 설정해야 함)을 보면 확인할 수 있습니다. 그래서 기본적으로, 당신은 VS가 이미 당신을 위해서하는 여분의 일을하고 있습니다.

내가 할 수있는 일은 모든 제 3 자 DLL을 개발자 컴퓨터의 중앙 디렉토리에 저장하고 콘솔 응용 프로그램을 만들 때마다 그 파일에 대한 참조를 추가하는 것입니다. 배포 할 때마다 DLL의 로컬 복사본이 함께 배포됩니다. 새로운 타사 dll 릴리스가있는 경우에도 각 솔루션의 각 참조를 업데이트하고 다시 작성하고 응용 프로그램 서버에 다시 배포해야합니다. 그러나, 차이점은 하나의 물리적 사본 업데이트 중!

관련 문제