দেশীয় কোডে একটি নেট অ্যাপ্লিকেশন কীভাবে সংকলন করবেন?


90

আমি যদি এমন কোনও মেশিনে একটি নেট অ্যাপ্লিকেশন চালাতে চাই যেখানে। নেট নেট ফ্রেমওয়ার্ক পাওয়া যায় না; দেশীয় কোডটিতে অ্যাপ্লিকেশনটি সংকলনের কোনও উপায় আছে কি?

উত্তর:


45

মাইক্রোসফ্টের একটি নিবন্ধ রয়েছে যা আপনি কীভাবে এমএসআইএলকে নেটিভ কোডে সংকলন করতে পারবেন তা বর্ণনা করে

আপনি Ngen ব্যবহার করতে পারেন ।

নেটিভ ইমেজ জেনারেটর (Ngen.exe) এমন একটি সরঞ্জাম যা পরিচালিত অ্যাপ্লিকেশনগুলির কার্যকারিতা উন্নত করে। এনজেন.এক্সে দেশীয় চিত্র তৈরি করে, যা সংকলিত প্রসেসর-নির্দিষ্ট মেশিন কোডযুক্ত ফাইলগুলি এবং সেগুলি স্থানীয় কম্পিউটারে নেটিভ ইমেজ ক্যাশে ইনস্টল করে। রানটাইম আসল অ্যাসেমবিলিটি সংকলনের জন্য কেবলমাত্র ইন-টাইম (জেআইটি) সংকলকটি ব্যবহার না করে ক্যাশে থেকে স্থানীয় চিত্রগুলি ব্যবহার করতে পারে।

দুর্ভাগ্যক্রমে, আপনার প্রোগ্রামটি চালনার জন্য আপনার এখনও ফ্রেমওয়ার্ক থেকে গ্রন্থাগারগুলির প্রয়োজন। এম। এস। নেট ফ্রেমওয়ার্ক এসডিকে দিয়ে এমন কোনও বৈশিষ্ট্য নেই যা আপনাকে সমস্ত প্রয়োজনীয় ফাইলগুলি একক নির্বাহযোগ্য হিসাবে সংকলন করতে দেয়


4
পারফরম্যান্স বাদে এটিকে ব্যবহার করার জন্য আমি অন্য কোনও কারণ খুঁজে পাই না। সিএলআর কোডটি এখনও আগের মতোই পড়া যায় এবং আপনার এখনও নেট প্রয়োজন। হতাশ হ'ল মাইক্রোসফ্ট এমন কোনও সরঞ্জাম সরবরাহ করেনি যা আমার বড় সমস্যা হিসাবে বিবেচিত যা ঠিক করে দেবে (যে কেউ আপনার উচ্চ-স্তরের কোডটি যেমন দেখতে পাবে)
মাস্টারমাস্টিক

আমি এস্পোর সাথে একমত নই। কারণ, ধূসর বর্ণের পাঠ্যটি "রানটাইম" বলে যার অর্থ সিএলআর এবং সুতরাং। নেট ফ্রেমওয়ার্ক যা ছবিতে আসে ক্রিস দ্বারা সঠিকভাবে নির্দেশিত। তবে এনজেন পয়েন্টটি সত্য প্রশ্নটি হল, সিএলআর / রানটাইম /। নেট ফ্রেমওয়ার্ক ব্যবহার না করেই সব একই।
জুঁই

4
এটা সময় অবশ্য উত্তেজিত হয়, .NET Framework মত দেখাচ্ছে পরিশেষে একটি নেটিভ কম্পাইলার হচ্ছে - msdn.microsoft.com/en-US/vstudio/dotnetnative
ferventcoder

ILMerge আপনার .NET এক্সিকিউটেবল এবং তার নির্ভরতা গাছ তারপর Ngen সবকিছু আপনি একটি এক্সিকিউটেবল চান তাহলে .NET স্বাধীন

24

রিমোটসফ্ট এমন একটি সরঞ্জাম তৈরি করে যা .NET অ্যাপ্লিকেশনটিকে একটি প্যাকেজে সংকলিত করে যা। নেট ইনস্টল না করে চালানো যায়। এটির সাথে আমার কোনও অভিজ্ঞতা নেই:

রিমোটসফট সালামান্ডার


4
এটিই কেবলমাত্র একমাত্র সরঞ্জাম যা আমি শুনেছি এটি কাঠামোর প্রয়োজন ছাড়াই এটি করবে। অবশ্যই, এটির দাম 49 1249।
স্লাপআউট

4
তথ্য বা মূল্যায়নের জন্য আমি বিগত কয়েক বছর ধরে কয়েকবার চেষ্টা করেছি, তবে তারা কখনও দাম বা গণতন্ত্র সম্পর্কে আমার ইমেলগুলি ফেরত দেয় না বলে আমি মনে করি তাদের পণ্যটি কিছুটা সন্দেহজনক হতে পারে।
কোডেনহেম

