2012-12-21 3 views
2

나는이 내 비주얼 스튜디오 프로젝트에서 다음과 같은 상황 :프로젝트가 플랫폼을 결정하는 C# .NET x86/x64?

  • assemby의 C
  • 프로젝트 A -> 클래스 라이브러리 모든 CPU (참조 조립 C)
  • 프로젝트 B -> Windows 응용 프로그램 (프로젝트 A 참조)

이 구성에서 어떤 플랫폼 어셈블리 C가 사용할지 결정하는 요소는 무엇입니까?

    시작 프로젝트
  1. 프로젝트 B -> 조립 C 플랫폼
  2. 에 따라 86 또는 x64를 실행 -> 조립 C는 86
  3. 프로젝트를 실행합니다 직접 조립 C를 참조하는 프로젝트입니다 이는

1 또는 2? 감사합니다.

답변

5

시작 어셈블리는 사용되는 플랫폼을 결정합니다. 시동 어셈블리가 "Any CPU"로 구축되면 OS가 실행되는 플랫폼에서 실행됩니다.

은 (즉, 1)

+1

+1. 정확하게. 실행 파일이 결정되면 나머지는 따라야합니다 (또는 예외를 throw합니다). – TomTom

-2

이 국회 C 현명 대상에 대해 컴파일에 따라 달라집니다. 다른 프로젝트는 모양이나 형태에 상관없이 비트의 크기에 영향을주지 않습니다. 혼합 된 대상을 사용하는이 유형의 설치로 인해 많은 문제가 발생할 수 있습니다.

B는 응용 프로그램이므로 x86으로 실행됩니다. x64를 사용하는 경우 프로젝트 A는 x64로 실행하려고 시도하고 x86 응용 프로그램은 x64 dll을로드 할 수 없기 때문에로드하지 못합니다.

x86 컴퓨터에서 실행하면 프로젝트 A가 x86을 실행하고 올바르게로드하십시오.

+0

좋았어, 잘못 아니야. 부탁하는 방법에 대한 질문을 완전히 무시했다. 모자가 아닌 문제가 발생합니다. 그리고 어셈블리 (예 : 비 exes)는 그 말을하지 않습니다. – TomTom

+0

프로젝트 A는 AnyCPU이기 때문에 제대로로드됩니다. 32 비트 프로세스에서 AnyCPU 클래스 라이브러리는 x86 코드로 JIT됩니다. –

+0

하지만이 경우에는 실행 파일이 Project B이므로 제 대답이 맞습니다. – Alex

관련 문제