Frage

Ich habe ein .NET-Projekt, das schon immer gebaut / von / auf 32-Bit-Maschinen ausgeführt werden. Ich habe einen neuen 64-bit-Computer und ich versuche, um die Aufgabe zu bewältigen bekommen sie dort arbeiten. Der Build-Skript ist in Nant, und an einem Punkt wir einige boo Codes mit der Nant Aufgabe kompilieren. Der boo Code verweist auf unseren Kern-DLL, die von c # Quelle früher in dem Build-Prozess integriert ist.

Ich habe zwei Dinge ausprobiert: bauen es in 32-Bit-Modus laufen und bauen es in 64-Bit-Modus auszuführen. Durch die Verwendung von CorFlags auf mehreren Programmen (einschließlich booc), konnte ich das Projekt in 32-Bit-Modus gebaut bauen, aber mit einem Bündel von Downstream-Fragen zur Laufzeit endete. Also muss ich es in 64-Bit-Modus gebaut werden, was ich denke, vorzuziehen ist, sowieso.

Nach dem Nant / booc Quellcode, ruft die booc Nant Aufgabe, die booc.exe in-Prozess der Prozessklasse CLR verwenden, so (glaube ich) es 32bitness oder 64bitness vom übergeordneten Prozess erben sollte. Das spiegelt nicht, was ich sehe, wenn.

Hier ist, was ich getan habe:

  1. die 64-Bit-Version von Powershell Gebrauchte Nant aufzurufen
  2. Angegebene Plattform = "x64" auf meine Aufgaben. Ich fühle mich wie ich sollte dies nicht zu tun haben, weil anycpu sollte in Ordnung sein, aber es scheint, einen Unterschied zu machen.

Hier ist der Fehler erhalte ich:

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

Das heißt, nach dem booc Quellcode „Ich habe versucht, reflexiv die Typen in Ihrer referenzierte Assembly zur Liste aber nicht bestanden“. Ich weiß nicht, ob das bedeutet: „Ich glaube, ich bin 32bit, aber diese sind 64-Bit-DLLs“ oder was, und ich bin sehr verwirrt.

Alle Ideen, wie ich dies kann zu arbeiten?

Aktualisieren nach einiger Arbeit, ich habe entdeckt, dass das Problem nichts mit boo zu tun hat. Ich schrieb eine schnelle c # Programm, das reflektiv die DLL lädt und es bricht in der gleichen Weise. Also aus irgendeinem Grund, egal, was ich als die Plattform gesetzt (x86, x64 oder anycpu), kann ich laden Sie es nicht reflexiv auf einer x64-Maschine. Also wirklich nicht boo Schuld. Also werde ich in diese graben und umbuchen, wenn ich eine bessere Frage haben.

Neuere aktualisieren Es stellte sich heraus, dass einer meiner Haupt DLL Dritter Abhängigkeiten besteht auf in einer 32-Bit-Umgebung zu sein, auch wenn es nicht mit CorFlags gebaut wird. Dies bewirkt, dass assembly.GetTypes () nicht in 64-Bit-Modus.

War es hilfreich?

Lösung

Das Problem ist, Abhängigkeiten von Drittanbietern DLL, die 32-Bit-Modus erfordern, was auch möglich ist, wenn sie nicht über CorFlags gesetzt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top