Bagaimana mengkonversi situs web ASP.NET ke aplikasi web ASP.NET

90

Saya memiliki situs web ASP.NET 3.5 (istilah studio visual), tetapi situs tersebut terus berkembang dan terlihat agak koboi di antara hal-hal lainnya. Saya ingin melihat ini diubah menjadi Aplikasi Web (ruang nama dan semua).

Apakah ini sesuatu yang dapat dilakukan dengan mudah di Visual Studio? Jika tidak, apakah ada alat lain di luar sana yang dapat membuat semua ruang nama, dll secara otomatis?

RSolberg
sumber
4
Templat situs web itu adalah POS yang sangat buruk dibandingkan dengan templat Aplikasi Web. Saya gagal melihat keuntungan menggunakan template situs web ...
James
9
@ James - hanya salah satu dari banyak alasan saya ingin menjauh darinya ... Anda berkhotbah ke paduan suara ....
RSolberg
2
Saya yakin panduan di bawah ini sangat menyeluruh (tidak membaca semuanya), tetapi seseorang di youtube menunjukkan cara yang sangat sederhana untuk mengonversi situs web menjadi aplikasi web di sini: youtube.com/watch?v=oXptokM0v7w - as biasanya saya tidak dapat menjamin bahwa ini akan berhasil untuk semua orang. Saya pikir metode ini akan bekerja untuk orang-orang dengan situs yang lebih kecil dan tidak terlalu rumit.
dyslexicanaboko
3
Jika Anda menggunakan VS2013, jangan lupa item menu telah dipindahkan .
Jon

Jawaban:

108

Nah, ternyata opsi "Ubah ke aplikasi web" TIDAK ada untuk "situs web". Opsi "Ubah ke aplikasi web" hanya ada untuk "aplikasi web" !!!!

[penekanan saya]

