2010-08-22 3 views
5

내가 내 모든 프로젝트에서 log4net를 사용하려면C# 솔루션 : 외부 DLL에 대해 하나의 "전역"프로젝트 사용?

(사소한 질문을 수도에 대한 미안 해요, 자바 & 메이븐에서오고, 여전히 C#을 종속성 주위에 내 마음을 포장하지 않은 경우). 모든 프로젝트에 dll을 추가하고 싶지 않기 때문에 "전역"프로젝트를 만들고 log4net.dll에 대한 참조를 추가하고 다른 모든 프로젝트에서 "전역"프로젝트를 참조했습니다.

그러나 다른 프로젝트의 log4net 클래스에 액세스 할 수 없습니다.

using Globals.log4net; 

작동하지 않는 것 같습니다.

내가 뭘 잘못하고 있니?

+1

'글로발'에서 log4net을 어떻게 노출 시켰습니까? – Oded

+0

어떻게하면됩니까? – Yossale

답변

3

DLL을 참조했다면 Globals 프로젝트에 대한 모든 참조와 함께 복사본을 얻었을 것입니다. 아직 이 아니며 라이브러리를 사용하고 있습니다.

일반적으로 내가 수행하는 것은 ILogger 인터페이스를 만들고, Globals 프로젝트에서 log4net을 사용하여 구현하고 다른 프로젝트 (구현을위한 테스트 구현을위한 모의 구현)에서 해당 구현을 사용합니다.

+1

참조를 추가하면 어셈블리가 참조 된 라이브러리에 따라 달라 지므로 어셈블리가 사용되는 모든 위치에 복사됩니다. 그러나 어셈블리가 참조 된 라이브러리의 모든 기능을 _expose _ 또는 _use_ 사용하지 않으면 해당 기능을 사용할 수 없습니다. – Oded

+0

좋은 해결책이지만 실제로 필요하지 않거나 원하는 것을 래퍼로 만드는 중입니다. – Yossale

+0

그러면 log4net을 필요로하는 모든 프로젝트에서 참조해야 할 것입니다. 그것은 의존성을 명확하게 만들고 어쨌든 당신이 필요로하는 것일 것입니다. 공유 된 코드와 기능을 위해'Globals'를 사용하십시오. – Oded

0

해당 시스템이 작동하지 않습니다. 모든 프로젝트에 대한 참조로 log4net dll을 추가해야합니다. 또는 훨씬 더 많은 작업 인 프록시 클래스를 작성하십시오.

0

GAC (전역 어셈블리 캐시)에서 읽으십시오.이 라이브러리는 프로젝트간에 공유되는 ... log4net DLL을 저장하는 곳의 중앙 저장소입니다. 그런 다음 DLL을 프로젝트 자체에 추가하지 않고도 사용해야하는 .config 파일 forevery 프로젝트에이 참조를 간단히 추가 할 수 있습니다. MSDN: Working with the Global Assembly Cache

2

나는 그것이 어떻게 작동하는지 그 아니다 두려워 :

이 시작하기에 좋은 장소입니다. DLL을 호출 할 모든 프로젝트에 DLL을 추가해야합니다.

DLL에서 몇 가지 기능 만 사용하는 경우 Globals 프로젝트에서 함수를 호출하여 호출 할 수 있습니다.

2

log4net은 단순히 참조로 전역에 '저장'되지 않습니다.

첫 번째 경향은 모든 프로젝트가 log4net을 참조하는 것일뿐입니다. 다른 프로젝트에서 숨길 필요가없는 종속성이 있음을 분명히합니다.

그러나 공통 논리가 클래스에 공유되어있는 경우 공유 라이브러리에 대한 참조를 포함하는 "전역"또는 "공통"클래스를 가질 수 있습니다. 이러한 라이브러리를 참조하려면 대상 네임 스페이스를 사용하십시오.

즉, 참조가 동일한 프로젝트 또는 다른 참조 프로젝트 내에 있더라도 사용 문은 동일합니다.

log4net 들어

난 그냥 있어야한다고 생각 :

using log4net; 

다른 방법은 도우미를 호출 한 후 적절한 참조가 somwhere 코드 (? Logger)에서 클래스 이름 중 하나를 입력하는 것입니다 추가하고 메뉴에서 "CTRL +"을 누르십시오. 또는 간단히 확장하여 적절한 using 문을 추가 할 수 있습니다.

관련 문제