سؤال

بلدي .NET 2.0 تطبيق الواردات غير المدارة 32 بت dll.تحميل dll (أول interop دعوة يحدث) عندما يفتح المستخدم الملف عن طريق الحوار داخل التطبيق.

عندما نشر التطبيق عبر clickonce مع الهدف منصة "أي" المستخدمين على ويندوز 64 بت على BadImageFormatException عند محاولة فتح الملفات من التطبيق (في هذه اللحظة غير مدار يتم تحميل dll).أنا أفهم أن هذا يرجع إلى incompabible البت 64 بت عملية 32 بت dll غير.

لقد نقل التطبيق باستخدام x86 بمثابة النظام الأساسي الهدف.كما أفهم من هذا أن حل البت المشكلة.

ولكن

عند تشغيل نشر تطبيق بنيت x86 64 بت نظام, أنا الآن الحصول على BadImageFormatException على الفور قبل التطبيق حتى يبدأ.اختبار على ثلاثة على الأقل 64 بت الآلات.على 32 بت آلات يعمل مع أي مشكلة.

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

لقد تم تصحيح هذا لمدة 2 أيام على التوالي مع أي نتيجة - لقد حاولت على أجهزة كمبيوتر مختلفة.يبدو أن consistentnly العمل على واحد من أجهزة الكمبيوتر حاولت.ومع ذلك, أنا لم يكن لديك الوصول الدائم إلى هذا الكمبيوتر.

لقد تمكنت من بناء ClickOnce النشر على جهاز الكمبيوتر مرة واحدة و يعمل على 64 بت الجهاز.هذا هو واحد ربما 100 يحاول!لم يتغير شيء سوى تغير المتغير كان ذلك لم الناجحة بناء فورا بعد إعادة تشغيل الكمبيوتر.

لم نظيفة/بناء/مقابل إعادة تشغيل/إعادة تشغيل windows مرات عديدة.يجب إعادة تثبيت VS 2008 و الآن أيضا كل من نظام التشغيل ، فإنه لم يساعد.


تحرير:لقد تمكنت من الحصول على واحدة جيدة بناء (من أصل 100 المقبلة :)) و هل المقارنة بين نشر الدلائل.مصدر المشكلة هو أن ClickOnce يولد الهدف الخاطئ منصة في بيان الرئيسية .exe:

<asmv1:assemblyIdentity name="app.exe" version="1.0.4.18" publicKeyToken=".token here." language="neutral" processorArchitecture="<b>msil</b>" type="win32" />

processorArchitecture ينبغي x86.

لذا فإن السؤال هو كيفية استمرار قوة مقابل لتوليد الصحيح processorArchitecture في البيان عندما نشر.

أي شخص يمكن أن يساعد من فضلك ؟

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

المحلول

وحلت هذه المشكلة عن طريق تثبيت VS 2008 المزود بحزمة الخدمة SP1 على 64 بت ويندوز 7.VS2008 SP1 على XP المشكلة على جهازين لقد حاولت مع.

نصائح أخرى

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

آمل أن يساعد هذا شخص آخر, لقد تقاتل هذه المشكلة وإيقاف أشهر.

أقترح استخدام عاكس لفتح الرئيسية exe نشرها ClickOnce و ترى تبعيات للتأكد من أنك لا نشر الإصدار 64 بت من dll عن طريق الخطأ.

يجب حل لتشغيل تطبيقات 32-بت في IIS 7.انظر http://www.fishofprey.com/2009/04/badimageformatexception-in-iis-70-on-64.html

في بعض الأحيان ClickOnce عملية النشر يبدو أن ذاكرة التخزين المؤقت الملفات القديمة من السابق أي وحدة المعالجة المركزية أو x64 يبني.القيام بتنظيف وإعادة بناء كل ما لم يحل هذا مشكلة بالنسبة لي.أنا في حاجة إلى حذف جميع بن obj المجلدات من مشاريع إعادة فتح Visual Studio.

لقد واجهت هذه المشكلة وقرر أن فرعي من التشكيل الجانبي للمستخدم التي ClickOnce نشر التطبيق لدينا يجب أن يكون تلف لأننا كنا قادرين على نشر التطبيق بنجاح مع ClickOnce عند تسجيل الدخول كمستخدم آخر على نفس الجهاز.

كنا قادرين على حل هذه المشكلة ببساطة عن طريق حذف فرعي من C:\Users\<user>\AppData\Local\Apps التي ClickOnce تم نشر التطبيق لدينا.في حالتنا هذه C:\Users\<user>\AppData\Local\Apps\2.0.

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