Jadi, inilah kesepakatannya, untuk melakukan konversi, Anda perlu:

  • Tambahkan "Aplikasi Web" baru ke solusi VS 2008 Anda (File-> Add-> New Project-> C # -> Web-> ASP.NET Web Application).

  • Setelah itu, Anda menyalin semua file di "situs web" lama ke "aplikasi web" yang baru Anda buat, dan menimpa semua file yang dibuat di dalamnya secara default

  • Langkah selanjutnya adalah yang paling jelek, Anda perlu "secara manual" menambahkan referensi di "situs" Anda ke "aplikasi web" yang baru. Saya pikir mainan VS 2008 PowerCommands akan melakukan ini untuk saya karena itu menyalin referensi dari jenis proyek lain, tetapi ternyata tidak. Anda harus melakukannya sendiri, secara manual, dan Anda harus berhati-hati dalam langkah ini jika Anda memiliki beberapa versi dari rakitan yang sama (seperti AJAXToolkit dalam kasus saya) atau rakitan yang memiliki GAC dan versi lokal atau lebih.

  • Ulangi terus langkah terakhir dan coba buat "aplikasi web". Anda akan terus mendapatkan error seperti "'....' adalah namespace yang tidak dikenal. Apakah Anda kehilangan referensi assembly?". Pastikan Anda tidak memiliki satu pun kecuali yang di mana '....' diganti dengan ID dari kontrol server yang Anda gunakan. Dengan kata lain, terus tambahkan referensi dan buat project hingga hanya error yang ada karena file .DESIGNER.CS atau .DESIGNER.VB hilang.

  • Setelah itu, masuk ke node root project "aplikasi web" di penjelajah solusi VS 2008, dan klik kanan, lalu Anda AKAN menemukan opsi "Convert to web application". Apa yang dilakukan opsi ini sebenarnya adalah membuat perubahan kecil pada arahan "@Page" dan "@Control" dari halaman dan kontrol, dan membuat file .DESIGNER.CS atau .DESIGNER.VB yang diperlukan.

  • Coba buat "aplikasi web" lagi. Jika Anda mendapatkan kesalahan, lihat referensi apa yang mungkin hilang dan / atau klik "Ubah ke aplikasi web" lagi. Terkadang, jika ada kesalahan selain yang disebabkan hilangnya file DESIGNER, tidak semua halaman / kontrol akan membuat file DESIGNER tersebut. Memperbaiki masalah non DESIGNER dan mengklik "Ubah ke aplikasi web" lagi harus melakukan pekerjaan untuk ini.

  • Setelah Anda selesai membangun VS yang sukses, Anda harus siap untuk pergi. Mulailah menguji aplikasi web Anda. Secara opsional, Anda dapat mengklik kanan node proyek root "aplikasi web" di VS 2008 Solution Explorer dan klik "Properties" lalu pergi ke tab "Web" untuk mengatur "aplikasi web" ke folder virtual di IIS (Anda dapat membuat direktori virtual dari sana di VS). Jika Anda ingin menggunakan direktori virtual IIS yang digunakan "situs web" lama, Anda harus menghapusnya dari IIS terlebih dahulu.

  • Pembaruan: Saat menguji halaman Anda, bayar PALING PERHATIAN untuk kelas-kelas di folder "App_Code", terutama yang TIDAK ADA NAMESPACE. Itu bisa menjadi jebakan besar. Kami memiliki masalah dengan dua metode ekstensi yang kelebihan beban di kelas statis yang sama yang tidak memiliki namespace, salah satunya memperpanjang DateTime? (Nullable) dan memanggil overload lain yang memperpanjang DateTime itu sendiri. Memanggil kelebihan beban lainnya sebagai metode ekstensi melewati kompilasi VS 2008 dan memberi kami kesalahan kompilasi HANYA DALAM RUNTIME (Dengan IIS). Mengubah panggilan ke overload lain dari memanggilnya sebagai metode ekstensi menjadi memanggilnya sebagai metode statis normal (hanya mengubah panggilan di kelas yang sama, panggilan dari kelas lain tetap menjadi panggilan metode ekstensi) memang menyelesaikan masalah ini, tetapi jelas, ini tidak seperti aman seperti dulu di VS 2005.

  • Update2: Selama konversi, VS 2008 mengganti nama "App_Code" Anda menjadi "Old_App_Code". Nama baru ini terdengar jelek, tapi JANGAN GANTI NAMA KEMBALI. Dalam model "aplikasi web", semua kode akan berada dalam satu rakitan. Saat runtime, server web tidak mengetahui jenis proyek web yang Anda gunakan. Itu mengambil semua kode dalam folder "App_Code" dan membuat perakitan baru untuk itu. Dengan cara ini, jika Anda memiliki kode dalam folder bernama "App_Code", Anda akan berakhir dengan kesalahan kompilasi RUNTIME bahwa tipe yang sama ada di dua rakitan, yang dibuat oleh VS, dan yang dibuat oleh IIS / ASP.NET Development Server . Untuk menghindarinya. biarkan "Old_App_Code" dengan nama yang sama, atau ubah namanya menjadi ANYTHING EXCEPT: "App_Code". Jangan letakkan kode apa pun di "App_Code" seperti itu

Saya tahu ini sejak sebelumnya tetapi saya lupa sekarang karena saya sudah lama tidak menggunakan model "situs web" :(.

Andrew Hare
sumber
2
Tautan Anda rusak di bagian atas, Kesalahan 500
Sameer Alibhai
6
Juga, cari file kode untuk disalin sebagai "konten" dan bukan "kompilasi"
jcolebrand
14
Bagi Anda yang melakukan ini di VS2013, "Covert to Web App" telah dipindahkan ke menu Project, di bagian bawah.
Eric Sassaman
3
@EricSassaman Tapi itu tidak ada sama sekali untuk proyek Situs Web untuk saya.
NickG
1
@NickG, Anda benar, sesuai baris pertama jawaban, TIDAK ADA untuk proyek situs web, menu Proyek bahkan tidak ada kecuali Anda memilih Aplikasi Web di Penjelajah Solusi. Jika Anda melihat "Situs web" di menu, itu bukan Aplikasi Web. Ikuti langkah-langkah di atas untuk membuat Aplikasi Web kosong, salin file Anda ke dalamnya. Kemudian "Ubah ke Aplikasi Web" harus ada di menu proyek untuk Aplikasi Web baru Anda. Apakah kamu melakukan itu?
Eric Sassaman
5

Jika Anda mengalami masalah dalam membuat Proyek Aplikasi Web baru Anda, periksa Properti File di Visual Studio dari semua kelas 'pembantu'. Untuk proyek yang saya ubah, Build Action disetel ke Konten sedangkan seharusnya Kompilasi.

Matt Burrell
sumber
3

Buat Aplikasi Web Baru di VS 2010.
1. Menggunakan Windows Explorer salin semua file Anda ke folder proyek Anda.
2. Dalam penjelajah solusi VS 2010 menampilkan semua file.
3. Pilih file dan folder - klik kanan termasuk dalam proyek.
4. Klik kanan penjelajah solusi proyek dan pilih Konversi ke Aplikasi Web.

Ada beberapa perbedaan kecil, seperti folder App_Code akan diganti namanya menjadi old_app_code - yang secara mengejutkan tidak menyebabkan kesalahan. TypeName di sumber data objek Anda dan yang diwariskan pada tag @Page mungkin memerlukan [ProjectName]. prefiks ditambahkan secara global. Misalnya jika nama jenis Anda adalah "BusinessLogic.OrderManager" dan nama proyek Anda adalah InventorySystem, Anda harus mengubahnya menjadi InventorySystem.BusinessLogic.OrderManager. Juga beberapa perubahan tampilan, seperti validator bidang yang diperlukan tidak lagi menggunakan font merah, defaultnya hitam.

Tim Samandari
sumber
File kode aplikasi saya tidak berubah seperti yang seharusnya. Saya harus mengganti namanya secara manual kemudian mengubah semua halaman cs untuk dikompilasi.
Mike
3

Saya menghadapi masalah yang sama pada awalnya. Setelah mengikuti buku Wrox Professional ASP.NET 4.0, saya menemukan solusi berikut untuk kasus saya.

Saya pertama kali membuat aplikasi web baru. Menyalin semua file situs web ke dalam folder aplikasi web. Klik kanan pada aplikasi, dan klik konversi ke aplikasi web.

Anda mungkin bertanya mengapa Anda perlu mengubah aplikasi web menjadi aplikasi web. Jawabannya adalah, ketika Anda membuat situs web, Anda cukup membuat kode file .cs di mana pun diperlukan. Sebuah aplikasi web, bagaimanapun mendeklarasikan .design.cs (atau .vb) dan file .cs untuk bagian kode dan desain secara otomatis.

BERIKUTNYA: Hapus semua referensi manual, seperti atribut 'Warisan' di direktif PAGE, ke file lain di situs web Anda, karena spasi nama AKAN menangani referensi kelas secara terpusat.

Saya juga menghadapi masalah, karena saya belum memasukkan folder OBJ dan BIN dalam proyek saya. Jika Anda merasa kehilangan folder BIN dan OBJ Anda, cukup klik ikon 'Show All Files' di Solution Explorer dan kemudian klik kanan pada folder yang hilang dan tambahkan ke proyek. (untuk memastikan mereka dikompilasi dengan proyek.)

PEMBARUAN: Seperti yang ditunjukkan @deadlychambers di komentar: Anda dapat mencari di mana saja dengan melakukan "Ctrl + Shift + F" lalu mencari Inherits="(.*?)". Ini akan menemukan semua kejadian dan mungkin menghemat waktu Anda!

Cerah R Gupta
sumber
1
Anda dapat menghapus semua dengan Ctrl-shift-F dan kemudian mengubah opsi pencarian untuk ekspresi reguler dan menggunakan Inherits = "(. *)?"
DeadlyChambers
1
Periksa apakah itu Inherits = "(. *?)" Yang lain akan mengambil semua yang ada di belakang warisan sampai tanda kutip terakhir.
DeadlyChambers
1
Saya baru saja mengalami masalah di mana TIDAK memiliki warisan menyebabkan desainer menghapus namespace kemudian menghapus kelas. Saya berharap ini lebih mudah.
DeadlyChambers
3

Saya sekarang telah berhasil memigrasi satu proyek situs web ke aplikasi web dan ada beberapa hal yang harus diperhatikan.

Memiliki ReSharper yang Anda inginkan sangat membantu dalam refactoring file aspx.

  1. Siapkan solusi Anda dan buat Aplikasi Web kosong
  2. Salin semua file
  3. file aspx dalam proyek situs web tidak memiliki namspace. Bungkus kelas Anda dalam ruang nama yang sesuai
  4. Selama penyalinan, semua halaman saya di subfolder diganti namanya menjadi nama proyek dan nama folder saya, jadi saya mendapat 40ish public partial class FolderName_Projectname : PageJika perlu, ganti nama semua file menggunakan Resharper atau secara manual. Jika Anda mengalami beberapa kesalahan seperti "There is already a member Page_Load() defined", ini kemungkinan besar karena nama kelas dan duplikasi yang salah
  5. Setelah menambahkan namespace
  6. Ganti CodeFiledi semua halaman aspx dengan Codebehinddan terutama perhatikan file di subfolder Anda. Pastikan Inhertis=""tidak berisi jalur relatif. Ruang nama Anda menangani semuanya. Jadi format yang benar adalah Inherits="Namespace.classname". Jika kelas Anda memiliki namespace NaSpa dan nama file foo.cs itu akan menjadiInherits="NaSpa.foo"

  7. Setelah Anda menyiapkan semua file Anda (jangan lupa halaman master Anda), jalankan "Konversi ke aplikasi web". Jika Anda mengalami kesalahan setelahnya, bilas dan ulangi. Jika Anda mengalami kesalahan seperti "TextBoxName tidak dapat ditemukan jika Anda kehilangan referensi", pastikan Anda tidak lupa untuk membersihkan halaman aspx Anda. Indikator yang baik adalah memeriksa file desainer yang dibuat secara otomatis. Jika TextBoxNametidak muncul di sana, konversi tidak berhasil sepenuhnya.

  8. Selesaikan semua dependensi yang hilang.
  9. Membangun
Marco
sumber
0

ruang nama ASP default sepertinya tidak berfungsi lagi. Jadi saya tidak bisa memanggil halaman User Controls.ascx saya dari luar halaman. Memberi mereka namespace dan mengubah default dari ASP ke namespace saya sepertinya berhasil.

Mike
sumber