سؤال

لدي .صافي المشروع الذي دائما تم بناء/تشغيل/على 32 بت الآلات.لدي 64 بت الكمبيوتر أحاول معالجة مهمة الحصول على العمل هناك.بناء السيناريو في نانت ، عند نقطة واحدة نحن تجميع بعض بو التعليمات البرمجية باستخدام نانت المهمة.بو رمز المراجع الأساسية لدينا DLL التي بنيت من c# المصدر في وقت سابق في عملية البناء.

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

وفقا نانت/مقاطعة كوانج نام التعليمات البرمجية المصدر مقاطعة كوانج نام نانت المهمة المكالمات booc.exe في العملية باستخدام CLR عملية الفصل لذلك (أعتقد) أن ترث 32bitness أو 64bitness من عملية الأصل.التي لا تعكس ما أرى ، على الرغم من.

هذا ما فعلته:

  1. تستخدم 64bit نسخة من powershell الاحتجاج نانت
  2. المحدد منصة="x64" على "المهام الخاصة بي".أشعر أنني لا يجب أن تفعل هذا لأن anycpu ينبغي أن يكون على ما يرام, ولكن يبدو أن تحدث فرقا.

هنا خطأ أنا الحصول على:

[booc] Compiling 5 files to 'C:\dev\build\MyProjectBoo.dll'.
[booc] BCE0106: Failed to access the types defined in assembly 'MyProject, Version=5.5.0.0, Culture=neutral, PublicKeyToken=null' - (C:\dev\build\MyProject.dll):Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.
[booc]  is not a valid Win32 application. (Exception from HRESULT: 0x800700C1)
[booc]  is not a valid Win32 application. (Exception from HRESULT: 0x800700C1)
[booc] .
[booc] 1 error(s).

وهو ما يعني وفقا مقاطعة كوانج نام البرمجية المصدر "حاولت عاكس قائمة أنواع في التجميع المشار إليه لكنها فشلت".أنا لا أعرف إذا كان ذلك يعني "أعتقد أنني 32bit ولكن هذه هي 64 بت dlls" أو ما أنا في حيرة من أمري.

أي أفكار عن كيف يمكنني الحصول على هذا العمل ؟

التحديث بعد بعض العمل ، لقد اكتشفت أن المسألة لا علاقة له مع بوو.كتبت سريعة c# برنامج عاكس تحميل dll و يكسر في نفس الطريق.إذا لسبب ما, لا يهم ما أنا كما منصة (x86, x64 أو anycpu), لا أستطيع تحميله عاكس على x64 آلة.لذا لا حقا بو خطأ.لذلك أنا ذاهب الى حفر في هذا و بعد ثانية إذا كان لدي سؤال أفضل.

أحدث التحديث تبين أن واحدة من بلدي الرئيسية DLL طرف ثالث تبعيات تصر على أن تكون في 32 بت البيئة ، على الرغم من أنها ليست مبنية مع corflags.هذا يسبب الجمعية.GetTypes() تفشل في 64 بت.

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

المحلول

المشكلة هو الاعتماد على طرف ثالث DLL التي تتطلب 32 بت واسطة ، وهو أمر ممكن حتى لو لم يكن لديك corflags مجموعة.

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