/안전하지 않은 플래그에 해당하는 "사전 처리기"기호가 있습니까?

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

  •  11-09-2019
  •  | 
  •  

문제

나는 a를 다루고있다 WriteableBitmap C#에서. 현재 안전하지 않은 코드 블록을 사용하여 픽셀에 직접 액세스하고 있습니다. WriteableBitmap.BackBuffer. 나는 차라리 의존하지 않는다 /unsafe 그러나 옵션이므로 사용을 고려하고 있습니다 WriteableBitmap.WritePixels 대신에.

"안전하지 않은"버전에서 조건부로 컴파일하는 방법이 있습니까?

요컨대, 나는 다음의 선을 따라 무언가를 찾고 있습니다.

#if UNSAFE
   //my unsafe version
#else
   //the supposedly safe version goes here
#endif

런타임에서의 감지도 좋습니다. 그러나 그것은 항상 컴파일해야한다는 것을 의미합니다 ~와 함께 /unsafe, 이는 라이브러리 코드에 프로젝트 파일 업데이트가 필요하다는 것을 의미합니다.

기본적으로, 나는 문제가 될 때 빠른 버전을 유지하고 싶지만, 무엇이든지 상관없이 작동하는 합리적인 버전이 있습니다.

도움이 되었습니까?

해결책

기존 옵션이 안전하지 않은 상태에서 안전하지 않은 상태에서 "안전하지 않은 릴리스"및 "안전하지 않은 릴리스"를 사용하여 하나 이상의 새로운 구성을 작성하는 것이 좋습니다. 안전하지 않은 옵션을 토글하는 대신 안전하지 않은 구성을 사용합니다.

또한 구성이 안전하지 않은 어셈블리의 출력 이름을 변경하여 BitMaps.dll 및 BitMaps.unsafe.dll이라고 말하면 어셈블리의 클라이언트가 어떤 요구에 가장 적합한 지 결정할 수 있습니다. 참조.

다른 팁

나는 당신이 컴파일하는 것을 제안합니다 /unsafe /define:SAFE. 아마도 내가 알지 못하는 또 다른 방법이있을 것입니다.

이 코드를 시도 할 수 있다고 생각합니다

#define UNSAFE
#undef UNSAFE // comment this line out if you want to compile the save version

그런 다음 예제에서 제공 한 코드를 사용할 수 있습니다.

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