Saya ragu untuk memposting jawaban ini, sebenarnya secara teknis mungkin tetapi tidak berhasil dengan baik dalam praktiknya. Nomor versi CLR dan rakitan kerangka inti tidak diubah di 4.5. Anda masih menargetkan v4.0.30319 CLR dan nomor versi rakitan kerangka masih 4.0.0.0. Satu-satunya hal yang membedakan tentang manifes perakitan ketika Anda melihatnya dengan disassembler seperti ildasm.exe adalah adanya atribut [TargetFramework] yang mengatakan bahwa 4,5 diperlukan, yang harus diubah. Sebenarnya tidak semudah itu, ini dikeluarkan oleh kompiler.
Perbedaan terbesar tidak terlalu terlihat, Microsoft membuat perubahan yang sudah lama tertunda di header yang dapat dieksekusi dari majelis. Yang menentukan versi Windows apa yang dapat dieksekusi kompatibel dengan. XP milik generasi Windows sebelumnya, dimulai dengan Windows 2000. Nomor versi utama mereka adalah 5. Vista adalah awal dari generasi sekarang, nomor versi utama 6.
Kompiler .NET selalu menetapkan nomor versi minimum menjadi 4.00, versi Windows NT dan Windows 9x. Anda dapat melihat ini dengan menjalankan dumpbin.exe / header pada rakitan. Output sampel terlihat seperti ini:
OPTIONAL HEADER VALUES
10B magic # (PE32)
...
4.00 operating system version
0.00 image version
4.00 subsystem version
0 Win32 version
...
Apa yang baru di .NET 4.5 adalah bahwa kompiler mengubah versi subsistem itu menjadi 6.00. Perubahan yang sebagian besar telah jatuh tempo karena Windows memperhatikan angka tersebut, lebih dari sekadar memeriksa apakah jumlahnya cukup kecil. Itu juga mengaktifkan fitur appcompat karena mengasumsikan bahwa program itu ditulis untuk bekerja pada versi Windows yang lama. Fitur-fitur ini menyebabkan masalah, terutama karena letak Windows tentang ukuran jendela di Aero yang merepotkan. Itu berhenti berbohong tentang batas tebal jendela Aero ketika dapat melihat bahwa program itu dirancang untuk berjalan pada versi Windows yang memiliki Aero.
Anda dapat mengubah nomor versi itu dan mengaturnya kembali ke 4.00 dengan menjalankan Editbin.exe di assemblies Anda dengan opsi / subsistem. Jawaban ini menunjukkan contoh acara postbuild.
Namun di situlah kabar baik berakhir, masalah yang signifikan adalah bahwa .NET 4.5 tidak terlalu kompatibel dengan .NET 4.0. Sejauh ini masalah terbesar adalah bahwa kelas dipindahkan dari satu rakitan ke rakitan lainnya. Terutama, itu terjadi pada atribut [Extension]. Sebelumnya di System.Core.dll, itu dipindahkan ke Mscorlib.dll di .NET 4.5. Itu kaboom di XP jika Anda mendeklarasikan metode ekstensi Anda sendiri, program Anda mengatakan untuk mencari di Mscorlib untuk atribut, diaktifkan oleh atribut [TypeForwardedTo] di versi .NET 4.5 dari perakitan referensi System.Core. Tapi itu tidak ada saat Anda menjalankan program Anda di .NET 4.0
Dan tentu saja tidak ada yang bisa membantu Anda berhenti menggunakan kelas dan metode yang hanya tersedia di .NET 4.5. Jika Anda melakukannya, program Anda akan gagal dengan TypeLoadException atau MissingMethodException saat dijalankan pada 4.0
Cukup targetkan 4.0 dan semua masalah ini hilang. Atau hancurkan kebuntuan itu dan hentikan mendukung XP, keputusan bisnis yang sering tidak dapat dibuat oleh pemrogram tetapi pasti dapat didorong dengan menunjukkan kerepotan yang ditimbulkannya. Tentu saja ada biaya yang tidak nol untuk harus mendukung sistem operasi kuno, hanya upaya pengujian yang substansial. Suatu biaya yang tidak sering dikenali oleh manajemen, kompatibilitas Windows sangat legendaris, kecuali jika ditunjukkan kepada mereka. Teruskan biaya tersebut kepada klien dan mereka cenderung membuat keputusan yang tepat jauh lebih cepat :) Namun kami tidak dapat membantu Anda.