참조 할 곳이 third party assembly
인 프로젝트가 있습니다.어셈블리에 특정 버전 (x86 또는 x64)이있는 경우에만 명령문 컴파일
조립품은 x86 and x64 versions
입니다. 제 3 자 시스템이 특정 작업에 의존하기 때문에 하나만 참조 할 수 있습니다. (시스템에 설치된 시스템에 따라 다름)
지금까지이 답변을 사용하여 단일 프로젝트에서 두 버전을 모두 관리 할 수있었습니다. 그래서 구성 관리자 옵션을 x86 또는 x64로 설정하고 참조 할 버전을 알고 있습니다.
Targeting both 32bit and 64bit with Visual Studio in same solution/project
그러나 그 다음 나는 다음과 같은 문제와 함께 : 해당 어셈블리 가진 버전 특정 매개 변수 유형에서 방법을 사용하는 데 필요한.x64
버전에는 x86에없는 IdToObject(long ID)
메서드가 있습니다.
x86
버전에는 x64에없는 IdToObject(int ID)
메서드가 있습니다.
ID는 동일한 타사의 다른 어셈블리에서 제공됩니다 (버전은 해당되지 않음). ObjectID
클래스는 나에게 ToInt32()
및 ToInt64()
메소드를 제공합니다. 나는 x64
버전의 IdToObject(ID.ToInt32())
을 시도 할 경우
는, 나는 overflow at runtime
를 얻을.
버전에서 IdToObject(ID.ToInt64())
을 시도하면 doesn't compile
(길게 전달하려고 함).
나는 이것을 시험해 보았지만 x64 버전에서는 정상적으로 동작하지만 x86에서는 컴파일되지 않는다.
if (System.Reflection.Assembly.GetExecutingAssembly().GetName().ProcessorArchitecture == System.Reflection.ProcessorArchitecture.X86)
return Document.IdToObject(ObjectID.ToInt32()); //returns an object
else
return Document.IdToObject(ObjectID.ToInt64()); //returns an object
그래서 프로젝트가 x86으로 설정된 경우 한 줄을 컴파일하지 않아도되고 프로젝트가 x64로 설정된 경우 다른 줄을 컴파일하지 않아도됩니다. 내가 무엇을 할 수 있을지?
전 처리기 지시문을 사용해야 할 것 같은데요? 다른 방법이있을 수 있지만 그것이 무엇이 될지 모르겠다. http://msdn.microsoft.com/en-us/library/ed8yd1ha(v=vs.100).aspx –