3 Stimmen

Wie man x86 in der .NET-Abhängigkeitskette beim Erstellen benötigt

Wir haben mehrere Projekte, bei denen p4.net , eine verwaltete DLL, die wiederum von p4dn.dll, einer nicht verwalteten 32-Bit-DLL, abhängig ist. Dies führt zu Problemen auf x64-Systemen, so dass ich in jedem Projekt, das p4.net verwendet, den Prozessortyp auf x86 einstellen musste.

Wenn ich das Problem richtig verstanden habe, ist es so, dass .NET beim Laden einer Exe auf ein Manifest prüft, und wenn es keines gibt, tut es das, was für den Prozessortyp am besten ist. Dann, wenn es in die 32-Bit-dll läuft, es kotzt.

Ich kann jedes Projekt, das p4.net verwendet, als 32-Bit-Projekt markieren. Aber wir haben eine ganze Menge davon. Außerdem werden die Leute weiterhin neue Projekte erstellen und vergessen, 32-Bit einzustellen, und dann werden wir in Zukunft wieder dieses Problem haben, wenn jemand anderes versucht, es auf x64 zu verwenden.

Meine Frage ist folgende: Gibt es eine Möglichkeit, dass .NET automatisch jede Anwendung lädt, die p4dn.dll als 32-Bit verwendet? Wenn das nicht der Fall ist, gibt es eine Möglichkeit für die IDE, dies zu erkennen und nicht zu bauen?

Oder ist es möglich, eine .manifest-Datei zu erstellen, die ich neben p4api oder p4dn.dll einfügen kann, so dass alle Anwendungen, die sie verwenden, automatisch in 32 Bit ausgeführt werden?

2voto

Dror Helper Punkte 29647

Wenn Sie absolut keine andere Wahl haben, können Sie die corflags als Teil eines automatischen Build-Skripts, um alle .NET-DLLs als x86 zu markieren - corflags /32bit+ file.dll . Obwohl ich denke, dass eine angemessene Ausbildung der Entwickler eine bessere Lösung ist.

1voto

abatishchev Punkte 94886

CLR prüft den Plattformtyp nur, wenn es eine Assembly aus dem GAC lädt. Ich vermute, dass p4dn.dll im Root-Ordner der Anwendung enthalten ist, daher denke ich, dass Ihre Logik falsch ist.

Es scheint, dass p4dn.dll nicht verwendet werden kann, wenn es im WoW64-Modus läuft und Ihre Anwendung nativ im x64-Modus läuft. Ich denke, der beste Weg ist, Ihr gesamtes Projekt für die x86 (32) Plattform zu kompilieren. Oder unterteilen Sie es in einzelne Teile, so dass der Aufrufer der p4dn.dll immer im WoW64-Modus läuft.

Außerdem sollten Sie sich mit den p4net-Entwicklern in Verbindung setzen, um eine vollständige Unterstützung der x64-Plattform zu erreichen.

0voto

Dirk Vollmar Punkte 166522

Mir ist keine Möglichkeit bekannt, dies automatisch zu tun. Ich würde Ihnen empfehlen, wie folgt vorzugehen:

  • Schulen Sie Ihre Entwickler,
  • Fügen Sie dieses Thema zu Ihrer internen Wissensdatenbank hinzu und
  • Hinzufügen von x64-Plattformen zu Ihren Testumgebungen

Außerdem könnten Sie ein VS-Add-In schreiben, das die richtige Zielplattform überprüft. Aber dann könnte es auch eine dynamische Erstellung von COM-Komponenten geben...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X