ฉันมีบริการ Windows ที่เขียนใน C # โดยใช้ Visual Studio 2010 และกำหนดเป้าหมายไปที่. NET Framework 4 แบบเต็มเมื่อฉันเรียกใช้จากการดีบักการสร้างบริการจะทำงานตามที่คาดไว้ อย่างไรก็ตามเมื่อฉันเรียกใช้จากรุ่น Release ฉันจะได้รับ System.BadImageFormatException (รายละเอียดด้านล่าง) ฉันค้นหาทางอินเทอร์เน็ตเพื่อหาวิธีแก้ปัญหา แต่จนถึงตอนนี้ทุกสิ่งที่ฉันพบก็ไม่ได้ช่วยฉันหาทางแก้ปัญหา
ปัญหานี้เกิดขึ้นทั้งในระบบ Windows 7 64 บิต (dev) และ Windows XP SP3 32 บิต (เป้าหมาย)
นี่คือสิ่งที่ฉันได้ลองทำแล้ว:
- การตั้งค่าการสร้างที่ได้รับการยืนยันเช่นเป้าหมายแพลตฟอร์มจะเหมือนกันทั้งหมด (x86)
- ใช้ peverify กับอ็อพชัน / verbose เพื่อให้แน่ใจว่าไบนารีแอสเซมบลีถูกต้อง
- ใช้ fuslogvw เพื่อค้นหาปัญหาในการโหลด
- ใช้ CheckAsm เพื่อค้นหาไฟล์หรือชุดประกอบที่หายไป
การตรวจสอบทั้งหมดนี้ไม่ได้เปลี่ยนแปลงอะไร ฉันได้รวมข้อความทั้งหมดของข้อมูลข้อยกเว้นไว้ด้านล่างโดยมีการเปลี่ยนชื่อบางส่วนเพื่อปกป้องความลับของผู้เชี่ยวชาญในองค์กรของฉัน
System.BadImageFormatException ไม่สามารถจัดการได้ ข้อความ = ไม่สามารถโหลดไฟล์หรือแอสเซมบลี 'XxxDevices, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null' หรือหนึ่งในการอ้างอิง มีความพยายามในการโหลดโปรแกรมที่มีรูปแบบไม่ถูกต้อง ที่มา = XxxDevicesService FileName = XxxDevices เวอร์ชัน = 1.0.0.0 วัฒนธรรม = เป็นกลาง PublicKeyToken = null FusionLog = ตัวจัดการแอสเซมบลีที่โหลดจาก: C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ clr.dll ทำงานภายใต้ปฏิบัติการ c: \ Dev \ TeamE \ bin \ Release \ XxxDevicesService.vshost.exe - บันทึกข้อผิดพลาดโดยละเอียดดังต่อไปนี้ === ข้อมูลสถานะก่อนผูก === บันทึก: ผู้ใช้ = XXX LOG: DisplayName = XxxDevices เวอร์ชัน = 1.0.0.0 วัฒนธรรม = เป็นกลาง PublicKeyToken = null (ระบุครบถ้วน) บันทึก: Appbase = ไฟล์: /// c: / Dev / TeamE / bin / Release / บันทึก: PrivatePath เริ่มต้น = NULL การเรียกแอสเซมบลี: XxxDevicesService เวอร์ชัน = 1.0.0.0 วัฒนธรรม = เป็นกลาง PublicKeyToken = null === LOG: การผูกนี้เริ่มต้นในบริบทการโหลดเริ่มต้น บันทึก: การใช้ไฟล์คอนฟิกูเรชันของแอปพลิเคชัน: c: \ TeamE \ bin \ Release \ XxxDevicesService.vshost.exe.Config LOG: การใช้ไฟล์การกำหนดค่าโฮสต์: บันทึก: การใช้ไฟล์การกำหนดค่าเครื่องจาก C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ config \ machine.config LOG: นโยบายไม่ถูกนำไปใช้กับการอ้างอิงในขณะนี้ (การผูกแอสเซมบลีแบบส่วนตัวกำหนดเองบางส่วนหรือตามตำแหน่งที่ตั้ง) LOG: กำลังพยายามดาวน์โหลดไฟล์ URL ใหม่: /// c: /TeamE/bin/Release/XxxDevices.DLL ข้อผิดพลาด: ล้มเหลวในการตั้งค่าการประกอบ (hr = 0x8007000b) สิ้นสุดการตรวจสอบแล้ว StackTrace: ที่ XxxDevicesService.Program.Main (String [] args) ที่ System.AppDomain._nExecuteAssembly (แอสเซมบลี RuntimeAssembly, String [] args) ที่ Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly () ใน System.Threading.ExecutionContext.Run (ExecutionContextecutionContext การเรียกกลับ ContextCallback สถานะวัตถุบูลีนละเว้นSyncCtx) ใน System.Threading.ExecutionContext.Run (ExecutionContextecutionContext, ContextCallback callback, Object state) ใน System.Threading.ThreadHelper.ThreadStart () InnerException: