Frage

Wenn ich eine .NET-Anwendung auf einem Computer ausführen möchte, auf dem das .NET-Framework nicht verfügbar ist;Gibt es eine Möglichkeit, die Anwendung in nativen Code zu kompilieren?

War es hilfreich?

Lösung

Microsoft hat einen Artikel, der beschreibt, wie Sie das können Kompilieren Sie MSIL zu nativem Code

Sie können verwenden Ngen.

Der native Bildgenerator (ngen.exe) ist ein Tool, das die Leistung von verwalteten Anwendungen verbessert.Ngen.exe erstellt native Bilder, bei denen Dateien mit kompiliertem prozessorspezifischem Maschinencode enthalten sind, und installiert sie in den nativen Bildcache auf dem lokalen Computer.Die Laufzeit kann native Bilder aus dem Cache verwenden, um den Just-in-Time-Compiler (JIT-Time) zu verwenden, um die ursprüngliche Montage zu kompilieren.

Leider benötigen Sie weiterhin die Bibliotheken aus dem Framework, um Ihr Programm auszuführen.Mir ist keine Funktion des MS .Net Framework SDK bekannt, mit der Sie alle erforderlichen Dateien in einer einzigen ausführbaren Datei kompilieren können

Andere Tipps

RemoteSoft erstellt ein Tool, das eine .NET-Anwendung in ein Paket kompiliert, das ohne installiertes .NET ausgeführt werden kann.Ich habe keine Erfahrung damit:

RemoteSoft Salamander

Ich habe mehrere davon getestet und im Moment ist es das einzige, das .NET 3.5 unterstützt und außerdem über einen großartigen Virtualisierungsstack verfügt Xenocode Nachbau

Mit ngen müssen Sie immer noch das .NET-Framework installiert haben, aber mit einem Tool als solches wird Ihr gesamter verwalteter Code in nativen Code kompiliert, sodass Sie ihn auf Computern bereitstellen können, ohne dass das Framework vorhanden ist.

Microsoft hat seine angekündigt .NET Native-Vorschau Dadurch können .NET-Anwendungen ausgeführt werden, ohne dass das Framework installiert sein muss.

Schau mal: http://blogs.msdn.com/b/dotnet/archive/2014/04/02/anncreasing-net-native-preview.aspx

FAQ: http://msdn.microsoft.com/en-US/vstudio/dn642499.aspx

Sie können Microsoft .NET Native für VS2013 hier herunterladen: http://msdn.microsoft.com/en-US/vstudio/dotnetnative

Wie einige der anderen Antworten hier erwähnt haben, können Sie die verwenden .NET Native Tool zum Kompilieren Ihrer App in nativen Maschinencode.Im Gegensatz zu diesen Antworten werde ich es jedoch erklären Wie es zu tun.

Schritte:

  1. Installiere das dotnet-CLI (Befehlszeilenschnittstelle)-Tool, das Teil der neuen .NET Core-Toolchain ist.Wir werden dies verwenden, um unsere App zu kompilieren.Sie können einen guten Artikel darüber finden Hier.

  2. Öffnen Sie eine Shell-Eingabeaufforderung und cd in das Verzeichnis Ihrer App.

  3. Geben Sie Folgendes ein:

    dotnet compile --native
    

Das ist es!Wenn Sie fertig sind, wird Ihre App wie folgt in eine einzelne Binärdatei kompiliert:

Native compiled .NET Core EXE

Es wird eine eigenständige ausführbare Datei sein;Keine PDBs, Assemblys oder Konfigurationsdateien enthalten (Hurra!).


Wenn Sie ein noch schnelleres Programm wünschen, können Sie alternativ Folgendes ausführen:

dotnet compile --native --cpp

Dadurch wird Ihr Programm mithilfe des C++-Codegenerators (im Gegensatz zu RyuJIT) optimiert, sodass Ihre App noch besser für AOT-Szenarien optimiert ist.

Weitere Informationen hierzu finden Sie in der Dotnet-CLI GitHub-Repo.

