नेट कोड के लिए नेट एप्लिकेशन को कैसे संकलित करें?


89

यदि मैं एक ऐसी मशीन में .NET अनुप्रयोग चलाना चाहता हूँ जहाँ .NET फ्रेमवर्क उपलब्ध नहीं है; क्या आवेदन को मूल कोड में संकलित करने का कोई तरीका है?

जवाबों:


45

Microsoft का एक लेख है जिसमें बताया गया है कि आप MSIL को Native Code कैसे संकलित कर सकते हैं

आप Ngen का उपयोग कर सकते हैं ।

मूल छवि जनरेटर (Ngen.exe) एक उपकरण है जो प्रबंधित अनुप्रयोगों के प्रदर्शन में सुधार करता है। Ngen.exe देशी चित्र बनाता है, जो संकलित प्रोसेसर-विशिष्ट मशीन कोड वाली फाइलें हैं, और स्थानीय कंप्यूटर पर उन्हें मूल छवि कैश में स्थापित करता है। रनटाइम मूल असेंबली को संकलित करने के लिए जस्ट-इन-टाइम (JIT) कंपाइलर का उपयोग करने के बजाय कैश से देशी छवियों का उपयोग कर सकता है।

दुर्भाग्य से, आपको अपने कार्यक्रम को चलाने के लिए अभी भी ढांचे से पुस्तकालयों की आवश्यकता है। ऐसी कोई विशेषता नहीं है जो मुझे एमएस .नेट फ्रेमवर्क एसडीके के साथ पता है जो आपको सभी आवश्यक फाइलों को एक एकल निष्पादन योग्य में संकलित करने की अनुमति देता है


1
मुझे प्रदर्शनों के अलावा इसका उपयोग करने का कोई अन्य कारण नहीं मिला। CLR कोड अभी भी पहले की तरह पढ़ा जा सकता है, और आपको अभी भी .NET की आवश्यकता है। इसलिए निराशाजनक Microsoft ने एक ऐसा उपकरण नहीं दिया है जो यह तय करता हो कि मैं एक बड़ी समस्या क्या हूं (कोई भी आपके उच्च-स्तरीय कोड को देख सकता है)
MasterMastic

मैं एस्पो से सहमत नहीं हूं। क्योंकि, ग्रे में पाठ "रनटाइम" का अर्थ है जो सीएलआर और इस प्रकार .NET फ्रेमवर्क है जो क्रिस के रूप में सही रूप में इंगित करता है। हालांकि, एनजीएन बिंदु सच है। सवाल यह है कि सीएलआर / रनटाइम / .NET फ्रेमवर्क का उपयोग किए बिना सभी समान हैं।
चमेली

1
हालांकि, यह उत्साहित होने का समय है। ऐसा लगता है कि .net फ्रेमवर्क अंत में एक मूल संकलक हो रहा है - msdn.microsoft.com/en-US/vstudio/dotnetnative
ferventcoder

यदि आप .NET के निष्पादन योग्य स्वतंत्र चाहते हैं तो अपने .NET निष्पादन योग्य और उसके आश्रित पेड़ में सब कुछ ILMerge करें ।

24

RemoteSoft एक उपकरण बनाता है जो .NET अनुप्रयोग को एक संकुल में संकलित करता है जो बिना .NET स्थापित किए चलाया जा सकता है। मेरे पास इसका कोई अनुभव नहीं है:

रिमोटसॉफ्ट सलामंडर


5
यह एकमात्र ऐसा उपकरण है जिसके बारे में मैंने कभी सुना है कि यह रूपरेखा की आवश्यकता के बिना करेगा। बेशक, इसकी कीमत $ 1249 है।
थप्पड़

3
मैंने पिछले कुछ वर्षों में कई बार कोशिश की, जानकारी या मूल्यांकन प्राप्त करने के लिए, लेकिन वे मूल्य निर्धारण या डेमो के बारे में मेरे ईमेल कभी नहीं लौटाते हैं इसलिए मुझे लगता है कि उनका उत्पाद थोड़ा संदिग्ध हो सकता है।
कोडेनहेम 22'14

