Plattformunabhängig .NET Bitness - von O oder rufen Anwendung?
-
23-08-2019 - |
Frage
Ich weiß, dass plattformunabhängig .NET-Anwendungen „aufschwimmen“, um die Bitness des Betriebssystems. Aber was ist eine .NET-Assembly, die eine Bibliothek ist, nicht eine ausführbare Datei, von einer non-.NET Anwendung aufgerufen wird?
Wir haben einen .NET-DLL, die eine CLR erweitert für SQL Server gespeicherte Prozedur ist 2005. Derzeit ist es plattformunabhängig ist. Was passiert, wenn die erweiterte gespeicherte Prozedur aus einer SQL Server-Instanz 32-Bit aufgerufen wird, läuft auf 64-Bit-Windows-?
Lösung
Es hängt davon ab, was Ziel der Versammlung für kompiliert wurde. Wenn Sie die DLL „Any CPU“ oder „x86“ in den Projekterstellungsoptionen ausgewählt werden, sollte als 32-Bit-Instanz ausgeführt. Wenn Sie „x64“ wird es eine Ausnahme (BadImageFormatException aus dem Gedächtnis) werfen.
Unter Windows 32-Bit-Prozesse können nicht 64-Bit-DLLs laden, so dass SQL Server eine 32-Bit-Version der .NET-Laufzeit in seinem Prozess ausgeführt werden. So Ihre .NET-Assembly wird auch als 32-Bit sogar auf einer 64-Bit-Maschine ausgeführt werden.