ฉันลังเลที่จะโพสต์คำตอบนี้มันเป็นไปได้จริงในทางเทคนิค แต่มันไม่ได้ผลดีในทางปฏิบัติ หมายเลขเวอร์ชันของ CLR และชุดประกอบกรอบงานหลักไม่มีการเปลี่ยนแปลงใน 4.5 คุณยังคงกำหนดเป้าหมาย v4.0.30319 ของ CLR และหมายเลขเวอร์ชันแอสเซมบลีของเฟรมเวิร์กยังคงเป็น 4.0.0.0 สิ่งเดียวที่โดดเด่นเกี่ยวกับรายการประกอบเมื่อคุณดูด้วย disassembler เช่น ildasm.exe คือการมีแอตทริบิวต์ [TargetFramework] ที่ระบุว่าจำเป็นต้องใช้ 4.5 ซึ่งจะต้องมีการเปลี่ยนแปลง ไม่ง่ายอย่างนั้นจริง ๆ มันถูกปล่อยออกมาโดยคอมไพเลอร์
ความแตกต่างที่ใหญ่ที่สุดไม่สามารถมองเห็นได้ Microsoft ได้ทำการเปลี่ยนแปลงส่วนหัวที่ปฏิบัติการได้ของแอสเซมบลีที่ค้างชำระเป็นเวลานาน ซึ่งระบุเวอร์ชันของ Windows ที่สามารถปฏิบัติการได้ XP เป็นของ Windows รุ่นก่อนหน้าเริ่มต้นด้วย Windows 2000 หมายเลขเวอร์ชันหลักคือ 5 Vista คือจุดเริ่มต้นของรุ่นปัจจุบันซึ่งเป็นเวอร์ชันหลักหมายเลข 6
คอมไพเลอร์. NET มักจะระบุหมายเลขเวอร์ชันขั้นต่ำเป็น 4.00 เวอร์ชันของ Windows NT และ Windows 9x คุณสามารถดูสิ่งนี้ได้โดยการเรียกใช้ dumpbin.exe / headers บนแอสเซมบลี ผลลัพธ์ตัวอย่างมีลักษณะดังนี้:
OPTIONAL HEADER VALUES
10B magic # (PE32)
...
4.00 operating system version
0.00 image version
4.00 subsystem version
0 Win32 version
...
มีอะไรใหม่ใน. NET 4.5 คือคอมไพเลอร์เปลี่ยนเวอร์ชันของระบบย่อยเป็น 6.00 การเปลี่ยนแปลงที่เกินกำหนดส่วนใหญ่เนื่องจาก Windows ให้ความสำคัญกับตัวเลขนั้นนอกเหนือจากการตรวจสอบว่ามีขนาดเล็กเพียงพอหรือไม่ นอกจากนี้ยังเปิดใช้งานคุณสมบัติของ appcompat เนื่องจากถือว่าโปรแกรมถูกเขียนขึ้นเพื่อทำงานบน Windows เวอร์ชันเก่า คุณสมบัติเหล่านี้ทำให้เกิดปัญหาโดยเฉพาะอย่างยิ่งวิธีที่ Windows ตั้งอยู่เกี่ยวกับขนาดของหน้าต่างใน Aero นั้นลำบาก หยุดโกหกเกี่ยวกับขอบไขมันของหน้าต่าง Aero เมื่อเห็นว่าโปรแกรมได้รับการออกแบบให้ทำงานบน Windows เวอร์ชันที่มี Aero
คุณสามารถเปลี่ยนหมายเลขเวอร์ชันและตั้งค่ากลับเป็น 4.00 ได้โดยเรียกใช้ Editbin.exe บนแอสเซมบลีของคุณด้วยตัวเลือก / subsystem คำตอบนี้แสดงเหตุการณ์ postbuild ตัวอย่าง
อย่างไรก็ตามเมื่อข่าวดีสิ้นสุดลงปัญหาสำคัญคือ. NET 4.5 ไม่สามารถใช้งานร่วมกับ. NET 4.0 ได้มากนัก การวางสายที่ใหญ่ที่สุดคือการย้ายชั้นเรียนจากที่หนึ่งไปยังอีกที่หนึ่ง สิ่งที่น่าสังเกตที่สุดคือเกิดขึ้นกับแอตทริบิวต์ [ส่วนขยาย] ก่อนหน้านี้ใน System.Core.dll ได้ย้ายไปยัง Mscorlib.dll ใน. NET 4.5 นั่นคือ kaboom บน XP หากคุณประกาศวิธีการขยายของคุณเองโปรแกรมของคุณจะบอกว่าให้ค้นหาใน Mscorlib สำหรับแอตทริบิวต์ที่เปิดใช้งานโดยแอตทริบิวต์ [TypeForwardedTo] ในแอสเซมบลีการอ้างอิง System.Core เวอร์ชัน. NET 4.5 แต่จะไม่มีเมื่อคุณรันโปรแกรมบน. NET 4.0
และแน่นอนว่าไม่มีอะไรที่ช่วยให้คุณหยุดใช้คลาสและวิธีการที่มีเฉพาะบน. NET 4.5 เมื่อคุณทำโปรแกรมของคุณจะล้มเหลวด้วย TypeLoadException หรือ MissingMethodException เมื่อรันบน 4.0
เพียงแค่ตั้งเป้า 4.0 และปัญหาเหล่านี้จะหมดไป หรือทำลาย logjam นั้นและหยุดสนับสนุน XP ซึ่งเป็นการตัดสินใจทางธุรกิจที่โปรแกรมเมอร์ไม่สามารถทำได้บ่อยครั้ง แต่สามารถให้กำลังใจได้อย่างแน่นอนโดยชี้ให้เห็นถึงความยุ่งยากที่ก่อให้เกิด แน่นอนว่ามีค่าใช้จ่ายที่ไม่ใช่ศูนย์ในการสนับสนุนระบบปฏิบัติการแบบเก่าเพียงแค่ความพยายามในการทดสอบก็มีมาก ค่าใช้จ่ายที่ฝ่ายบริหารมักไม่ได้รับการยอมรับความเข้ากันได้ของ Windows เป็นตำนานเว้นแต่จะมีการชี้ให้เห็น ส่งต่อค่าใช้จ่ายดังกล่าวให้กับลูกค้าและพวกเขามักจะตัดสินใจได้ถูกต้องเร็วกว่ามาก :) แต่เราไม่สามารถช่วยคุณได้