.NET çerçevesinin mevcut olmadığı bir makinede bir .NET uygulamasını çalıştırmak istersem; Uygulamayı yerel koda derlemenin herhangi bir yolu var mı?
Yanıtlar:
Microsoft'un MSIL'i Yerel Koda nasıl derleyebileceğinizi açıklayan bir makalesi var
Ngen'i kullanabilirsiniz .
Yerel Görüntü Oluşturucu (Ngen.exe), yönetilen uygulamaların performansını artıran bir araçtır. Ngen.exe, derlenmiş işlemciye özgü makine kodunu içeren dosyalar olan yerel görüntüler oluşturur ve bunları yerel bilgisayardaki yerel görüntü önbelleğine yükler. Çalışma zamanı, orijinal derlemeyi derlemek için tam zamanında (JIT) derleyicisini kullanmak yerine önbellekteki yerel görüntüleri kullanabilir.
Ne yazık ki, programınızı çalıştırmak için çerçevedeki kitaplıklara hala ihtiyacınız var. Gerekli tüm dosyaları tek bir yürütülebilir dosyada derlemenize izin veren MS .Net çerçeve SDK ile bildiğim hiçbir özellik yok
RemoteSoft, bir .NET uygulamasını .NET yüklenmeden çalıştırılabilen bir pakete derleyen bir araç yapar. Bununla ilgili herhangi bir deneyimim yok:
Buradaki diğer yanıtlardan bazılarının da bahsettiği gibi, uygulamanızı yerel makine koduna derlemek için .NET Yerel aracını kullanabilirsiniz. Ancak bu cevapların aksine, nasıl yapılacağını açıklayacağım .
Adımlar:
Yeni .NET Core araç zincirinin bir parçası olan dotnet CLI (komut satırı arabirimi) aracını yükleyin . Bunu uygulamamızı derlemek için kullanacağız; burada bununla ilgili güzel bir makale bulabilirsiniz .
Bir kabuk istemi açın ve cd
uygulamanızın dizinine gidin.
Bunu yaz:
dotnet compile --native
Bu kadar! İşiniz bittiğinde, uygulamanız aşağıdaki gibi tek bir ikili dosyada derlenecektir:
Bağımsız bir yürütülebilir dosya olacak; PDB'ler, derlemeler veya yapılandırma dosyaları dahil değildir (yaşasın!).
Alternatif olarak, daha hızlı bir program istiyorsanız, şunu çalıştırabilirsiniz:
dotnet compile --native --cpp
Bu, programınızı C ++ kod oluşturucuyu (RyuJIT'in aksine) kullanarak optimize eder, böylece uygulamanız AOT senaryoları için daha da optimize edilir.
Bununla ilgili daha fazla bilgiyi dotnet CLI GitHub deposunda bulabilirsiniz .
Birkaç tanesini test ettim ve şu anda .NET 3.5'i destekleyen ve aynı zamanda harika bir sanallaştırma yığınına sahip olan tek Xenocode Postbuild
Ngen ile hala .NET çerçevesinin kurulu olması gerekir, ancak bu tür bir araç kullanıldığında tüm yönetilen kodunuz yerel kodda derlenir, böylece onu çerçeve varlığı olmadan makinelere dağıtabilirsiniz.
Microsoft, çerçeve kurulmadan .NET uygulamalarının çalıştırılmasına izin verecek .NET Yerel Önizlemesini duyurdu .
Bir göz atın: http://blogs.msdn.com/b/dotnet/archive/2014/04/02/announcing-net-native-preview.aspx
SSS: http://msdn.microsoft.com/en-US/vstudio/dn642499.aspx
VS2013 için Microsoft .NET Native'i buradan indirebilirsiniz: http://msdn.microsoft.com/en-US/vstudio/dotnetnative
Evet, Yerel Görüntü Oluşturucu Ngen kullanılıyor . Bununla birlikte, bilmeniz gereken birkaç şey var:
Sonuç olarak, yalnızca uygulamanızın başlama süresini kısaltmanız gerektiğinde Ngen kullanmaya değer.
Yapabilirsin! Ancak .NET 1.1 ile sınırlısınız (sizin için jenerik değil): Mono Ahead-Of-Time derlemesi (AOT)
Ancak bu, derlemenin gerçekten yerel olduğu anlamına gelir, bu nedenle artık tek bir bayt kodu derlemesini dağıtamayacaksınız, her platform için bir bayt koduna ihtiyacınız olacak.
Orijinal olarak iPhone için .NET veya Mono olmadığı için tasarlandı, bu yüzden MonoTouch'ı böyle yaptılar.
Bunu .NET Native adlı yeni ön derleme teknolojisini kullanarak yapabilirsiniz. Buradan kontrol edin: http://msdn.microsoft.com/en-US/vstudio/dotnetnative
Şu anda yalnızca Windows Mağazası Uygulamaları için mevcuttur. Tek bileşenli bağlantı gerçekleştirir. Dolayısıyla .NET Framework kitaplıkları, uygulamanıza statik olarak bağlanır. Her şey yerel olarak derlenir ve IL derlemeleri artık konuşlandırılmaz. Uygulamalar CLR'ye karşı değil Managed Runtime (Mrt.dll) adı verilen sadeleştirilmiş, optimize edilmiş bir çalışma zamanıyla çalışır.
Yukarıda belirtildiği gibi, NGEN bir karma derleme modeli kullandı ve dinamik senaryolar için IL ve JIT'e güvendi. .NET Native, JIT kullanmaz, ancak çeşitli dinamik senaryoları destekler. Kod yazarlarının, desteklemek istedikleri dinamik senaryolar hakkında .NET Yerel derleyicisine ipuçları sağlamak için Çalışma Zamanı Yönergelerini kullanmaları gerekir .
Yerel bir görüntü oluşturmak için ngen.exe'yi kullanabilirsiniz, ancak yine de orijinal yerel olmayan kodu dağıtmanız gerekir ve yine de hedef makinede kurulu çerçeveye ihtiyaç duyar.
Bu da probleminizi gerçekten çözmez.
2019 Cevap: dotnet / corert kullanın . .NET Core projelerini bağımsız .exe
dosyalar halinde derleyebilir . Bağımlılık yok (gibi sistem kitaplıkları hariç kernel32.dll
). Bahse girerim bu, OP'nin ihtiyacı olan şeydir.
GitHub ana sayfasından:
CoreRT derleyicisi, yönetilen bir .NET Core uygulamasını, dağıtımı kolay yerel (mimariye özgü) tek dosyalı bir yürütülebilir dosyada derleyebilir. Ayrıca, diğer programlama dillerinde yazılmış uygulamalar tarafından kullanılabilen bağımsız dinamik veya statik kitaplıklar da üretebilir.
Native'e derlemenin ana nedeni kodlarınızı güvence altına almaktır, aksi takdirde derlenen MSIL, istemcinin makinesindeki kaynak kodlarını dağıtmak gibidir.
NGEN yerel olarak derlenir ancak aynı zamanda IL kodlarını dağıtması gerekir, bu amaç sadece başlatma süresini azaltmaktır, ancak aynı zamanda faydasızdır.
CoreRt alfa sürümüdür ve yalnızca basit helloworld tipi uygulamalarla çalışır.
.Net Core tek bir yürütülebilir dosyalar halinde derlenir, ancak aynı zamanda yerel exe değildir, bu yalnızca IL kodlarının sıkıştırılmış bir dosyasıdır ve çalıştırırken kodları geçici klasöre açacaktır.
Microsoft'tan basit sorum, eğer RyuJIT IL'yi anında yerel olarak derleyebilirse, o zaman neden aynı IL'yi önceden (AOT) derleyemiyorsunuz?
Net core RT uygulanabilir çözümlere benziyor; yakında tüm uygulamalar .net çekirdeğine gidecek; https://www.codeproject.com/Articles/5262251/Generate-Native-Executable-from-NET-Core-3-1-Proje?msg=5753507#xx5753507xx https://docs.microsoft.com/en-us / archive / msdn-magazine / 2018 / kasım / net-core-publishing-options-with-net-core
test edilmedi belki eski win .net sdk ile benzer yapmak mümkün.
Bunu ( http://www.dotnetnative.online/ ) .net derlenmiş exe'yi yerel exe'ye derlemek için deneyin , bunu denedim, yeni ama iyi.