21

जैसा कि यहां दिए गए कुछ अन्य उत्तरों में बताया गया है, आप अपने ऐप को देशी मशीन कोड में संकलित करने के लिए .NET नेटिव टूल का उपयोग कर सकते हैं । उन जवाबों के विपरीत, हालांकि, मैं बताऊंगा कि यह कैसे करना है।

कदम:

  1. डॉटनेट सीएलआई (कमांड लाइन इंटरफेस) टूल स्थापित करें , जो नए .NET कोर टूलकिन का हिस्सा है। हम इसका उपयोग हमारे ऐप को संकलित करने के लिए करेंगे; आप इसके बारे में एक अच्छा लेख यहां पा सकते हैं

  2. एक शेल प्रॉम्प्ट और cdअपने एप्लिकेशन की निर्देशिका तक खोलें ।

  3. इसे टाइप करें:

    dotnet compile --native
    

बस! जब आप काम कर लेंगे, तो आपका ऐप इस तरह से सिंगल बाइनरी में संकलित हो जाएगा:

मूल संकलित .NET कोर EXE

यह एक स्टैंडअलोन निष्पादन योग्य होगा; कोई PDBs, असेंबली या कॉन्फिगर फाइल शामिल नहीं है (हुर्रे!)।


वैकल्पिक रूप से, यदि आप और भी तेज प्रोग्राम चाहते हैं, तो आप इसे चला सकते हैं:

dotnet compile --native --cpp

यह आपके प्रोग्राम को C ++ कोड जनरेटर (RyuJIT के विपरीत) का उपयोग करके अनुकूलित करेगा, इसलिए आपका ऐप AOT परिदृश्यों के लिए और भी अधिक अनुकूलित है।

आप इस बारे में अधिक जानकारी डॉटनेट सीएलआई गिटहब रेपो में पा सकते हैं ।


नोट: यह केवल .NET कोर के साथ निर्मित परियोजनाओं के खिलाफ समर्थित है। (+1, हालांकि)
महमूद अल-कुद्सी

आप बहुत महत्वपूर्ण विवरण भूल गए हैं कि .NET नेटिव को विंडोज 10.
एल्म्यू

ऐसा लगता है कि .net कोर 3.1 के साथ काम नहीं करता है कोई अद्यतन?
user1005462 13

19

मैंने उनमें से कई का परीक्षण किया है और इस समय केवल वही है जो .NET 3.5 का समर्थन करता है और इसमें एक महान वर्चुअलाइजेशन स्टैक भी है जो एक्सनकोड है Postbuild है

Ngen के साथ आपको अभी भी .NET फ्रेमवर्क स्थापित करने की आवश्यकता है, लेकिन एक टूल का उपयोग करके जैसे कि आपके सभी प्रबंधित कोड को मूल कोड में संकलित किया जाता है ताकि आप इसे बिना फ्रेमवर्क उपस्थिति के मशीनों पर तैनात कर सकें।


19

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


11

हाँ, Ngen , मूल छवि जनरेटर का उपयोग कर । हालाँकि, ऐसी कई चीजें हैं जिनसे आपको अवगत होना चाहिए:

  • अपने निष्पादन योग्य को चलाने के लिए आपको अभी भी CLR की आवश्यकता है।
  • CLR आपके द्वारा चलाए जा रहे वातावरण के आधार पर आपके असेंबली को डायनामिक रूप से ऑप्टिमाइज़ नहीं करेगा (जैसे 486 बनाम 586 बनाम 686, आदि)।

यदि आप अपने आवेदन के स्टार्टअप समय को कम करने की आवश्यकता है, तो सभी के लिए, यह केवल Ngen का उपयोग करने के लायक है।


9

आप ऐसा कर सकते हैं! हालाँकि आप .NET 1.1 (आपके लिए कोई जेनरिक) पर सीमित नहीं हैं: मोनो अहेड- टू -टाइम संकलन (एओटी)

हालांकि, इसका मतलब यह है कि संकलन वास्तव में मूल है, इसलिए अब आप एक सिंगल बाईटेकोड असेंबली को तैनात करने में सक्षम नहीं होंगे, आपको प्रति प्लेटफॉर्म एक की आवश्यकता होगी।

यह मूल रूप से डिज़ाइन किया गया था क्योंकि iPhone के लिए कोई .NET या मोनो नहीं है, इसलिए उन्होंने MonoTouch को कैसे बनाया।


6

आप इसे .NET नेटिव नामक नई प्रीकंप्लीकेशन तकनीक का उपयोग करके कर सकते हैं। इसे यहां देखें: http://msdn.microsoft.com/en-US/vstudio/dotnetnative

वर्तमान में यह केवल विंडोज स्टोर एप्स के लिए उपलब्ध है। यह एकल घटक लिंकिंग करता है। तो .NET फ्रेमवर्क पुस्तकालयों को आपके ऐप में सांख्यिकीय रूप से जोड़ा जाता है। सब कुछ मूल के लिए संकलित किया गया है और आईएल असेंबलियों को अब तैनात नहीं किया गया है। एप्लिकेशन CLR के विरुद्ध नहीं चलते हैं, लेकिन नीचे छीन लिया गया, अनुकूलित रनटाइम जिसे प्रबंधित रनटाइम (Mrt.dll) कहा जाता है

जैसा कि ऊपर कहा गया है, NGEN ने मिश्रण संकलन मॉडल का उपयोग किया और गतिशील परिदृश्यों के लिए IL और JIT पर भरोसा किया। .NET नेटिव JIT का उपयोग नहीं करता है लेकिन यह विभिन्न गतिशील परिदृश्यों का समर्थन करता है। कोड लेखकों को समर्थन करने के लिए आवश्यक गतिशील परिदृश्यों पर .NET नेटिव कंपाइलर को संकेत प्रदान करने के लिए रनटाइम निर्देशों का उपयोग करने की आवश्यकता होगी ।


1
+1 - मुझे ऐसा होने में वर्षों का इंतजार है। मुझे उम्मीद थी कि "वर्चुअल मशीन" के साथ दुनिया का मोह जल्द ही खत्म हो जाएगा, लेकिन फिर भी, ऐसा हो रहा है। मुझे उम्मीद है कि हम मूल संकलन का पुनरुत्थान देखने वाले हैं। जैसा कि आपने कहा, फ़िलहाल इसके विंडो स्टोर ऐप्स के लिए, लेकिन यह डेस्कटॉप बाजार में समान उपचार की मांग करने से पहले की बात है।
कोडेनहेम 22'14

4

आप मूल छवि बनाने के लिए ngen.exe का उपयोग कर सकते हैं लेकिन आपको अभी भी मूल गैर-देशी कोड वितरित करना होगा, और इसके लिए अभी भी लक्ष्य मशीन पर स्थापित रूपरेखा की आवश्यकता है।

जो वास्तव में आपकी समस्या का समाधान नहीं करता है।


2

2019 उत्तर: डॉटनेट / कोरट का उपयोग करें । यह .NET कोर प्रोजेक्ट्स को स्टैंडअलोन .exeफाइलों में संकलित कर सकता है । कोई निर्भरता (जैसे सिस्टम पुस्तकालयों को छोड़कर kernel32.dll)। मुझे यकीन है कि यह वही है जो ओपी की जरूरत है।

इसके GitHub मुख पृष्ठ से:

CoreRT कंपाइलर एक प्रबंधित .NET कोर एप्लिकेशन को एक देशी (आर्किटेक्चर विशिष्ट) सिंगल-फाइल निष्पादन योग्य में संकलित कर सकता है जो तैनात करना आसान है। यह स्टैंडअलोन गतिशील या स्थिर पुस्तकालयों का भी उत्पादन कर सकता है जो अन्य प्रोग्रामिंग भाषाओं में लिखे गए अनुप्रयोगों द्वारा उपभोग किए जा सकते हैं।


1

.NET की प्रकृति उन ऐप्स को स्थापित करने में सक्षम है जिन्हें MSIL के लिए संकलित किया गया है, फिर JIT या Ngen द्वारा MSIL को मूल कोड में संकलित किया गया है और स्थानीय रूप से कैश में संग्रहीत किया गया है। यह कभी भी एक सच्चे मूल .exe उत्पन्न करने के लिए नहीं था जो .NET फ्रेमवर्क के स्वतंत्र रूप से चलाया जा सकता है।

हो सकता है कि ऐसा करने वाला कोई हैक है, लेकिन यह मेरे लिए सुरक्षित नहीं है। बहुत अधिक डायनामिक्स हैं जिनके लिए रूपरेखा की आवश्यकता होती है, जैसे: डायनामिक असेंबली लोडिंग, एमएसआईएल कोड जनरेशन, आदि।


0

नेटिव में संकलित करने का मुख्य कारण आपके कोड को सुरक्षित करना है, अन्यथा एमएसआईएल संकलित क्लाइंट की मशीन में स्रोत कोड को तैनात करने जैसा है।

NGEN देशी में संकलित करता है, लेकिन उसे IL कोड तैनात करने की आवश्यकता होती है, यह उद्देश्य केवल स्टार्टअप समय को कम करने के लिए है लेकिन यह भी बेकार है।

CoreRt अल्फ़ा संस्करण है और केवल साधारण हेलोवर्ल्ड प्रकार के ऐप के साथ काम कर रहा है।

.Net कोर एकल निष्पादन योग्य फ़ाइलों में संकलित करता है, लेकिन यह भी देशी exe नहीं है, यह IL कोड की सिर्फ एक ज़िपित फ़ाइल है और यह रनिंग के दौरान कोड को अस्थायी फ़ोल्डर में अनज़िप कर देगा।

Microsoft से मेरा सरल प्रश्न है, यदि RyuJIT IL को मक्खी पर मूल में संकलित कर सकता है तो आप उसी IL से आगे (AOT) संकलन क्यों नहीं कर सकते।


"CoreRt अल्फ़ा संस्करण है और केवल साधारण हेलोवर्ल्ड प्रकार के ऐप के साथ काम कर रहा है।" यह सच नहीं है - स्टीम पर गेम हैं (जैसे street4rage.com ) जो हेलोवर्ल्ड की तुलना में अधिक जटिल हैं।
एस वेई

लेकिन CoreRT किसी भी Winform अनुप्रयोगों को संकलित नहीं कर सकता है। मुझे एक और ऑनलाइन कंपाइलर मिला, जो विनफॉर्म एप्लिकेशन ( dotnetnative.online ) को संकलित कर सकता है
रहीम

0

शुद्ध कोर आरटी व्यावहारिक समाधान की तरह लग रहा है; जल्द ही सभी ऐप .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 / नवंबर / शुद्ध कोर-प्रकाशित करने-विकल्प-साथ शुद्ध कोर

शायद पुरानी जीत के साथ परीक्षण नहीं किया गया है।


-1

इस ( http://www.dotnetnative.online/ ) को संकलित करने के लिए .net संकलित exe को मूल निर्वासन में संकलित करने की कोशिश की, मैंने यह कोशिश की, इसकी नई लेकिन अच्छी।


कृपया उत्तर में लिंक की सामग्री पोस्ट करें।
रस जे।

-3

मुझे लगता है कि यह संभव नहीं है। आपको .NET FW को भी वितरित करना होगा। यदि आप नेट ऐप को नेटिव कोड में संकलित करना चाहते हैं, तो एनजीएन टूल का उपयोग करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.