Saya agak kejam selama akhir pekan dan memutuskan untuk mengupgrade proyek ke platform 2.0. Karena VS2003 dan 2005 dapat hidup berdampingan, masalahnya relatif mudah untuk diatasi. Instal versi Pro 2005, buka proyek asli, dan upgrade wizard akan otomatis muncul. Proyek ini berisi 7 sub-proyek. Semua logika dan tampilan diimplementasikan di proyek latar belakang. Setiap file di proyek Web front-end hanya mengimplementasikan panggilan ke metode latar belakang, dan tidak ada metode lanjutan yang digunakan di latar belakang peningkatannya sangat lancar.
Singkatnya, file proyek di proyek Web telah dihapus. Ternyata dua file ASPX yang tidak terkait juga diperhitungkan dalam proses kompilasi. Saya mengkompilasinya, mengunggahnya ke server, dan melaporkan kesalahan. Belakangan, saya menemukan bahwa proyek yang baru dikompilasi tidak memiliki Dll proyek Web, tetapi masih ada di direktori server. Hasilnya adalah referensi internal yang berantakan. Hapus Dll proyek Web lama dan tidak apa-apa.
Kemudian saya berencana untuk mencoba mode penerbitan. Saya menggunakan fungsi situs web penerbitan di item menu hasilkan VS2005 untuk mengatur direktori tempat penerbitan proses kompilasi sangat lambat. Setelah kompilasi selesai, banyak hal yang dihasilkan di direktori bin. Saya pikir menyalin hal-hal ini ke server akan menghilangkan kebutuhan akan kompilasi yang bersih. Ternyata proses csc masih muncul saat pertama kali halaman diakses. Setelah seluruh website dialihkan, masih ada banyak proses csc, namun proses kompilasi sedikit lebih cepat dari sebelumnya.
Masalah serius lainnya terjadi. Program sepertinya restart secara otomatis setelah beberapa saat, menyebabkannya dikompilasi kembali. Kemudian, muncul jendela kesalahan di server yang mengatakan bahwa ada kesalahan dalam proses w3wp.exe dia? Setelah memilih Batal, w3wp.exe otomatis dimulai ulang, dan babak kompilasi ulang baru dimulai. Proses ini terjadi tiga kali, dan saya sangat takut sehingga saya segera beralih kembali ke versi 1.1. Saya melihat di penampil acara dan menemukan banyak pengecualian yang tidak tertangani, yang pada dasarnya merupakan kesalahan dengan nilai kosong. Aneh, di 1.1 tidak ada masalah, dan kodenya tidak diubah.
Kemudian, saya menemukan sebuah artikel (sepertinya tidak ada seorang pun dalam bahasa Mandarin yang menyebutkannya), http://www.eggheadcafe.com/articles/20060305.asp . Penanganan pengecualian yang tidak tertangani di 2.0 sangat berbeda dengan di 1.1 berbeda, 1.1 akan mengabaikannya kecuali hal itu mempengaruhi pembuatan halaman. Dan 2.0 akan menyebabkan proses melaporkan kesalahan, yang secara langsung mempengaruhi pengoperasian seluruh situs web. Kedengarannya seperti masalah serius, tetapi tampaknya lebih masuk akal, jika tidak, pemrogram akan terus mengabaikan kesalahan ini. Namun karena masalah ini, ketidakmampuan untuk berpindah situs juga menjadi masalah yang serius. Oleh karena itu, metode transisi yang mulus tetap diperlukan. Seperti disebutkan di atas, metode ini adalah dengan menulis HttpModule sendiri untuk menangani semua pengecualian yang tidak tertangani dan mencatat informasi pengecualian ke dalam peristiwa sistem, yang bermanfaat bagi pemrogram untuk diproses. Dan kode sumber dan unduhan file biner HttpModule ini juga disediakan di atas, termasuk Demo WebApp.
Hari ini saya akhirnya memahami metode kompilasi rilis pra-penerapan 2.0. Menggunakan VS untuk mempublikasikan situs web adalah salah. Anda harus menggunakan aspnet_compiler.exe untuk mengkompilasi secara manual, dan proses kompilasinya didasarkan pada pengaturan situs web yang sebenarnya. Dengan kata lain, Anda harus mengunggah konten proyek Web ke situs web, mengatur jalur situs web di IIS, dan kemudian menggunakan aspnet_compile untuk mengkompilasi. Anda dapat mengkompilasi secara lokal yang ada di direktori cache di WindowsMicrosoft.Net sama persis dengan yang dihasilkan oleh csc.exe saat pengguna benar-benar mengakses halaman tersebut. Setelah langkah ini, tidak ada tindakan kompilasi yang akan terjadi ketika pengguna mengunjungi dua kali.
Sangat lelah. Ngomong-ngomong, saya memikirkan metode peralihan yang mulus, menjaga dua situs web menunjuk ke dua direktori berbeda, salah satunya tidak memiliki header host, dan yang lainnya memiliki header host untuk diperbarui. Setelah memperbarui situs web dengan header host, gunakan aspnet_compiler untuk mengkompilasinya, lalu ganti header host kedua situs web, sehingga pengguna yang baru dikunjungi akan diarahkan ke situs web yang baru dikompilasi, dan pengguna tidak akan merasakan penundaan apa pun. Cukup perbarui situs lain lain kali.
http://www.cnblogs.com/unfish/archive/2006/09/10/500230.html