문제

같은 것을 허용하는 전처리 기호가 있습니까?

#if CLR_AT_LEAST_3.5
// use ReaderWriterLockSlim
#else
// use ReaderWriterLock
#endif

아니면 이것을하는 다른 방법?

도움이 되었습니까?

해결책

사전 정의 된 '사전 처리기'기호가 있다고 생각하지 않습니다. 그러나 다음과 같이 원하는 것을 달성 할 수 있습니다.

  1. 지원하려는 CLR의 모든 버전마다 프로젝트의 다른 구성을 만듭니다.

  2. 같은 기호를 선택하십시오 VERSION2, VERSION3 CLR 버전 별 등.

  3. 모든 구성에서 그와 관련된 하나의 기호를 정의하고 다른 모든 기호를 정의하지 마십시오.

  4. 조건부 컴파일 블록 에서이 기호를 사용하십시오.

다른 팁

내장은 없지만 직접 공급할 수 있습니다.

이 특정 시나리오의 경우 로직 (예 : 래퍼) 클래스를 캡슐화하여 #if 모든 코드를 통해 산란; 물론, 당신이 약간의 잠금 만하고 있다면 그것은 문제가 될 가치가 없을 수도 있습니다.

다양한 구성 및/또는 프로젝트를 사용하여 다양한 플랫폼을 위해 구축합니다. protobuf-net 이 트릭을 사용하여 .NET 2.0, .NET 3.0, Mono, CF 2.0, CF 3.5에 대한 빌드. 코드는 있습니다 #if 로직을 제어하기 위해 다른 기호를 기반으로 한 블록 - 예를 들어, BinaryFormatter CF에서는 사용할 수 없습니다. WCF .NET 3.0에서만 사용할 수 있습니다. Delegate.CreateDelegate CF 2.0 등에는 그렇지 않습니다.

반사를 사용하여 ReaderWriterLockSlim과 같은 특정 유형을 사용할 수 있는지 (전 처리기를 사용하는 대신) 동적으로 확인할 수 있습니다.

이렇게하면 단일 버전의 제품 및 사용자가있는 사용자를 배포 할 수 있으며 .NET 3.5가 최적화 된 코드의 혜택을받을 수 있습니다.

이 기호를 수동으로 설정할 수 있습니다 /컴파일러 스위치 정의. 그런 다음 원하는 각 CLR 버전에 대해 다른 빌드 구성을 만듭니다.

그게 당신이해야 할 전부라면, 나는 당신을 생각합니다 ~할 수 있었다 환경을 사용하십시오 디보 해결책, 그것은 많은 불필요한 코드를 남겨 두는 것 같습니다.

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