22

এখানে অন্যান্য উত্তরগুলির মধ্যে কয়েকটি যেমন উল্লেখ করেছে, আপনি নিজের অ্যাপ্লিকেশনটি স্থানীয় মেশিন কোডে সংকলিত করতে .NET নেটিভ সরঞ্জামটি ব্যবহার করতে পারেন । এই উত্তরগুলির বিপরীতে, তবে আমি কীভাবে এটি করব তা ব্যাখ্যা করব ।

পদক্ষেপ:

  1. ডটনেট সিএলআই (কমান্ড লাইন ইন্টারফেস) সরঞ্জামটি ইনস্টল করুন , যা নতুন .NET কোর সরঞ্জামচয়ের অংশ। আমরা আমাদের অ্যাপ্লিকেশনটি সংকলন করতে এটি ব্যবহার করব; আপনি এটি সম্পর্কে একটি ভাল নিবন্ধ এখানে পেতে পারেন

  2. একটি শেল প্রম্পট এবং cdআপনার অ্যাপ্লিকেশন ডিরেক্টরিতে খুলুন ।

  3. এটি টাইপ করুন:

    dotnet compile --native
    

এটাই! আপনার কাজ শেষ হয়ে গেলে, আপনার অ্যাপ্লিকেশনটি একক বাইনারিতে এইভাবে সংকলিত হবে:

নেটিভ সংকলিত। নেট কোর EXE

এটি একক কার্যকর কার্যকর হবে; কোনও পিডিবি, সমাবেশ, বা কনফিগার ফাইল অন্তর্ভুক্ত নেই (হুর!)।


বিকল্পভাবে, আপনি যদি আরও দ্রুত প্রোগ্রাম চান, আপনি এটি চালাতে পারেন:

dotnet compile --native --cpp

এটি আপনার প্রোগ্রামটি সি ++ কোড জেনারেটর (রিউজিআইটির বিপরীতে) ব্যবহার করে অনুকূলিত করবে, সুতরাং আপনার অ্যাপটি এওটি পরিস্থিতিগুলির জন্য আরও বেশি অনুকূলিত হয়েছে।

আপনি ডটনেট সিএলআই গিটহাব রেপোতে এ সম্পর্কিত আরও তথ্য পেতে পারেন ।


দ্রষ্টব্য: এটি কেবলমাত্র নেট নেট দ্বারা নির্মিত প্রকল্পগুলির বিরুদ্ধে সমর্থিত। (+1, যদিও)
মাহমুদ আল-কুদসি

আপনি খুব গুরুত্বপূর্ণ
বিবরণটি

4
দেখে মনে হচ্ছে যে নেট নেট 3.1 এর সাথে কোনও আপডেট নেই?
ব্যবহারকারী 1005462

19

আমি তাদের বেশ কয়েকটি পরীক্ষা করেছি এবং এই মুহুর্তে কেবলমাত্র এক। নেট 3.5 সমর্থন করে এবং একটি দুর্দান্ত ভার্চুয়ালাইজেশন স্ট্যাক রয়েছে জেনোকোড পোস্ট বিল্ড

এনজেনের সাথে আপনার এখনও .NET কাঠামো ইনস্টল করা দরকার তবে একটি সরঞ্জাম ব্যবহার করা যেমন আপনার সমস্ত পরিচালিত কোড স্থানীয় কোডে সংকলিত হয় যাতে আপনি ফ্রেমওয়ার্কের উপস্থিতি ছাড়াই মেশিনে স্থাপন করতে পারেন।


19

মাইক্রোসফ্ট তার .NET নেটিভ প্রাকদর্শন ঘোষণা করেছে যা ফ্রেমওয়ার্ক ইনস্টল না করেই .NET অ্যাপ্লিকেশনগুলি চালানোর অনুমতি দেয়।

একবার দেখুন: http://blogs.msdn.com/b/dotnet/archive/2014/04/02/annoucing-net-native-preview.aspx

এফএকিউ: http://msdn.microsoft.com/en-US/vstudio/dn642499.aspx

আপনি VS2013 এর জন্য মাইক্রোসফ্ট .NET নেটিভ ডাউনলোড করতে পারেন এখান থেকে: http://msdn.microsoft.com/en-US/vstudio/dotnetnative


11

হ্যাঁ, নেজেন , নেটিভ ইমেজ জেনারেটর ব্যবহার করে । তবে কয়েকটি বিষয় সম্পর্কে আপনার সচেতন হওয়া দরকার:

  • আপনার এক্সিকিউটেবল চালনার জন্য আপনার এখনও সিএলআর দরকার।
  • সিএলআর আপনার চলমান পরিবেশের উপর ভিত্তি করে আপনার সমাবেশগুলি গতিশীলভাবে অনুকূল করবে না (উদাঃ 486 বনাম 586 বনাম 686 ইত্যাদি)

সব মিলিয়ে, আপনার অ্যাপ্লিকেশনটির প্রারম্ভকালীন সময় হ্রাস করার প্রয়োজন হলে Ngen ব্যবহার করা কেবলমাত্র মূল্যবান।


9

আপনি পারেন! তবে আপনি .NET 1.1 এ সীমাবদ্ধ (আপনার জন্য জেনেরিক নেই): মনো-এগিয়ে-কাল-সংকলন (এওটি)

তবে এর অর্থ হ'ল সংকলনটি সত্যই নেটিভ, সুতরাং আপনি আর কোনও একক বাইটকোড সমাবেশ স্থাপন করতে পারবেন না, আপনার প্রতি প্ল্যাটফর্মের জন্য একটি প্রয়োজন।

এটি মূলত ডিজাইন করা হয়েছিল কারণ আইফোনটির জন্য নেট বা নেট নেই, তাই তারা মনো টাচ তৈরি করেছিল।


6

.NET নেটিভ নামে পরিচিত নতুন প্রিম্পম্পিলেশন প্রযুক্তি ব্যবহার করে আপনি এটি করতে পারেন। এটি এখানে দেখুন: http://msdn.microsoft.com/en-US/vstudio/dotnetnative

বর্তমানে এটি কেবল উইন্ডোজ স্টোর অ্যাপ্লিকেশনগুলির জন্য উপলব্ধ। এটি একক উপাদান সংযোগ সম্পাদন করে। সুতরাং। নেট ফ্রেমওয়ার্ক লাইব্রেরিগুলি স্থিরভাবে আপনার অ্যাপ্লিকেশনটিতে লিঙ্কযুক্ত। সমস্ত কিছু দেশীয়তে সংকলিত হয় এবং আইএল সমাবেশগুলি আর মোতায়েন করা হয় না। অ্যাপ্লিকেশনগুলি সিএলআরের বিপরীতে চলে না তবে পরিচালিত রানটাইম (Mrt.dll) নামে একটি স্ট্রিপ ডাউন, অনুকূলিত রানটাইম

উপরে উল্লিখিত হিসাবে, এনজিইএন একটি মিশ্র সংকলন মডেল ব্যবহার করেছে এবং গতিশীল পরিস্থিতিগুলির জন্য আইএল এবং জেআইটির উপর নির্ভর করেছিল। .NET নেটিভ JIT ব্যবহার করে না তবে এটি বিভিন্ন গতিশীল পরিস্থিতিতে সমর্থন করে। কোড লেখকদের রানটাইম নির্দেশিকা ব্যবহার করতে হবে। NET নেটিভ সংকলককে তারা সমর্থন করতে চান এমন গতিশীল পরিস্থিতিতে ints


4
+1 - আমি এই ঘটনার জন্য বছর ধরে অপেক্ষা করছিলাম। আমি আশা করেছিলাম যে "ভার্চুয়াল মেশিন" দিয়ে বিশ্বের মোহ খুব শিগগিরই এর কোর্সটি চালাবে, তবে তা সত্ত্বেও তা ঘটছে। আমি আশা করি আমরা দেশীয় সংকলন পুনরুত্থান দেখতে চলেছি। যেমনটি আপনি বলেছেন, উইন্ডোর স্টোর অ্যাপ্লিকেশনগুলি এই মুহুর্তে, তবে ডেস্কটপ বাজারে সমান চিকিত্সার দাবি করার আগে এটি কেবল সময়ের বিষয়।
কোডেনহেম

4

একটি নেটিভ চিত্র তৈরি করতে আপনি ngen.exe ব্যবহার করতে পারেন তবে আপনাকে এখনও মূল অ-নেটিভ কোড বিতরণ করতে হবে এবং এটি এখনও লক্ষ্য মেশিনে ইনস্টল করা কাঠামোর প্রয়োজন।

যা সত্যিই আপনার সমস্যার সমাধান করে না।


2

2019 উত্তর: ডটনেট / কোর্ট ব্যবহার করুন । এটি। নেট কোর প্রকল্পগুলি স্বতন্ত্র .exeফাইলগুলিতে সংকলন করতে পারে । কোনও নির্ভরতা নেই (যেমন সিস্টেম লাইব্রেরি বাদে kernel32.dll)। আমি বাজি ধরলাম এটি ঠিক ওপিটির দরকার।

এর গিটহাব হোম পৃষ্ঠা থেকে:

কোরআরটি সংকলক একটি পরিচালিত .NET কোর অ্যাপ্লিকেশনটি একটি স্থানীয় (আর্কিটেকচার নির্দিষ্ট) একক-ফাইল এক্সিকিউটেবল যা সংযুক্ত করা সহজ comp এটি স্ট্যান্ডএলোন ডায়নামিক বা স্ট্যাটিক লাইব্রেরি তৈরি করতে পারে যা অন্যান্য প্রোগ্রামিং ভাষায় রচিত অ্যাপ্লিকেশন দ্বারা গ্রাস করা যায়।


রেপো সংরক্ষণাগারভুক্ত করা হয়েছে এবং এখন ছাড়িয়ে গেছে।
user541686

1

.NET- র প্রকৃতি হ'ল এমএসআইএল-তে সংকলিত অ্যাপ্লিকেশনগুলি ইনস্টল করতে সক্ষম হবেন, তারপরে জেআইটি বা এনজেন দ্বারা, এমএসআইএল স্থানীয় কোডে সংকলন করে এবং স্থানীয়ভাবে একটি ক্যাশে সংরক্ষণ করা হয়। এটি কখনও কখনও সত্যিকারের নেটিভ .exe তৈরির উদ্দেশ্যে করা হয়নি যা নেট নেট ফ্রেমওয়ার্কের বাইরে স্বাধীনভাবে চালানো যেতে পারে।

সম্ভবত কিছু হ্যাক রয়েছে যা এটি করে তবে এটি আমার কাছে নিরাপদ নয়। অনেকগুলি গতিশীলতা রয়েছে যা কাঠামোর প্রয়োজন যেমন: ডায়নামিক অ্যাসেমবিলি লোডিং, এমএসআইএল কোড উত্পন্নকরণ ইত্যাদি etc.


0

নেটিভগুলিতে সংকলনের মূল কারণটি হল আপনার কোডগুলি সুরক্ষিত করা, অন্যথায় এমএসআইএল সংকলিত হ'ল ক্লায়েন্টের মেশিনে উত্স কোড মোতায়েন করার মতো।

এনজিইএন স্থানীয় ভাষায় সংকলন করে তবে আইএল কোড মোতায়েন করা প্রয়োজন, এই উদ্দেশ্যটি কেবলমাত্র স্টার্টআপের সময় হ্রাস করার জন্য তবে এটি অকেজোও।

কোরআরটি আলফা সংস্করণ এবং কেবল সাধারণ হেলিওরল্ড টাইপের অ্যাপ্লিকেশনগুলির সাথে কাজ করে।

। নেট কোর একক এক্সিকিউটেবল ফাইলগুলিতে সংকলন করে তবে এটি দেশীয় উদাহরণও নয়, এটি কেবলমাত্র আইএল কোডগুলির একটি জিপড ফাইল এবং এটি চলমান চলাকালীন কোডগুলি অস্থায়ী ফোল্ডারে আনজিপ করে দেবে।

মাইক্রোসফ্টের থেকে আমার সহজ প্রশ্ন হ'ল, যদি রিউজিআইটি ফ্লাইটে আইএলকে দেশীয় ভাষায় সংকলন করতে পারে তবে আপনি কেন একই আইএলকে সামনের সময়ের (এওটি) সংকলন করতে পারবেন না।


"কোরআরটি আলফা সংস্করণ এবং কেবল সাধারণ হেলিওরল্ড ধরণের অ্যাপ্লিকেশনগুলির সাথে কাজ করে।" এটি সত্য নয় - বাষ্পে গেমস রয়েছে (যেমন: Street4rage.com ) যা হেলোর্ল্ডের চেয়ে জটিল।
এস ওয়ে ওয়ে

কিন্তু কোরআরটি কোনও উইনফর্ম অ্যাপ্লিকেশন সংকলন করতে পারে না। আমি অন্য একটি অনলাইন সংকলক পেয়েছি যা উইনফর্ম অ্যাপ্লিকেশন ( ডটনেটনেটিভ.অনলাইন ) সংকলন করতে পারে
রহিম

0

নেট কোর আরটি কার্যকর সমাধানের মতো মনে হচ্ছে; শীঘ্রই সমস্ত অ্যাপ্লিকেশন। নেট কোর যাবে; https://www.codeproject.com/Articles/5262251/ Generate- Native- Executable- from- NET- Core- 3-1- Proje? msg = 5753507# xx5753507xx https://docs.microsoft.com/en-us / সংরক্ষণাগার / এমএসডিএন-ম্যাগাজিন / 2018 / নভেম্বর / নেট-কোর-প্রকাশনা-বিকল্পগুলি-নেট-কোর

পুরানো জনের সাথে সম্ভবত পরীক্ষিত হয় না। নেট এসডিকে সম্ভব একইভাবে করুন।



-3

আমি মনে করি এটি সম্ভব নয়। আপনার NET FW পাশাপাশি বিতরণ করতে হবে। আপনি যদি নেট অ্যাপটি দেশীয় কোডে সংকলন করতে চান তবে এনজেন সরঞ্জামটি ব্যবহার করুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.