2013-10-18 8 views
0

내 핵심 프로젝트에서 참조되는 두 개의 어셈블리로 구성된 타사 라이브러리가 있습니다. 어셈블리 중 하나는 내 핵심 프로젝트의 코드에서 정적으로 참조되며, 다른 어셈블리는 웹 프로젝트의 web.config에서만 사용됩니다. 그러면 핵심 프로젝트가 웹 프로젝트에서 참조됩니다.빌드에서 누락 된 어셈블리

두 번째 어셈블리가 없어져서 web.config를 파싱 할 수 없기 때문에 웹 앱을 시작할 때 앱이 다운되는 문제가 있습니다. 컴파일러는 코어 프로젝트가 느슨하게 web.config를 통해 링크 된 이후로 두 번째 어셈블리를 포함해야한다는 것을 이해할 수 없다고 생각합니다.

웹 프로젝트에 어셈블리를 추가하고 싶지는 않습니다. 왜냐하면 어셈블리가 긴밀한 결합이 될 것이기 때문에 어셈블리에 대한 종속성이있는 웹 프로젝트가 아니라 핵심 프로젝트입니다.

나는 (타사 어셈블리를 사용하는 핵심 프로젝트 클래스)를 해결하는 이런 짓을 :

static MyClass() 
    { 
     var dummy = typeof(ThirdPartyClass); 
     if (dummy == null) 
      throw new Exception("Do not remove reference to 'ThirdPartyClass'"); 
    } 

해킹,하지만 좋은 점의 약간 그것은 단지 핵심 프로젝트에 영향을 미치는 것입니다 그것의 이 프로젝트는이 제 3 자 lib에 대한 지식이 있어야하는 유일한 프로젝트입니다. throw new Exception은 다른 개발자에게있어 제거 할 수 없다는 것을 이해하고 사용하지 않은 경고를 처리합니다.

제 질문은 이것이 올바른 해결책입니까 아니면 더 좋은 것이 있습니까?

편집 : DLL이 bin 디렉토리에 있지 않기 때문에 만들어진 작은 헬퍼 클래스

public static class Util 
{ 
    public static void EnsureStaticReference<T>() 
    { 
     var dummy = typeof(T); 
     if(dummy == null) 
      throw new Exception(string.Format("This code is used to ensure that the compiler will include assembly")); 
    } 
} 
+0

postbuildevents? – giammin

+2

이것은 연결되어 있습니다. [상태 : 수정되지 않음으로 닫힘] (http://connect.microsoft.com/VisualStudio/feedback/details/652785/visual-studio-does-not-copy-referenced-assemblies-through-the-reference-hierarchy), 임시 해결책 : 빌드 후 단계. – CodeCaster

+0

빌드 이벤트가 마술 문자열로 복사 코드를 작성한다는 의미라면 위의 솔루션은 더 깨끗하게 고려해야합니까? – Anders

답변

0

아마 실패합니다. ThirdPartyClass.dll을 프로젝트에 추가 한 다음 "항상 복사"로 설정하십시오. 도움이 되길 바랍니다.

+0

언급 된 버그 때문에 CodeCaster가 작동하지 않습니다. – Anders