كيفية ترجمة تطبيق .NET إلى التعليمات البرمجية الأصلية؟

StackOverflow https://stackoverflow.com/questions/45702

  •  09-06-2019
  •  | 
  •  

سؤال

إذا كنت أرغب في تشغيل تطبيق .NET على جهاز لا يتوفر فيه إطار عمل .NET؛هل هناك أي طريقة لتجميع التطبيق إلى الكود الأصلي؟

هل كانت مفيدة؟

المحلول

لدى Microsoft مقالة تصف كيف يمكنك ذلك ترجمة MSIL إلى الكود الأصلي

يمكنك استخدام نجين.

مولد الصور الأصلي (ngen.exe) هو أداة تعمل على تحسين أداء التطبيقات المدارة.يقوم NGEN.EXE بإنشاء صور أصلية ، وهي ملفات تحتوي على رمز الجهاز الخاص المعالج الخاص ، ويقوم بتثبيتها في ذاكرة التخزين المؤقت للصورة الأصلية على الكمبيوتر المحلي.يمكن لوقت التشغيل استخدام الصور الأصلية من ذاكرة التخزين المؤقت بدلاً من ذلك باستخدام مترجم Just-In (JIT) لتجميع التجميع الأصلي.

لسوء الحظ، لا تزال بحاجة إلى المكتبات الموجودة في إطار العمل لتشغيل برنامجك.لا توجد ميزة أعرفها في MS .Net Framework SDK التي تسمح لك بتجميع كافة الملفات المطلوبة في ملف واحد قابل للتنفيذ

نصائح أخرى

يقوم RemoteSoft بإنشاء أداة تقوم بتجميع تطبيق .NET في حزمة يمكن تشغيلها دون تثبيت .NET.ليس لدي أي خبرة في ذلك:

RemoteSoft السلمندر

لقد قمت باختبار العديد منها وفي هذه اللحظة الوحيد الذي يدعم .NET 3.5 ولديه أيضًا مجموعة رائعة من المحاكاة الافتراضية هو زينوكود ما بعد البناء

مع ngen، لا تزال بحاجة إلى تثبيت إطار عمل .NET، ولكن باستخدام أداة مثل هذه، يتم تجميع كل التعليمات البرمجية المُدارة الخاصة بك إلى تعليمات برمجية أصلية حتى تتمكن من نشرها على الأجهزة التي لا تحتوي على إطار العمل.

أعلنت شركة مايكروسوفت عن .NET المعاينة الأصلية سيسمح ذلك بتشغيل تطبيقات .NET دون تثبيت إطار العمل.

إلق نظرة: http://blogs.msdn.com/b/dotnet/archive/2014/04/02/announce-net-native-preview.aspx

التعليمات: http://msdn.microsoft.com/en-US/vstudio/dn642499.aspx

يمكنك تنزيل Microsoft .NET Native لـ VS2013 من هنا: http://msdn.microsoft.com/en-US/vstudio/dotnetnative

كما ذكرت بعض الإجابات الأخرى هنا، يمكنك استخدام .NET الأصلي أداة لتجميع التطبيق الخاص بك إلى رمز الجهاز الأصلي.على عكس تلك الإجابات، سأشرح كيف للقيام بذلك.

خطوات:

  1. تحميل هذا دوت نت سطر الأوامر (واجهة سطر الأوامر)، والتي تعد جزءًا من سلسلة أدوات .NET Core الجديدة.سوف نستخدم هذا لتجميع التطبيق لدينا؛يمكنك العثور على مقالة جيدة حول هذا الموضوع هنا.

  2. افتح موجه الصدفة و cd إلى دليل التطبيق الخاص بك.

  3. اكتب هذا:

    dotnet compile --native
    

هذا كل شيء!عند الانتهاء، سيتم تجميع تطبيقك في ملف ثنائي واحد، مثل هذا:

Native compiled .NET Core EXE

سيكون ملفًا مستقلاً قابلاً للتنفيذ؛لم يتم تضمين PDBs أو التجميعات أو ملفات التكوين (الترحيب!).


وبدلاً من ذلك، إذا كنت تريد برنامجًا أسرع، يمكنك تشغيل هذا:

dotnet compile --native --cpp

سيؤدي ذلك إلى تحسين برنامجك باستخدام منشئ الأكواد C++ (بدلاً من RyuJIT)، بحيث يكون تطبيقك أكثر تحسينًا لسيناريوهات AOT.

يمكنك العثور على مزيد من المعلومات حول هذا الأمر على dotnet CLI جيثب الريبو.

نعم باستخدام نجين, ، مولد الصور الأصلي.ومع ذلك، هناك عدد من الأشياء التي يجب أن تكون على دراية بها:

  • لا تزال بحاجة إلى CLR لتشغيل الملف القابل للتنفيذ.
  • لن يقوم CLR بتحسين التجميعات الخاصة بك ديناميكيًا استنادًا إلى البيئة التي يتم تشغيلها فيها (على سبيل المثال.486 مقابل.586 مقابل.686، الخ.)

بشكل عام، لا يستحق استخدام Ngen إلا إذا كنت بحاجة إلى تقليل وقت بدء تشغيل التطبيق الخاص بك.

أنت تستطيع!ومع ذلك، فأنت مقيد بـ .NET 1.1 (لا توجد أدوية عامة لك):التجميع الأحادي المسبق (AOT)

ومع ذلك، هذا يعني أن التجميع هو أمر أصلي حقًا، لذلك لن تتمكن بعد الآن من نشر مجموعة واحدة من كود البايت، ستحتاج إلى واحد لكل نظام أساسي.

لقد تم تصميمه في الأصل لأنه لا يوجد .NET أو Mono لجهاز iPhone، وهكذا تم إنشاء MonoTouch.

يمكنك القيام بذلك باستخدام تقنية الترجمة المسبقة الجديدة التي تسمى .NET Native.تحقق من ذلك هنا: http://msdn.microsoft.com/en-US/vstudio/dotnetnative

وهو متاح حاليًا فقط لتطبيقات متجر Windows.ينفذ ربط مكون واحد.لذلك يتم ربط مكتبات .NET Framework بشكل ثابت في تطبيقك.يتم تجميع كل شيء إلى التجميعات الأصلية ولم يعد يتم نشر IL.لا تعمل التطبيقات ضد CLR، بل تعمل مع وقت تشغيل محسّن يسمى Managed Runtime (Mrt.dll)

كما هو مذكور أعلاه، استخدمت NGEN نموذج تجميع مختلط واعتمدت على IL وJIT للسيناريوهات الديناميكية.لا يستخدم .NET Native JIT ولكنه يدعم السيناريوهات الديناميكية المختلفة.سيحتاج مؤلفو الكود إلى الاستفادة منها توجيهات وقت التشغيل لتقديم تلميحات إلى برنامج التحويل البرمجي .NET Native حول السيناريوهات الديناميكية التي يرغبون في دعمها.

يمكنك استخدام ngen.exe لإنشاء صورة أصلية لكن لا يزال يتعين عليك توزيع التعليمات البرمجية الأصلية غير الأصلية أيضًا، ولا تزال بحاجة إلى تثبيت إطار العمل على الجهاز المستهدف.

وهو ما لا يحل مشكلتك حقًا.

تتمثل طبيعة .NET في القدرة على تثبيت التطبيقات التي تم تجميعها إلى MSIL، ثم يتم تجميع MSIL إما عن طريق JIT أو Ngen، إلى تعليمات برمجية أصلية ويتم تخزينها محليًا في ذاكرة تخزين مؤقت.لم يكن الهدف أبدًا إنشاء ملف .exe أصلي حقيقي يمكن تشغيله بشكل مستقل عن إطار عمل .NET.

ربما يكون هناك أحد الاختراقات التي تفعل ذلك، لكن الأمر لا يبدو آمنًا بالنسبة لي.هناك الكثير من الديناميكيات التي تتطلب إطار العمل، مثل:تحميل التجميع الديناميكي، وإنشاء كود MSIL، وما إلى ذلك.

إجابة 2019:يستخدم دوت نت/كوررت.يمكنه تجميع مشاريع .NET Core في قائمة بذاتها .exe ملفات.لا توجد تبعيات (باستثناء مكتبات النظام مثل kernel32.dll).أراهن أن هذا هو بالضبط ما يحتاجه OP.

من صفحتها الرئيسية على GitHub:

يستطيع برنامج التحويل البرمجي CoreRT تجميع تطبيق .NET Core مُدار في ملف فردي أصلي (محدد للبنية) قابل للتنفيذ يسهل نشره.ويمكنه أيضًا إنتاج مكتبات ديناميكية أو ثابتة مستقلة يمكن استهلاكها بواسطة التطبيقات المكتوبة بلغات برمجة أخرى.

أعتقد أن هذا غير ممكن.ستحتاج إلى توزيع .NET FW أيضًا.إذا كنت تريد ترجمة تطبيق .NET إلى تعليمات برمجية أصلية، فاستخدم NGen أداة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top