CodeFile vs CodeBehind

138

Apa perbedaan antara CodeFile = "file.ascx.cs" dan CodeBehind = "file.ascx.cs" dalam deklarasi kontrol pengguna ASP.NET?

Apakah ada yang lebih baru atau direkomendasikan? Atau apakah mereka memiliki penggunaan khusus?

Soldarnal
sumber

Jawaban:

163

CodeBehind : Perlu dikompilasi (model ASP.NET 1.1). Biner yang dikompilasi ditempatkan di folder bin dari situs web. Anda perlu melakukan kompilasi di Visual Studio sebelum Anda menyebarkan. Ini adalah model yang baik ketika Anda tidak ingin kode sumber dapat dilihat sebagai teks biasa. Misalnya saat mengirim ke pelanggan yang tidak memiliki kewajiban untuk memberikan kode.

CodeFile : Anda memberikan solusi untuk penyebaran file sumber. ASP.NET 2.0 runtime mengkompilasi kode ketika dibutuhkan. File yang dikompilasi berada di Microsoft.NET [versi .NET] \ File ASP.NET Sementara.

Shafqat Ahmed
sumber
2
Jadi, apakah ini berarti bahwa pengembang harus secara manual mengubah atribut arahan Halaman atau apakah ada cara untuk membuat proyek web yang memilih codebehind atau codefile, secara default, setiap kali halaman web baru ditambahkan?
Matt W
38
Cara saya melihatnya adalah CodeFile dimaksudkan untuk digunakan untuk "WebSite" dan "Codebehind" dimaksudkan untuk "Proyek Aplikasi Web" karena perlu dikompilasi. Jadi saat mengonversi "Situs Web" ke "Proyek Aplikasi Web" kita mungkin perlu mengubah semua kejadian CodeFile secara manual menjadi Codebehind!
renegadeMind
2
CodeFiles bagus selama pengembangan karena Anda dapat menguji perubahan setelah hanya menyimpan dan menyegarkan halaman dan tanpa harus Membangun proyek Anda. Anda masih bisa secara opsional "Publikasikan" file model kompilasi .Net 2+ CodeFile sebagai DLL jika Anda tidak suka memposting file .cs dan .vb ke server produksi. Saat Anda mempublikasikan proyek Anda, Anda dapat memilih opsi "Precompile" untuk mengubah salah satu atau kedua file .aspx dan .cs / .vb Anda menjadi DLL, efektif seperti CodeBehind.
scradam
1
Seperti yang ditunjukkan renegadeMind (dan dari upvotes yang didapat), saya pikir respon harus diedit untuk menekankan fakta bahwa CodeFile sangat terkait dengan solusi tipe "situs web" sedangkan CodeBehind terkait dengan "proyek aplikasi web" . Sayangnya hasil edit saya ditolak.
frenchone
3
fakta bahwa codebehind dikaitkan dengan asp 1.1 sementara codefile ditautkan ke asp.net 2.0 dapat ditautkan dengan berpikir codefile adalah "superior" untuk codebehind ketika mereka tidak (dan IMHO ini justru sebaliknya: aplikasi web lebih baik daripada situs web)
frenchone
5

File codebehind perlu dikompilasi sebelum dijalankan tetapi dalam src kita tidak perlu mengkompilasi dan kemudian menjalankan .. simpan saja file tersebut.


sumber
1
but in src- maksudmu but in the CodeFile?
Don Cheadle
5

Saya bekerja dengan Proyek Aplikasi di Visual Studio Express 2012 Untuk Web dan menggunakan .NET 4.0. Dalam kode di belakang file untuk login saya dan mengubah halaman kata sandi saya menemukan situasi di mana saya membutuhkan CodeBehind dan CodeFile dalam deklarasi.

Jika saya tidak menambahkan referensi file kode suka

CodeFile=login.aspx.cs

Halaman web tidak diuraikan dan browser menampilkan kesalahan pengurai. Tidak masalah apakah saya mengkompilasi proyek atau tidak.

Jika saya tidak menambahkan kode di belakang referensi suka

CodeBehind=login.aspx.cs

Referensi ke kelas Keamanan seperti MembershipUser gagal baik pada waktu kompilasi dan ketika mencoba untuk menggunakan intellisense dengan kesalahan seperti "Tipe atau namespace MembershipUser tidak dapat ditemukan". Saya telah menambahkan referensi ke System.Web.ApplicationServices seperti yang dipersyaratkan oleh .Net 4.0 framework.

Saya harus menambahkan bahwa file-file bermasalah ini berjalan di suatu aplikasi di dalam situs web yang dibuat menggunakan alat Aplikasi IIS. Ketika saya membuka situs web dari Visual Studio saya tidak mengalami kesulitan dengan kesalahan parser atau kesalahan referensi. Kebingungan ini hanya terjadi ketika saya membuka aplikasi sebagai proyek di Visual Studio.

David Hyogo
sumber
1
Aku tahu maksudmu John. Dan mungkin layak untuk downvote, tapi saya benar-benar berjuang dengan masalah ini saat ini. Mungkin kesulitan saya tidak datang dari perbedaan ini tetapi dari sesuatu yang lain. Namun, meskipun jawaban yang diterima menjawab pertanyaan, itu tidak membantu dengan masalah praktis yang saya hadapi. Mungkin saya harus membuka pertanyaan baru.
DavidHyogo