سؤال

أنا على ويندوز فيستا 64 بت و لدي مشروع بناء مع x86 التكوين.جميع تعمل بشكل جيد.الآن نحن في الوقت لخلق الاختبار.لدينا NUnit 2.4.8 ولكن لدينا الكثير من المشاكل.

الاختبار يتم التحميل الحوض الصغير Nunit.exe (gui) عندما نختار .dll مباشرة ولكن عند تنفيذ لدينا نظام.badimageformatexception.

لقد قرأت من خلال البحث على جوجل قليل الحيلة عن nunit.exe.التكوين ولكن لا شيء يعمل.(تغيير إلى UTF8...uncomment .صافي نسخة بدء التشغيل).

أي فكرة ؟

التحديث

يجب تنظيف الحل ومحو جميع بن مجلد.الآن عند ترجمة أرى بوضوح أن لدي فقط /x86/ في bin وليس القديم /debug/ كان ذلك في x64.

عندما أذهب مع Nunit لدي استثناء (في التحميل) : النظام.IO.FileNotFoundException...

خادم تتبع المكدس:في النظام.انعكاس.الجمعية._nLoad(AssemblyName اسم الملف سلسلة تعليمات البرمجة الأساسية الأدلة assemblySecurity, الجمعية locationHint, StackCrawlMark& stackMark, منطقية throwOnFileNotFound, منطقية forIntrospection) في النظام.انعكاس.الجمعية.InternalLoad(AssemblyName assemblyRef الأدلة assemblySecurity, StackCrawlMark& stackMark, منطقية forIntrospection) في النظام.انعكاس.الجمعية.InternalLoad(سلسلة assemblyString الأدلة assemblySecurity, StackCrawlMark& stackMark, منطقية forIntrospection) في النظام.انعكاس.الجمعية.تحميل(سلسلة assemblyString) في NUnit.الأساسية.بناه.TestAssemblyBuilder.تحميل(سلسلة المسار) في NUnit.الأساسية.بناه.TestAssemblyBuilder.بناء(سلسلة assemblyName منطقية autoSuites) في NUnit.الأساسية.بناه.TestAssemblyBuilder.بناء(سلسلة assemblyName سلسلة testName, منطقية autoSuites) في NUnit.الأساسية.TestSuiteBuilder.BuildSingleAssembly(TestPackage حزمة) في NUnit.الأساسية.TestSuiteBuilder.بناء(TestPackage حزمة) في NUnit.الأساسية.SimpleTestRunner.تحميل(TestPackage حزمة) في NUnit.الأساسية.ProxyTestRunner.تحميل(TestPackage حزمة) في NUnit.الأساسية.ProxyTestRunner.تحميل(TestPackage حزمة) في NUnit.الأساسية.RemoteTestRunner.تحميل(TestPackage حزمة) في النظام.وقت التشغيل.الاتصال عن بعد.المراسلة.StackBuilderSink._PrivateProcessMessage(IntPtr md, كائن[] args, كائن الملقم ، Int32 methodPtr, منطقية fExecuteInContext ، وجوه[]& outArgs) في النظام.وقت التشغيل.الاتصال عن بعد.المراسلة.StackBuilderSink.SyncProcessMessage(الكتروني msg Int32 methodPtr, منطقية fExecuteInContext)

استثناء rethrown في [0]:في النظام.وقت التشغيل.الاتصال عن بعد.الوكلاء.RealProxy.HandleReturnMessage(الكتروني reqMsg, الكتروني retMsg) في النظام.وقت التشغيل.الاتصال عن بعد.الوكلاء.RealProxy.PrivateInvoke(MessageData& msgData, نوع Int32) في NUnit.الأساسية.TestRunner.تحميل(TestPackage حزمة) في NUnit.Util.TestDomain.تحميل(TestPackage حزمة) في NUnit.Util.TestLoader.LoadTest(سلسلة testName)

تحديث 2

أنا تجميع مع أي وحدة المعالجة المركزية التي يجب تعديلها لتكون x86 بدلا من x64.السبب هو التصحيح.هذا وقد سبق في الرابط السابق.يجب أن نؤكد أن NUnit يعمل في 64bits وزارة الدفاع ، Corflags.exe

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

المحلول

حسنا لقد وجدت الحل في هذا الموقع.لديك لاستخدام Unit-2.4.8\bin unit-x86.exe بدلا من Unit-2.4.8\bin unit.exe...لم أكن أعرف أن \bin\ 2 nunit!!!

Thx all

نصائح أخرى

على NUnit المضيف المرجح تشغيل 64 بت عملية (يمكنك التأكد من ذلك من خلال النظر في إدارة المهام).إذا كنت الجمعية x86 فقط بعد ذلك لن تكون قادرة على تشغيل في تلك العملية.

يمكنك محاولة تشغيل corflags على NUnit القابل للتنفيذ إلى تشغيل x86 باستخدام /32bit+ العلم

يمكن أن يحدث هذا أيضا عند الترقية من TeamCity 3.1 4.0 على x64 بناء الخادم مع MSBuild تشغيل منصة تعيين إلى x86.على TeamCity عداء يبدو الافتراضي منصة مختلفة في 4.0 من 3.1, لا تحترم حقيقة أن بناء تشغيل x86.

في قضيتي الإصلاح الأولى التي عملت تم إضافة منصة تجاوز إلى NUnit الدعوة في MSBuild النصي:

<NUnit Assemblies="Test/bin/$(Platform)/$(Configuration)/Test.dll" Platform="x86" /> 

(أي TeamCity اختبار عداء الطريق مما اضطر 32 بت كما في اقتراحات أخرى)

(وهذا يشمل عند المنصة هدف الاختبار الجمعية أي وحدة المعالجة المركزية (على الرغم من أن كما يحدث لدى مجموعة منهم إلى x86 صراحة بعض الاختبارات بشكل حيوي تحميل ملفات Dll التي هي مقيدة x86)).

لماذا تستخدم x86 التكوين و لا أي المعالجة المركزية ؟

أتصور أنه عند تحميل NUnit انها بنيت مع أي وحدة المعالجة المركزية الخيار ، لذلك JITs إلى x64 رمز.عندما يحاول تحميل الاختبارات الخاصة بك والتي هي على وجه التحديد تم تشغيل x86 يطرح الاستثناء.

سأحاول تغيير جميع إعدادات التكوين الخاصة بك إلى أي وحدة المعالجة المركزية ومعرفة ما إذا كان هذا يحل المشكلة.

في حالة استخدام TeamCity ، يمكنك إضافة الملكية teamcity.dotnet.نانت.nunit2.منصة مع قيمة إلى x86 إلى بناء المعلمات في TeamCity المشروع إعدادات التكوين (في خصائص متغيرات البيئة قسم).

لدي نفس المشكلة مع TeamCity 8.1.ما حل كان تغيير NUnit بناء خطوة .NET Runtime / منصة: إلى إلى x86

كما اضطر إلى تغيير تشغيل الاختبارات من: الطريق من TestProject\bin elease إلى TestProject\bin\x86\الإفراج

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