2010-06-09 4 views
2

기본적으로 동일한 기능을 제공하지만 상황에 따라 두 가지 클래스가있는 응용 프로그램을 작성하고 있습니다. 세 가지 버전의 소프트웨어를 갖고 싶습니다. 하나는 사용자가 ini 파일을 변경하여 프로그램에서 두 클래스 중 하나를 사용하도록 구성한 다음 두 클래스 중 하나만 사용하는 버전입니다.C# VS 2008 빌드 구성 - 다른 빌드에 다른 클래스 사용

지금은 ini 파일을 통해 작업하고 있지만 불필요한 클래스의 코드는 전혀 포함하지 않은 버전을 빌드하고 싶습니다.

이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 현재 생각하고있는 두 가지 클래스는 공통 인터페이스에서 파생되기 때문에 활성 빌드 구성을보고 해당 클래스를 컴파일할지 여부를 결정하는 컴파일 시간 조건을 추가하기 만하면됩니다. 그렇게하기위한 구문은 무엇입니까?

도움과 의견을 보내 주셔서 감사합니다.

답변

1

사전 컴파일러 지정 문과 함께 C/C++에서 수행하는 것과 유사한 조건부 컴파일 기호를 사용할 수 있습니다. 예를 들어

:

interface IThing { 
} 

#if PLATFORM_A 

class ThingImplementation : IThing { 
} 

#endif 

#if PLATFORM_B 

class ThingImplementation : IThing { 
} 

#endif 

당신은 당신의 프로젝트의 설정에서 "빌드"탭에 조건부 컴파일 기호를 추가하여 desider 구현을 선택할 수 있습니다.

아주 기본적인 구현의 경우 실제로 인터페이스가 필요하지 않습니다. 인터페이스가 일관성을 유지하는 데 유용하더라도 컴파일 할 플랫폼에 따라 불필요한 코드를 제거하면됩니다.

class Thing { 

#if PLATFORM_A 

    Platform specific code 

#endif 

#if PLATFORM_B 

    Platform specific code 

#endif 

} 
+0

조건부 컴파일 기호로 빌드 유형을 어떻게 사용할 수 있습니까? 예를 들어, 새로운 빌드 유형을 추가하지 않고, DEBUG 또는 RELEASE와 같은 방식으로 어떻게하면 좋을까요? 당신의 대답에 감사드립니다! – evan

+0

기본 "디버그"빌드 구성을 사용할 때 Visual Studio에서 DEBUG 상수가 추가됩니다. 따라서 추가 심볼을 정의 할 필요없이 #if DEBUG를 사용할 수 있습니다 (릴리스 구성은 RELEASE를 정의하지 않고 단순히 DEBUG를 정의하지 않습니다). 추가 기호의 경우 사용자가 직접 만든 빌드 구성 (VS 프로젝트의 "빌드"탭)에 수동으로 추가해야합니다. #if 지시문을 사용할 때 빌드 구성의 이름을 확인하는 방법이 없다고 생각합니다. – LorenzCK

1

각 파생 클래스를 고유 한 어셈블리에 더 잘 배치하십시오. at 런타임에는 응용 프로그램에서 빠져 나와 기본 인터페이스 또는 추상 클래스로 캐스트 된 어셈블리를로드합니다.

+0

그래서 지금은 하나의 인터페이스와 2 개의 파생 클래스가 있습니다. 구현을 주 코드에서 꺼내어 두 개의 어셈블리에 넣은 다음 런타임에 어떤 어셈블리가 있는지 확인해야한다고 생각합니까? 어떻게하면 좋을까요? 도와 주셔서 감사합니다! – evan

+0

NM, 나는 그것을 알아 냈다고 생각해. 고마워! – evan

관련 문제