Nant、Booc和x64

Nant、Booc和x64,nant,64-bit,boo,Nant,64 Bit,Boo,我有一个.NET项目,它总是由32位机器构建/运行。我买了一台新的64位计算机,正在努力解决让它在那里工作的任务。构建脚本是用nant编写的,有一次我们使用nant任务编译了一些boo代码。boo代码引用了我们的核心DLL,它是在构建过程的早期从c#源代码构建的 我尝试了两件事:构建它以32位模式运行,构建它以64位模式运行。通过在几个程序(包括booc)上使用corflags,我能够构建以32位模式构建的项目,但在运行时遇到了一系列下游问题。所以我需要在64位模式下构建它,我认为这是最好的 根

我有一个.NET项目,它总是由32位机器构建/运行。我买了一台新的64位计算机,正在努力解决让它在那里工作的任务。构建脚本是用nant编写的,有一次我们使用nant任务编译了一些boo代码。boo代码引用了我们的核心DLL,它是在构建过程的早期从c#源代码构建的

我尝试了两件事:构建它以32位模式运行,构建它以64位模式运行。通过在几个程序(包括booc)上使用corflags,我能够构建以32位模式构建的项目,但在运行时遇到了一系列下游问题。所以我需要在64位模式下构建它,我认为这是最好的

根据nant/booc源代码,booc nant任务使用CLR的进程类在进程中调用booc.exe,因此(我认为)它应该从父进程继承32位或64位。但这并不反映我所看到的

以下是我所做的:

  • 使用64位版本的powershell调用nant
  • 在我的任务上指定了platform=“x64”。我觉得我不应该这样做,因为任何CPU都应该是好的,但它似乎起了作用
  • 下面是我得到的错误:

    [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”或者什么,我很困惑

    有什么办法可以让它工作吗

    更新经过一些工作,我发现这个问题与boo无关。我写了一个快速的c#程序,反射加载dll,它以同样的方式中断。因此,出于某种原因,无论我将什么设置为平台(x86、x64或任何CPU),我都无法在x64机器上反射地加载它。所以这不是布的错。因此,如果我有更好的问题,我将深入研究并重新发布

    更新的更新
    事实证明,我的主DLL的一个第三方依赖项坚持在32位环境中,即使它不是用corflags构建的。这会导致assembly.GetTypes()在64位模式下失败。

    问题在于依赖于需要32位模式的第三方DLL,即使它们没有设置corflags,也可能存在这种情况