ฉันมีบริการ 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:
