2009-11-23 4 views
46

나는 API를 통해 다른 응용 프로그램에 약간의 확장 성을 추가하는 프로젝트를 가지고 있습니다. 그러나 대부분의 코드가 동일하기 때문에 여러 버전의 응용 프로그램에 동일한 프로젝트를 사용할 수 있기를 원합니다.Visual Studio의 빌드 구성을 기반으로 어셈블리 참조를 지정하는 방법이 있습니까?

그러나 응용 프로그램의 각 버전에는 해당 버전의 소프트웨어에 대한 적절한 어셈블리에 대한 참조가 필요합니다. 어셈블리를 GAC에로드하므로, 어셈블리를 빌드 구성에 따라 사용할 수 있다고 지정하더라도 괜찮습니다. VS 내부에서이 작업을 수행 할 수있는 방법이 있습니까? 아니면 외부 빌드 도구가 필요합니까?

답변

54

이렇게하는 방법이 있지만 프로젝트 파일을 직접 편집해야합니다. 프로젝트 파일은 Condition 속성을 참조 용 요소를 포함하여 여러 요소에 적용 할 수 있습니다.

<Reference Include="Product, Version=1.0.0.0" Condition="'$(Configuration)'=='V1'"> 
</Reference> 
<Reference Include="Product, Version=2.0.0.0" Condition="'$(Configuration)'=='V2'"> 
</Reference> 
<Reference Include="Product, Version=3.0.0.0" Condition="'$(Configuration)'=='V3'"> 
</Reference> 

그런 다음 여러 빌드 설정 (V1, V2, V3)를 정의하고 각 참조는 관련에만 포함됩니다 : 당신은 당신의 참조에 추가 할 수 있습니다

는 참조가 사용시기를 지정합니다 선택한 빌드 구성.

조건부 컴파일 기호와 #if 문을 코드에 결합하면 원하는 작업을 수행 할 수 있습니다.

Visual Studio에서 프로젝트 파일에서 조건부 특성을 쉽게 제거 할 수 있다는 점에주의해야합니다.

+0

이것은 완벽하게 작동했습니다. 수많은 명성이있었습니다. 비주얼 스튜디오조차 기능적 인 텔리 센스 (Intellisense)를 포함하여 그러한 참고 자료를 가지고 놀지 않는 한 멋지게 재생됩니다! – snicker

+7

비슷한 접근 방식을 사용하여 참조의 디버그/릴리스 버전에 대한 구성 관련 참조를 만들었습니다. 참조를 추가 할 때 릴리스 버전을 가리킨 다음 메모장에서 힌트 경로의'Release'를'$ (Configuration)'으로 바꾸고 voila - 참조가 자동으로 올바른 대상 구성으로 업데이트됩니다! – awe

+3

@awe : MSBuild 파일의 대부분의 요소에'Condition' 속성을 두는 것은 유효합니다. – adrianbanks

9
<Reference Include="log4net, Version=1.2.11.0, Culture=neutral, processorArchitecture=MSIL"> 
    <SpecificVersion>False</SpecificVersion> 
    <HintPath>..\SharedLibs\log4net\$(Platform)\$(Configuration)\log4net.dll</HintPath> 
</Reference> 

당신은 속성 힌트 경로를 대체 할 수

$ (구성)/디버그 또는 다른 어떤 구성 당신이 릴리스에 해당합니다. $ (플랫폼) 86에 상당/64/모든 CPU

구성은 모든 CPU가 다음 또한 adrianbanks에 의해 참조 조건 옵션을 참조 주위

를 $ (구성) 작은 따옴표를 넣어해야합니다 포함 된 경우

+0

@adrianbanks의 솔루션은 빌드 할 때 패키지를 해결하지 않는 반면, 이것은 저에게 도움이되었습니다. – HostMyBus

관련 문제