هل الكود المكتوب في نظام التشغيل Vista 64 متوافق مع نظام التشغيل 32 بت؟

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

سؤال

نحن نحصل على أجهزة تطوير جديدة وننتقل إلى Vista 64 Ultimate للاستفادة من ذاكرة الوصول العشوائي التي تبلغ سعتها 8 جيجابايت.يريد مديرنا أن نقوم بجميع عمليات التطوير في الأجهزة الافتراضية 32 بت للتأكد من عدم وجود أي مشاكل في انتقال التعليمات البرمجية الخاصة بنا إلى الإنتاج.

هل هناك أي طريقة لضمان أن البرامج الناتجة ستعمل على نظام التشغيل 32 بت؟لا أمانع في استخدام الأجهزة الافتراضية، لكني لا أحب الطريقة التي تجبرك على العودة إلى عرض نوع الشاشة "الفردي".أحب نقل أشرطة أدوات VS الخاصة بي إلى شاشتي الأخرى.

يحرر:نحن نستخدم Visual Studio 2005 و2008 وVB.NET و/أو C#

يحرر:باستخدام Harpreet إجابة, ، هذه هي الخطوات التي استخدمتها لتعيين Visual Studio IDE الخاص بي لتجميع x86/32bit:

  1. انقر فوق إنشاء وافتح مدير التكوين
  2. حدد القائمة المنسدلة لمنصة الحل النشط
  3. حدد x86 إذا كان موجودًا في القائمة وانتقل إلى الخطوة 5، إذا لم يكن محددًا <New...>
  4. في مربع الحوار New Solution Platform، حدد x86 ثم اضغط على OK
  5. تحقق من أن النظام الأساسي المحدد لجميع مشاريعك هو x86
  6. انقر فوق إغلاق.

يتمتع.

شكرا لك ، كيث

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

المحلول

أقوم بالتطوير على أجهزة 64 بت لنظام Windows 32 بت.ليست مشكلة.يجب عليك التأكد من تعيين مشاريعك للتجميع في وضع x86 حتى تكون متحفظًا.ستحتاج إلى الاطلاع على كل مشروع في الحل والتحقق من ذلك مرة أخرى.يمكنك أيضًا استخدام إعداد AnyCPU ولكن هذا أكثر خطورة لأنه سيتم تشغيله بشكل مختلف على جهاز التطوير الخاص بك عن جهاز 32 بت.تريد تجنب وضع 64 بت بالطبع.

المشاكل التي واجهتها هي برامج التشغيل التي لا تعمل عندما يتم تجميع التطبيق لنظام 64 بت (بشكل صريح 64 بت أو AnyCPU يتم تجميعه وتشغيله على نظام التشغيل Windows 64 بت).يمكن تجنب هذه المشكلات تمامًا عن طريق الالتزام بتجميع x86.يجب أن يكشف ذلك عن جميع العيوب الموجودة في أجهزة التطوير الخاصة بك.

من الناحية المثالية، يمكنك إعداد بيئة بناء واختبار يمكن تنفيذها بشكل متكرر على جهاز 32 بت.من المفترض أن يطمئن ذلك إدارتك ويتيح لك تجنب استخدام الجهاز الافتراضي كسطح مكتب.

نصائح أخرى

طالما قمت بتجميع الملفات التنفيذية الخاصة بك على أنها 32 بت، فسيتم تشغيلها على كل من أجهزة Windows 32 بت و64 (مضمونة).يتميز استخدام 64 جهازًا للتطوير بأنه يمكنك البدء في اختبار التعليمات البرمجية الخاصة بك من خلال تجميع 64 بت (للتحقق من أشياء مثل المؤشرات المرسلة إلى أعداد صحيحة 32 بت)، وبهذه الطريقة تجعل الانتقال إلى 64 بت أسهل في المستقبل (إذا اخترت شركتك للقيام بإصدار 64 بت).

يعد التجميع لنظام التشغيل 64 بت خيارًا في المترجم.يمكنك التحويل إلى ملف 32 بت من داخل نظام التشغيل Vista 64 بت.عند تشغيل التطبيق، يمكنك بعد ذلك أن ترى في TaskManager أن هناك "*32" بجوار العملية... وهذا يعني أنها 32 بت؛)

أعتقد أن مديريك يحتاجون إلى مزيد من التعليم حول ما يعنيه نظام التشغيل 64 بت حقًا :)

ليس إجابة لسؤالك، ولكن ربما حل لمشكلتك:يدعم VirtualBox (وربما غيره) وضع "التكامل السلس"، والذي يمنحك شريط بداية ثانيًا ويتيح لك سحب النوافذ بحرية.

أيضًا، وهذه إجابة لسؤالك، فهي تعتمد على إعدادات الترجمة لديك.يمكنك الترجمة لبيئات مختلفة، ويمكنك ترجمة برامج 32 بت بشكل مثالي على نظام 64 بت باستخدام Visual Studio.لا أستطيع أن أخبرك كيف، لكنني متأكد من أن بعض خبراء Visual Studio يمكنهم مساعدتك.

قمنا بتطوير تطبيق 32 بت باستخدام VS 2005 (قريبًا 2008) وقمنا للتو بشراء بعض الأجهزة الجديدة المزودة بنظام XP Pro x64 أو Vista Business 64 بت حتى نتمكن من الاستفادة من ذاكرة الوصول العشوائي الإضافية أثناء الاحتفاظ بملخص للمشاهدة على إمكانية عمل منفذ 64 بت إذا أصبح ذلك ضروريًا تجاريًا.لم نواجه أي مشاكل في القيام بذلك بخلاف تعديل بعض البرامج النصية في بيئة التطوير لدينا وما إلى ذلك.

لا يزال هؤلاء المطورون الذين لم يتم تضمينهم في دورة الترقية هذه يستخدمون أجهزة 32 بت، لذلك يجب أن يكتشفوا المشكلات عند تشغيل اختبارات الوحدة ومجموعة اختبار التطبيق كأمر طبيعي قبل تسجيل الوصول.

ما نقوم به أيضًا هو التأكد من أن لدينا مجموعة من أجهزة "اختبار البناء" المكونة من تكوينات "نموذجية" (XP/Vista، 2/4/8 مراكز، وما إلى ذلك) التي تقوم ببناء واختبار مجموعات عمليات تسجيل الوصول - لدينا العديد من مجموعات الاختبار المختلفة للاستقرار والأداء وما إلى ذلك.- قبل إضافتها إلى منطقة التكامل المناسبة.مرة أخرى، لم تكتشف هذه أي مشكلات عند تشغيل تطبيق 32 بت مبني على نظام تشغيل 64 بت.

على أي حال، كما قال الآخرون بالفعل، لا أتوقع أن تكون هناك مشكلة لأن المترجم هو الذي يقوم بإنشاء الكود المناسب لنظام التشغيل المستهدف بغض النظر عن نظام التشغيل الذي يعمل عليه المترجم بالفعل.

نعم، كما كان آدم يقول.هناك 3 خيارات:MSIL (افتراضي)، x64، وx86.يمكنك استهداف x64 وسيقوم بإنشاء ملفات dll خصيصًا لأنظمة 64 بت، أو يمكنك استخدام x86 الذي سيتم تشغيله على 32 بت و64 بت، ولكن سيكون له نفس القيود مثل 32 بت على نظام 64 بت.

ستسمح MSIL بشكل أساسي لـ JITer بإصدار التعليمات الخاصة بالنظام الأساسي (بعقوبة أداء طفيفة مقارنة بالصورة الأصلية)

يحرر:لا توجد لغة، لذلك أنا أتحدث عن لغات إطار عمل .net مثل vb.net وc#، أما لغة c++ فهي لغة مختلفة تمامًا.

وجدت هذا اليوم:

http://www.brianpeek.com/blog/archive/2007/11/13/x64-development-with-net.aspx

تطوير x64 باستخدام .NET

في وقت سابق من هذا العام قمت بالتبديل إلى نظام تشغيل 64 بت - Vista Ultimate x64 على وجه الدقة.بالنسبة للجزء الأكبر، كانت هذه العملية غير مؤلمة نسبيًا، ولكن كانت هناك بعض العوائق على طول الطريق (برامج التشغيل المتوافقة مع x64، بشكل أساسي، ولكن هذا ليس الهدف من هذه المناقشة).

في عالم تطوير x64، كانت هناك بعض النقاط الصعبة التي أعتقد أنني سأوضحها هنا.من المرجح أن تنمو هذه القائمة، لذا توقع المشاركات المستقبلية حول هذا الموضوع.

في عالم تطوير .NET الرائع، يمكن تجميع التطبيقات والتجميعات لاستهداف منصات مختلفة.افتراضيًا، يتم تصنيف التطبيقات والتجميعات على أنها أي وحدة معالجة مركزية في Visual Studio.في هذا السيناريو، سيقوم CLR بتحميل التجميع مهما كان الهدف الافتراضي للجهاز الذي يتم تنفيذه عليه.على سبيل المثال، عند تشغيل ملف قابل للتنفيذ على جهاز x64، سيتم تشغيله كعملية 64 بت.

يوفر Visual Studio أيضًا ثلاثة أهداف محددة للنظام الأساسي:x86 و x64 و إيتانيوم (IA-64).عند إنشاء ملف قابل للتنفيذ كهدف محدد، سيتم تحميله كعملية من هذا النوع.على سبيل المثال، سيتم تشغيل الملف القابل للتنفيذ الذي يستهدف x86 على جهاز x64 كعملية 32 بت باستخدام طبقة CLR وWOW64 ذات 32 بت.عندما يتم تحميل التجميعات في وقت التشغيل، لا يمكن تحميلها إلا بواسطة عملية إذا كان هدفها يطابق هدف عملية الاستضافة، أو تم تجميعها على أنها أي وحدة معالجة مركزية.على سبيل المثال، إذا تم تعيين x64 كهدف للتجميع، فلا يمكن تحميله إلا من خلال عملية x64.

لقد ظهر هذا في بعض السيناريوهات بالنسبة لي:

  • XNA - يتوفر XNA كمجموعة من التجميعات 32 بت فقط.ولذلك، عند الرجوع إلى تجميعات XNA، يجب أن يستهدف التجميع القابل للتنفيذ/التجميع الذي يستخدمها النظام الأساسي x86.إذا تم استهدافه على أنه x64 (أو أي وحدة معالجة مركزية وتم تشغيله على جهاز 64 بت)، فسيتم ظهور خطأ عند محاولة تحميل تجميعات XNA.

  • Microsoft Robotics Studio - تستخدم XInputGamepadService XNA داخليًا للتحدث مع وحدة تحكم Xbox 360.أنظر فوق.

  • Managed DirectX - على الرغم من أنه تم إهمال هذا بالفعل واستبداله بـ XNA، إلا أنه لا يزال له استخداماته.لم يتم وضع علامة على التجميعات لهدف محدد، ولكنني واجهت صعوبة في استثناءات الذاكرة، خاصة مع مجموعة Microsoft.DirectX.AudioVideoPlayback.

  • Phidgets - اعتمادًا على المكتبة التي تقوم بتنزيلها ووقت تنزيلها، قد يتم تصنيفها أو لا يتم تصنيفها على أنها 32 بت فقط.تم وضع علامة على الإصدار الحالي (8/11/07) على هذا النحو، وبالتالي يتطلب عملية 32 بت لاستضافته.أسهل طريقة لتحديد ما إذا كان الملف القابل للتنفيذ أو التجميع مستهدفًا نظامًا أساسيًا معينًا هي استخدام تطبيق corflags.لاستخدام هذا، افتح موجه أوامر Visual Studio من قائمة ابدأ وقم بتشغيله على التجميع الذي ترغب في التحقق منه.

أسهل طريقة لتحديد ما إذا كان الملف القابل للتنفيذ أو التجميع مستهدفًا نظامًا أساسيًا معينًا هي استخدام تطبيق corflags.لاستخدام هذا، افتح موجه أوامر Visual Studio من قائمة ابدأ وقم بتشغيله على التجميع الذي ترغب في التحقق منه.

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