यदि मैं एक ऐसी मशीन में .NET अनुप्रयोग चलाना चाहता हूँ जहाँ .NET फ्रेमवर्क उपलब्ध नहीं है; क्या आवेदन को मूल कोड में संकलित करने का कोई तरीका है?
जवाबों:
Microsoft का एक लेख है जिसमें बताया गया है कि आप MSIL को Native Code कैसे संकलित कर सकते हैं
आप Ngen का उपयोग कर सकते हैं ।
मूल छवि जनरेटर (Ngen.exe) एक उपकरण है जो प्रबंधित अनुप्रयोगों के प्रदर्शन में सुधार करता है। Ngen.exe देशी चित्र बनाता है, जो संकलित प्रोसेसर-विशिष्ट मशीन कोड वाली फाइलें हैं, और स्थानीय कंप्यूटर पर उन्हें मूल छवि कैश में स्थापित करता है। रनटाइम मूल असेंबली को संकलित करने के लिए जस्ट-इन-टाइम (JIT) कंपाइलर का उपयोग करने के बजाय कैश से देशी छवियों का उपयोग कर सकता है।
दुर्भाग्य से, आपको अपने कार्यक्रम को चलाने के लिए अभी भी ढांचे से पुस्तकालयों की आवश्यकता है। ऐसी कोई विशेषता नहीं है जो मुझे एमएस .नेट फ्रेमवर्क एसडीके के साथ पता है जो आपको सभी आवश्यक फाइलों को एक एकल निष्पादन योग्य में संकलित करने की अनुमति देता है
RemoteSoft एक उपकरण बनाता है जो .NET अनुप्रयोग को एक संकुल में संकलित करता है जो बिना .NET स्थापित किए चलाया जा सकता है। मेरे पास इसका कोई अनुभव नहीं है:
जैसा कि यहां दिए गए कुछ अन्य उत्तरों में बताया गया है, आप अपने ऐप को देशी मशीन कोड में संकलित करने के लिए .NET नेटिव टूल का उपयोग कर सकते हैं । उन जवाबों के विपरीत, हालांकि, मैं बताऊंगा कि यह कैसे करना है।
कदम:
डॉटनेट सीएलआई (कमांड लाइन इंटरफेस) टूल स्थापित करें , जो नए .NET कोर टूलकिन का हिस्सा है। हम इसका उपयोग हमारे ऐप को संकलित करने के लिए करेंगे; आप इसके बारे में एक अच्छा लेख यहां पा सकते हैं ।
एक शेल प्रॉम्प्ट और cd
अपने एप्लिकेशन की निर्देशिका तक खोलें ।
इसे टाइप करें:
dotnet compile --native
बस! जब आप काम कर लेंगे, तो आपका ऐप इस तरह से सिंगल बाइनरी में संकलित हो जाएगा:
यह एक स्टैंडअलोन निष्पादन योग्य होगा; कोई PDBs, असेंबली या कॉन्फिगर फाइल शामिल नहीं है (हुर्रे!)।
वैकल्पिक रूप से, यदि आप और भी तेज प्रोग्राम चाहते हैं, तो आप इसे चला सकते हैं:
dotnet compile --native --cpp
यह आपके प्रोग्राम को C ++ कोड जनरेटर (RyuJIT के विपरीत) का उपयोग करके अनुकूलित करेगा, इसलिए आपका ऐप AOT परिदृश्यों के लिए और भी अधिक अनुकूलित है।
आप इस बारे में अधिक जानकारी डॉटनेट सीएलआई गिटहब रेपो में पा सकते हैं ।
मैंने उनमें से कई का परीक्षण किया है और इस समय केवल वही है जो .NET 3.5 का समर्थन करता है और इसमें एक महान वर्चुअलाइजेशन स्टैक भी है जो एक्सनकोड है Postbuild है
Ngen के साथ आपको अभी भी .NET फ्रेमवर्क स्थापित करने की आवश्यकता है, लेकिन एक टूल का उपयोग करके जैसे कि आपके सभी प्रबंधित कोड को मूल कोड में संकलित किया जाता है ताकि आप इसे बिना फ्रेमवर्क उपस्थिति के मशीनों पर तैनात कर सकें।
Microsoft ने अपने .NET नेटिव प्रिव्यू की घोषणा की है जो फ्रेमवर्क इंस्टॉल किए बिना .NET एप्लिकेशन चलाने की अनुमति देगा।
एक बार देख लें: 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
आप यहाँ से VS2013 के लिए Microsoft .NET नेटिव डाउनलोड कर सकते हैं: http://msdn.microsoft.com/en-US/vstudio/dotnetnative
हाँ, Ngen , मूल छवि जनरेटर का उपयोग कर । हालाँकि, ऐसी कई चीजें हैं जिनसे आपको अवगत होना चाहिए:
यदि आप अपने आवेदन के स्टार्टअप समय को कम करने की आवश्यकता है, तो सभी के लिए, यह केवल Ngen का उपयोग करने के लायक है।
आप ऐसा कर सकते हैं! हालाँकि आप .NET 1.1 (आपके लिए कोई जेनरिक) पर सीमित नहीं हैं: मोनो अहेड- टू -टाइम संकलन (एओटी)
हालांकि, इसका मतलब यह है कि संकलन वास्तव में मूल है, इसलिए अब आप एक सिंगल बाईटेकोड असेंबली को तैनात करने में सक्षम नहीं होंगे, आपको प्रति प्लेटफॉर्म एक की आवश्यकता होगी।
यह मूल रूप से डिज़ाइन किया गया था क्योंकि iPhone के लिए कोई .NET या मोनो नहीं है, इसलिए उन्होंने MonoTouch को कैसे बनाया।
आप इसे .NET नेटिव नामक नई प्रीकंप्लीकेशन तकनीक का उपयोग करके कर सकते हैं। इसे यहां देखें: http://msdn.microsoft.com/en-US/vstudio/dotnetnative
वर्तमान में यह केवल विंडोज स्टोर एप्स के लिए उपलब्ध है। यह एकल घटक लिंकिंग करता है। तो .NET फ्रेमवर्क पुस्तकालयों को आपके ऐप में सांख्यिकीय रूप से जोड़ा जाता है। सब कुछ मूल के लिए संकलित किया गया है और आईएल असेंबलियों को अब तैनात नहीं किया गया है। एप्लिकेशन CLR के विरुद्ध नहीं चलते हैं, लेकिन नीचे छीन लिया गया, अनुकूलित रनटाइम जिसे प्रबंधित रनटाइम (Mrt.dll) कहा जाता है
जैसा कि ऊपर कहा गया है, NGEN ने मिश्रण संकलन मॉडल का उपयोग किया और गतिशील परिदृश्यों के लिए IL और JIT पर भरोसा किया। .NET नेटिव JIT का उपयोग नहीं करता है लेकिन यह विभिन्न गतिशील परिदृश्यों का समर्थन करता है। कोड लेखकों को समर्थन करने के लिए आवश्यक गतिशील परिदृश्यों पर .NET नेटिव कंपाइलर को संकेत प्रदान करने के लिए रनटाइम निर्देशों का उपयोग करने की आवश्यकता होगी ।
2019 उत्तर: डॉटनेट / कोरट का उपयोग करें । यह .NET कोर प्रोजेक्ट्स को स्टैंडअलोन .exe
फाइलों में संकलित कर सकता है । कोई निर्भरता (जैसे सिस्टम पुस्तकालयों को छोड़कर kernel32.dll
)। मुझे यकीन है कि यह वही है जो ओपी की जरूरत है।
इसके GitHub मुख पृष्ठ से:
CoreRT कंपाइलर एक प्रबंधित .NET कोर एप्लिकेशन को एक देशी (आर्किटेक्चर विशिष्ट) सिंगल-फाइल निष्पादन योग्य में संकलित कर सकता है जो तैनात करना आसान है। यह स्टैंडअलोन गतिशील या स्थिर पुस्तकालयों का भी उत्पादन कर सकता है जो अन्य प्रोग्रामिंग भाषाओं में लिखे गए अनुप्रयोगों द्वारा उपभोग किए जा सकते हैं।
.NET की प्रकृति उन ऐप्स को स्थापित करने में सक्षम है जिन्हें MSIL के लिए संकलित किया गया है, फिर JIT या Ngen द्वारा MSIL को मूल कोड में संकलित किया गया है और स्थानीय रूप से कैश में संग्रहीत किया गया है। यह कभी भी एक सच्चे मूल .exe उत्पन्न करने के लिए नहीं था जो .NET फ्रेमवर्क के स्वतंत्र रूप से चलाया जा सकता है।
हो सकता है कि ऐसा करने वाला कोई हैक है, लेकिन यह मेरे लिए सुरक्षित नहीं है। बहुत अधिक डायनामिक्स हैं जिनके लिए रूपरेखा की आवश्यकता होती है, जैसे: डायनामिक असेंबली लोडिंग, एमएसआईएल कोड जनरेशन, आदि।
नेटिव में संकलित करने का मुख्य कारण आपके कोड को सुरक्षित करना है, अन्यथा एमएसआईएल संकलित क्लाइंट की मशीन में स्रोत कोड को तैनात करने जैसा है।
NGEN देशी में संकलित करता है, लेकिन उसे IL कोड तैनात करने की आवश्यकता होती है, यह उद्देश्य केवल स्टार्टअप समय को कम करने के लिए है लेकिन यह भी बेकार है।
CoreRt अल्फ़ा संस्करण है और केवल साधारण हेलोवर्ल्ड प्रकार के ऐप के साथ काम कर रहा है।
.Net कोर एकल निष्पादन योग्य फ़ाइलों में संकलित करता है, लेकिन यह भी देशी exe नहीं है, यह IL कोड की सिर्फ एक ज़िपित फ़ाइल है और यह रनिंग के दौरान कोड को अस्थायी फ़ोल्डर में अनज़िप कर देगा।
Microsoft से मेरा सरल प्रश्न है, यदि RyuJIT IL को मक्खी पर मूल में संकलित कर सकता है तो आप उसी IL से आगे (AOT) संकलन क्यों नहीं कर सकते।
शुद्ध कोर आरटी व्यावहारिक समाधान की तरह लग रहा है; जल्द ही सभी ऐप .net कोर पर जाएंगे; https://www.codeproject.com/Articles/5262251/Generate-Native-Executable-from-NET-Core-3-1-Proje?msg=5753507#xx5753507xx https://docs.microsoft.com/en-us / संग्रह / MSDN-पत्रिका / 2018 / नवंबर / शुद्ध कोर-प्रकाशित करने-विकल्प-साथ शुद्ध कोर
शायद पुरानी जीत के साथ परीक्षण नहीं किया गया है।
इस ( http://www.dotnetnative.online/ ) को संकलित करने के लिए .net संकलित exe को मूल निर्वासन में संकलित करने की कोशिश की, मैंने यह कोशिश की, इसकी नई लेकिन अच्छी।