다양한 버전의 .NET에 대해 고유한 섹션이 있는 코드를 작성하려면 어떻게 해야 합니까?

StackOverflow https://stackoverflow.com/questions/85773

  •  01-07-2019
  •  | 
  •  

문제

내 소스 코드는 .NET 버전 1.1과 2.0을 모두 지원해야 합니다.다양한 버전을 어떻게 테스트하고 이 상황을 처리하는 가장 좋은 방법은 무엇입니까?

별도의 클래스, 메서드 등으로 두 개의 코드 섹션을 인라인으로 포함해야 하는지 궁금합니다.어떻게 생각하나요?

도움이 되었습니까?

해결책

이와 같은 작업을 수행하려면 전처리기 명령과 조건부 컴파일 기호를 사용해야 합니다.

대상으로 하는 .NET 버전(예: NET11 및 NET20)을 명확하게 나타내는 기호를 사용한 다음 관련 코드를 다음과 같이 래핑합니다.

#if NET11
// .NET 1.1 code
#elif NET20
// .NET 2.0 code
#endif

단순한 if/else가 아닌 이런 방식으로 수행하는 이유는 누군가가 기호 정의를 잊어버린 경우를 대비해 추가 보호 계층을 제공하기 위함입니다.

즉, 이 작업을 원하거나 수행해야 하는 이유의 핵심을 자세히 조사해야 합니다.

다른 팁

여기에는 다양한 옵션이 있습니다.제가 작업하는 곳에서는 #if pragma를 사용하지만 별도의 버전에 대해 별도의 어셈블리를 사용하여 수행할 수도 있습니다.

이상적으로는 최소한 버전 종속 코드를 별도의 부분 클래스 파일에 유지하고 컴파일 타임에 올바른 버전을 사용할 수 있도록 만드는 것이 좋습니다.시간을 되돌릴 수 있다면 이것을 시행할 것입니다. 이제 우리 코드 베이스에는 #if 프라그마가 너무 많아 때로는 관리하기 어려울 수 있습니다.#if pragma 전체에서 가장 나쁜 부분은 Visual Studio가 현재 정의로 컴파일되지 않는 모든 항목을 무시하므로 주요 변경 사항을 확인하기가 매우 쉽다는 것입니다.

NUnit 1.1과 2.0을 모두 지원하므로 테스트 프레임워크에 적합합니다.같은 것을 사용하는 것은 그리 어렵지 않습니다. 낸트 별도의 1.1 및 2.0 빌드를 만든 다음 자동으로 NUnit 테스트를 실행합니다.

두 개의 코드 기반을 유지해야 하는 이유에 대한 질문을 하고 싶습니다. 기회가 있으면 하나를 선택하고 사용하겠습니다.

두 가지 코드 기반을 변경 횟수 및 변경 유형과 동기화하는 것은 매우 복잡하며 두 버전 모두에 대해 빌드하는 빌드 프로세스도 매우 복잡합니다.

우리는 이 문제를 겪었고 결국 .NET v1.1 및 v2.0용 단일 인터페이스 및 유틸리티 코드 세트를 구현하는 "호환성 계층"을 갖게 되었습니다.

그런 다음 설치 프로그램이 올바른 버전에 대한 올바른 코드를 작성했습니다.우리는 사용했었다 NSIS (무료!) 그리고 .NET 버전을 확인하기 위해 호출할 수 있는 함수가 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top