Pertama, saya telah membaca yang berikut ini:
- Hubungkan case
- Kasus VS
- dan terutama posting channel9 ini
Jadi, dari poin terakhir, saya benar-benar berpikir tidak ada jalan lain, tetapi saya harus melihat apakah saya bisa mendapatkan jawaban pasti karena tim saya ingin meningkatkan dari .NET 4.0 ke .NET 4.5. Namun, kami harus mendukung XP.
Apakah tidak ada kemungkinan untuk menggunakan .NET 4.5 jika kita ingin mendukung XP?
Satu-satunya hal yang dapat saya pikirkan adalah membuat dua solusi terpisah, tetapi basis kode harus berbeda jika kami menggunakan fitur .NET 4.5.
Jadi, saya mencari beberapa solusi luar biasa yang tidak dapat saya temukan dan orang lain mungkin sudah tahu.
Jawaban:
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 // <=== here!! 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.
sumber
just the testing effort is substantial
- Itulah yang membuat manajemen kami "memungkinkan untuk menjatuhkan dukungan XP".Sayangnya, tidak, Anda tidak dapat menjalankan program 4,5 di XP.
Dan posting yang relevan dari halaman Connect itu:
sumber
Proyek Mono menjatuhkan dukungan Windows XP dan "lupa" untuk menyebutkannya. Meskipun mereka masih mengklaim Windows XP SP2 adalah versi minimum yang didukung, sebenarnya itu adalah Windows Vista.
Versi terakhir Mono yang mendukung Windows XP adalah 3.2.3.
sumber
Coba mono:
http://www.go-mono.com/mono-downloads/download.html
Unduhan ini bekerja pada semua versi Windows XP, 2003, Vista dan Windows 7.
sumber
Versi terakhir untuk mendukung windows XP (SP3) adalah mono-4.3.2.467-gtksharp-2.12.30.1-win32-0.msi dan itu tidak menggantikan .NET 4.5 tetapi mungkin menarik untuk beberapa aplikasi.
lihat di sana: https://download.mono-project.com/archive/4.3.2/windows-installer/
sumber