Jak skompilować a.NET zastosowanie do kodu natywnego?

Jeśli chcę uruchomić aplikację. net na komputerze, na którym nie jest dostępna. NET framework, czy jest jakiś sposób na skompilowanie aplikacji do kodu natywnego?

Author: shA.t, 2008-09-05

11 answers

Microsoft ma artykuł opisujący jak można skompilować MSIL do kodu natywnego

Możesz użyć Ngen .

Native Image Generator (Ngen.exe) jest narzędziem, które poprawia wydajność zarządzanych aplikacji. Ngen.exe tworzy natywne obrazy, które są plikami zawierającymi skompilowane kod maszynowy specyficzny dla procesora, oraz instaluje je w natywnym obrazie pamięć podręczna na komputerze lokalnym. Na runtime może korzystać z natywnych obrazów z cache zamiast korzystanie z just-In-time (JIT) kompilator do kompilacji oryginału montaż.

Niestety, nadal potrzebujesz bibliotek z frameworka, aby uruchomić swój program. Nie ma funkcji, którą znam z MS. Net Framework SDK, która pozwala skompilować wszystkie wymagane pliki w jednym pliku wykonywalnym

 42
Author: Espo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-05 12:50:23

RemoteSoft tworzy narzędzie, które kompiluje aplikację. NET do pakietu, który można uruchomić bez zainstalowanego. NET. Nie mam z tym doświadczenia:

RemoteSoft Salamander

 23
Author: Simon Steele,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-05 12:51:05

Przetestowałem kilka z nich i w tej chwili jedynym, który obsługuje. NET 3.5, a także ma świetny stos wirtualizacji jest Xenocode Postbuild

Z ngen nadal musisz mieć zainstalowany. NET framework, ale używając narzędzia jako takiego cały zarządzany kod jest kompilowany do kodu natywnego, dzięki czemu można go wdrożyć na maszynach bez obecności frameworku.

 19
Author: Erick Sgarbi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-05 13:02:42

Microsoft ogłosił swój . Net Native Preview, który pozwoli na uruchamianie aplikacji. Net bez konieczności instalowania frameworka.

Zobacz: http://blogs.msdn.com/b/dotnet/archive/2014/04/02/announcing-net-native-preview.aspx

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

Możesz pobrać natywny Microsoft. NET dla VS2013 stąd: http://msdn.microsoft.com/en-US/vstudio/dotnetnative

 17
Author: thepirat000,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-09 22:18:36

Jak wspomniano w innych odpowiedziach, możesz użyć narzędzia . Net Native do skompilowania aplikacji do natywnego kodu maszynowego. W przeciwieństwie jednak do tych odpowiedzi, wyjaśnię Jak to zrobić.

Kroki:

  1. Zainstaluj narzędzie dotnet CLI (command line interface), które jest częścią nowego łańcucha narzędzi.Net Core. Użyjemy tego do kompilacji naszej aplikacji; możesz znaleźć dobry artykuł na jej temat tutaj.

  2. Open up a shell prompt i cd do katalogu aplikacji.

  3. Wpisz to:

    dotnet compile --native
    
To jest to! Kiedy skończysz, Twoja aplikacja zostanie skompilowana do jednego pliku binarnego, jak to:

Natywny skompilowany. Net Core EXE

Będzie to samodzielny plik wykonywalny; bez PDB, zestawów lub plików konfiguracyjnych (hurra!).


Alternatywnie, jeśli chcesz jeszcze szybszy program, możesz uruchomić to:

dotnet compile --native --cpp

Które zoptymalizują Twój program za pomocą generatora kodu C++ (jako w przeciwieństwie do RyuJIT), więc Twoja aplikacja jest jeszcze bardziej zoptymalizowana pod kątem scenariuszy AOT.

Więcej informacji na ten temat można znaleźć w dotnet CLIGitHub repo .
 13
Author: James Ko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-08 15:08:26

Tak, używając Ngen, natywnego generatora obrazów. Jest jednak kilka rzeczy, o których należy pamiętać:

  • nadal potrzebujesz CLR, aby uruchomić plik wykonywalny.
  • CLR nie będzie dynamicznie optymalizować zestawów w oparciu o środowisko, w którym jest uruchomiony (np.)

Podsumowując, warto używać Ngen tylko wtedy, gdy trzeba skrócić czas uruchamiania aplikacji.

 11
Author: Chris Zwiryk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-05 14:39:09

Możesz! Jednak jesteś ograniczony do. NET 1.1 (brak generycznych dla Ciebie): mono ahead-of-Time compilation (AOT)

Oznacza to jednak, że kompilowanie jest naprawdę natywne, więc nie będziesz już w stanie wdrożyć jednego zestawu bajtowego, będziesz potrzebował jednego na platformę.

Został pierwotnie zaprojektowany, ponieważ nie ma. NET ani Mono dla iPhone ' a, więc tak zrobili MonoTouch.

 10
Author: Camilo Martin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-13 03:46:16

Możesz to zrobić za pomocą nowej technologii prekompilacji o nazwie. Net Native. Sprawdź to tutaj: http://msdn.microsoft.com/en-US/vstudio/dotnetnative

Obecnie jest dostępny tylko dla aplikacji Windows Store. Wykonuje jednoskładnikowe łączenie. Biblioteki. NET Framework są więc statycznie połączone z Twoją aplikacją. Wszystko jest kompilowane do wersji natywnej, a zespoły IL nie są już wdrażane. Aplikacje nie działają z CLR, ale z okrojonym, zoptymalizowanym środowiskiem wykonawczym o nazwie Managed Runtime (Mrt.dll)

Jak wspomniano powyżej, NGEN używał modelu kompilacji mix i opierał się na IL i JIT dla scenariuszy dynamicznych. . Net Native nie wykorzystuje JIT, ale obsługuje różne dynamiczne scenariusze. Autorzy kodu będą musieli użyć dyrektyw Runtime , aby dostarczyć podpowiedzi do natywnego kompilatora. net na temat dynamicznych scenariuszy, które chcą obsługiwać.

 6
Author: m_eric,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-21 01:28:17

Możesz użyć ngen.exe do generowania natywnego obrazu ale nadal musisz rozpowszechniać oryginalny kod nie-natywny, a wciąż potrzebuje on frameworka zainstalowanego na docelowej maszynie.

Co nie rozwiązuje Twojego problemu, naprawdę.

 4
Author: Matt Bishop,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-05 12:56:56

[[0]}naturą. NET jest możliwość instalowania aplikacji skompilowanych do MSIL, następnie przez JIT lub Ngen, MSIL jest kompilowany do kodu natywnego i przechowywany lokalnie w pamięci podręcznej. Nigdy nie miało to na celu stworzenia prawdziwego tubylca .exe, które mogą być uruchamiane niezależnie od. NET framework.

Może jest jakiś hack, który to robi, ale dla mnie to nie brzmi bezpiecznie. Istnieje zbyt wiele Dynamik, które wymagają frameworku, takich jak: dynamiczne ładowanie złożeń, generowanie kodu MSIL, itp.

 1
Author: spoulson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-05 13:02:10

Myślę, że to niemożliwe. Będziesz musiał również rozpowszechniać. NET FW. Jeśli chcesz skompilować aplikację. NET do kodu natywnego, użyj narzędzia NGen

 -3
Author: aku,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-05 12:51:30