2009-03-03 2 views
1

32 비트 컴퓨터에서 항상 빌드/실행되는 .NET 프로젝트가 있습니다. 나는 새로운 64 비트 컴퓨터를 가지고 있고 거기서 일하는 작업에 착수하려고 노력하고있다. 빌드 스크립트는 nant에 있고, 한 번에 nant 작업을 사용하여 일부 부 코드를 컴파일합니다. 부 코드는 빌드 프로세스의 초기 단계에서 C# 소스로 빌드 된 우리의 핵심 DLL을 참조합니다.Nant, Booc 및 x64

저는 두 가지를 시도했습니다. 32 비트 모드로 실행하고 64 비트 모드로 실행되도록 빌드하십시오. 여러 프로그램 (booc 포함)에서 corflags를 사용하여 32 비트 모드로 작성된 프로젝트를 빌드 할 수 있었지만 런타임에 여러 가지 다운 스트림 문제가 발생했습니다. 그래서 64 비트 모드로 빌드해야하는데, 어쨌든 바람직하다고 생각합니다.

nant/booc 소스 코드에 따르면 booc nant 작업은 CLR의 Process 클래스를 사용하여 프로세스 내에서 booc.exe를 호출하므로 상위 프로세스에서 32 비트 또는 64 비트를 상속해야합니다. 그것은 내가보고있는 것을 반영하지 않습니다.

는 여기에 내가 무슨 짓을했는지의 : 내 업무에 NANT에게

  • 지정된 플랫폼 = "64"을 호출하는 파워 쉘의 64 비트 버전을

    1. 을 사용합니다. anycpu가 잘되어야하기 때문에이 작업을 수행해서는 안되는 것처럼 느껴지지만 차이를 만드는 것처럼 보입니다. "나는 반사적으로 당신의 참조 된 어셈블리의 형식을 나열 시도했지만 실패"를 booc 소스 코드에 따라,

      [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). 
      

      의미 :

    는 여기에 내가지고있어 오류입니다. 나는 그것이 "32 비트라고 생각하지만 64 비트 dll이라고 생각한다"는 것을 알지 못한다. 또는 무엇이 나는 매우 혼란 스럽다.

    어떻게 작동시킬 수 있습니까?

    업데이트 일부 작업을 마친 후 문제가 부와 아무 관련이 없음을 발견했습니다. 나는 반사적으로 DLL을로드하고 같은 방식으로 중단되는 빠른 C# 프로그램을 작성했습니다. 그래서 어떤 이유로 플랫폼 (x86, x64 또는 anycpu)으로 설정 했더라도 x64 컴퓨터에서 반영구적으로로드 할 수 없습니다. 그래서 진짜로 우우의 잘못. 그래서 나는 더 좋은 질문이 있으면 이것을 파고 다시 게시 할 것입니다.

    최근 업데이트 내 주요 DLL의 타사 종속성 중 하나는 그것이 corflags로 구축되지 않은 경우에도, 32 비트 환경에있는 주장 것으로 밝혀졌습니다. 이로 인해 assembly.GetTypes()가 64 비트 모드에서 실패합니다.

  • 답변

    0

    문제는 32 비트 모드를 필요로하는 제 3 자 DLL에 대한 종속성으로, corflags가 설정되지 않은 경우에도 가능합니다.