Ja, mit Ngen, der native Bildgenerator.Es gibt jedoch einige Dinge, die Sie beachten müssen:

  • Sie benötigen weiterhin die CLR, um Ihre ausführbare Datei auszuführen.
  • Die CLR optimiert Ihre Assemblys nicht dynamisch basierend auf der Umgebung, in der sie ausgeführt wird (z. B.486 vs.586 vs.686 usw.)

Alles in allem lohnt sich der Einsatz von Ngen nur dann, wenn Sie die Startzeit Ihrer Anwendung verkürzen müssen.

Du kannst!Sie sind jedoch auf .NET 1.1 beschränkt (keine Generika für Sie):Mono-Ahead-Of-Time-Kompilierung (AOT)

Dies bedeutet jedoch, dass das Kompilieren wirklich nativ ist, sodass Sie nicht mehr eine einzelne Bytecode-Assembly bereitstellen können, sondern eine pro Plattform benötigen.

Es wurde ursprünglich entwickelt, weil es weder .NET noch Mono für das iPhone gibt. Deshalb haben sie MonoTouch entwickelt.

Sie können dies mithilfe der neuen Vorkompilierungstechnologie namens .NET Native tun.Schauen Sie es sich hier an: http://msdn.microsoft.com/en-US/vstudio/dotnetnative

Derzeit ist es nur für Windows Store-Apps verfügbar.Es führt die Verknüpfung einzelner Komponenten durch.Daher sind .NET Framework-Bibliotheken statisch mit Ihrer App verknüpft.Alles wird nativ kompiliert und IL-Assemblys werden nicht mehr bereitgestellt.Apps werden nicht gegen CLR ausgeführt, sondern gegen eine abgespeckte, optimierte Laufzeit namens Managed Runtime (Mrt.dll).

Wie oben erwähnt, verwendete NGEN ein Mix-Compilation-Modell und verließ sich für dynamische Szenarien auf IL und JIT..NET Native verwendet kein JIT, unterstützt jedoch verschiedene dynamische Szenarios.Code-Autoren müssten nutzen Laufzeitanweisungen um dem .NET Native-Compiler Hinweise zu den dynamischen Szenarien zu geben, die er unterstützen möchte.

Sie können ngen.exe verwenden, um ein natives Image zu generieren Aber Sie müssen weiterhin auch den ursprünglichen, nicht nativen Code verteilen, und das Framework muss weiterhin auf dem Zielcomputer installiert sein.

Was Ihr Problem nicht wirklich löst.

Die Natur von .NET besteht darin, Apps installieren zu können, die nach MSIL kompiliert wurden. Anschließend wird MSIL entweder durch JIT oder Ngen zu nativem Code kompiliert und lokal in einem Cache gespeichert.Es war nie beabsichtigt, eine echte native EXE-Datei zu generieren, die unabhängig vom .NET Framework ausgeführt werden kann.

Vielleicht gibt es einen Hack, der das macht, aber für mich klingt es nicht sicher.Es gibt zu viele Dynamiken, die das Framework erfordern, wie zum Beispiel:dynamisches Laden von Assemblys, Generierung von MSIL-Code usw.

Antwort 2019:Verwenden dotnet/corert.Es kann .NET Core-Projekte in Standalone-Projekte kompilieren .exe Dateien.Keine Abhängigkeiten (außer für Systembibliotheken wie kernel32.dll).Ich wette, das ist genau das, was das OP braucht.

Von der GitHub-Homepage:

Der CoreRT-Compiler kann eine verwaltete .NET Core-Anwendung in eine native (architekturspezifische) ausführbare Einzeldatei kompilieren, die einfach bereitzustellen ist.Es kann auch eigenständige dynamische oder statische Bibliotheken erstellen, die von Anwendungen genutzt werden können, die in anderen Programmiersprachen geschrieben sind.

Ich denke, das ist nicht möglich.Sie müssen auch .NET FW verteilen.Wenn Sie eine .NET-App in nativen Code kompilieren möchten, verwenden Sie NGen Werkzeug

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