문제

32 비트 머신이 항상 구축/실행되는 .NET 프로젝트가 있습니다. 나는 새로운 64 비트 컴퓨터를 얻었고 그곳에서 일하는 작업을 해결하려고 노력하고 있습니다. 빌드 스크립트는 Nant에 있으며, 어느 시점에서 우리는 Nant 작업을 사용하여 일부 부 코드를 컴파일합니다. Boo Code는 빌드 프로세스의 앞부분 C# 소스에서 구축 된 Core DLL을 참조합니다.

두 가지를 시도했습니다. 32 비트 모드로 실행하도록 빌드하고 64 비트 모드로 실행하도록 빌드하십시오. 여러 프로그램 (BOOC 포함)에서 Corflags를 사용함으로써 32 비트 모드로 내장 된 프로젝트를 구축 할 수 있었지만 런타임에 많은 다운 스트림 문제가 생겼습니다. 그래서 64 비트 모드로 내장해야합니다. 어쨌든 바람직하다고 생각합니다.

NANT/BOOC 소스 코드에 따르면, BOOC NANT 작업은 CLR의 프로세스 클래스를 사용하여 BOOC.EXE In-Process를 호출하므로 부모 프로세스에서 32BITNESS 또는 64BITNESS를 상속해야합니다. 그것은 내가보고있는 것을 반영하지 않습니다.

내가 한 일은 다음과 같습니다.

  1. 64 비트 버전의 PowerShell을 사용하여 Nant를 호출했습니다
  2. 내 작업에서 지정된 플랫폼 = "x64". ANDYCPU는 괜찮아야하기 때문에이 작업을 수행 할 필요가 없다고 생각하지만 차이가있는 것 같습니다.

내가 얻는 오류는 다음과 같습니다.

[booc] Compiling 5 files to 'C:\dev\build\MyProjectBoo.dll'.
[booc] BCE0106: Failed to access the types defined in assembly 'MyProject, Version=5.5.0.0, Culture=neutral, PublicKeyToken=null' - (C:\dev\build\MyProject.dll):Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.
[booc]  is not a valid Win32 application. (Exception from HRESULT: 0x800700C1)
[booc]  is not a valid Win32 application. (Exception from HRESULT: 0x800700C1)
[booc] .
[booc] 1 error(s).

즉, BOOC 소스 코드에 따르면 "참조 된 어셈블리에 유형을 반사적으로 나열하려고했지만 실패했습니다." 나는 그것이 "32 비트라고 생각하지만 이것들은 64 비트 DLL이라고 생각한다"또는 무엇을 의미하는지 모르겠다. 그리고 나는 매우 혼란 스럽다.

이 작업을 수행 할 수있는 방법에 대한 아이디어가 있습니까?

업데이트 일을 마친 후에는이 문제가 부와 관련이 없다는 것을 알게되었습니다. DLL을 반사적으로로드하는 빠른 C# 프로그램을 작성했으며 같은 방식으로 깨집니다. 따라서 어떤 이유로, 플랫폼 (x86, x64 또는 anycpu)으로 설정하더라도 x64 기계에 반사적으로로드 할 수는 없습니다. 그래서 실제로 부의 잘못은 아닙니다. 그래서 나는 이것을 파고 더 나은 질문이 있다면 다시 게시 할 것입니다.

최신 업데이트내 주요 DLL의 타사 종속성 중 하나는 Corflags로 구축되지 않았지만 32 비트 환경에 있다고 주장합니다. 이로 인해 Assembly.getTypes ()가 64 비트 모드에서 실패합니다.

도움이 되었습니까?

해결책

문제는 32 비트 모드가 필요한 타사 DLL에 대한 종속성입니다.

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