CodeFile ve CodeBehind karşılaştırması


138

Arasındaki fark nedir CodeFile = "file.ascx.cs" ve CodeBehind bir ASP.NET kullanıcı denetimi bildiriminde = "file.ascx.cs"?

Biri daha yeni veya önerilen mi? Yoksa belirli bir kullanımları var mı?

Yanıtlar:


163

CodeBehind : Derlenmesi gerekiyor (ASP.NET 1.1 modeli). Derlenen ikili dosya web sitesinin depo gözü klasörüne yerleştirilir. Dağıtmadan önce Visual Studio'da bir derleme yapmanız gerekir. Kaynak kodun düz metin olarak görüntülenmesini istemediğinizde iyi bir modeldir. Örneğin, kod sağlama yükümlülüğünüz olmayan bir müşteriye teslimat yaparken.

CodeFile : Kaynak dosyaya dağıtım çözümü sağlarsınız . ASP.NET 2.0 çalışma zamanı gerektiğinde kodu derler. Derlenen dosyalar Microsoft.NET [.NET sürümü] \ Temporary ASP.NET Files dizinindedir.


2
Bu, geliştiricinin Sayfa yönergesinin niteliğini manuel olarak değiştirmesi gerektiği veya her yeni web sayfası eklendiğinde varsayılan olarak kod arkası veya kod dosyası seçen bir web projesi oluşturmanın bir yolu var mı?
Matt W

38
Ben CodeFile bir "WebSite" için kullanılacak şekilde ve "Codebehind" derlenmesi gerektiği gibi bir "Web Uygulama Projesi" için anlamına gelir. Bu nedenle, bir "Web sitesini" bir "Web Uygulama Projesi" ne dönüştürürken, tüm CodeFile oluşumlarını Codebehind olarak el ile değiştirmeniz gerekebilir!
renegadeMind

2
CodeFiles geliştirme sırasında iyidir, çünkü bir sayfayı kaydedip yeniledikten ve projenizi Oluşturmanıza gerek kalmadan değişiklikleri test edebilirsiniz. .Cs ve .vb dosyalarını bir üretim sunucusuna göndermekten hoşlanmıyorsanız, isteğe bağlı olarak .Net 2+ CodeFile derleme model dosyalarını DLL olarak da yayımlayabilirsiniz. Projenizi yayınladığınızda, isteğe bağlı olarak .aspx dosyalarınızın ve .cs / .vb dosyalarınızın birini veya her ikisini de etkili bir şekilde CodeBehind gibi DLL'lere dönüştürmek için "Önceden Derleme" seçeneklerini belirleyebilirsiniz.
scradam

1
RenegadeMind'in işaret ettiği gibi (ve aldığınız upvotes'dan), CodeFile'ın "web uygulama projesi" ile bağlantılı olduğu halde CodeFile'ın "web sitesi" türünün çözümüne derinden bağlı olduğu gerçeğini vurgulamak için yanıtın düzenleneceğini düşünüyorum . Maalesef düzenlemem reddedildi.
frenchone

3
codefehind asp.net 2.0 ile bağlantılı iken codebehind asp 1.1 ile ilişkili olduğu gerçeği, codefile değil onlar kodbehind için "üstün" olduğunu düşünmek için bağlantı olabilir (ve IMHO tam tersi: Web uygulamaları web sitelerinden daha iyidir)
frenchone

5

Codebehind dosya çalıştırmadan önce derlemek gerekir ama src biz derlemek ve sonra çalıştırmak gerekmez .. sadece dosyayı kaydedin.


1
but in src- yani but in the CodeFile?
Don Cheadle

5

Web için Visual Studio Express 2012'de bir Uygulama Projesi ile çalışıyorum ve .NET 4.0 kullanıyorum. Benim oturum açma ve parola değiştirme sayfaları için dosyaların arkasındaki kodda bildirimde hem CodeBehind hem de CodeFile gerekli bir durum buldum.

Aşağıdaki gibi bir kod dosyası başvurusu eklemezsem

CodeFile=login.aspx.cs

Web sayfası ayrıştırılmaz ve tarayıcı bir ayrıştırıcı hatası görüntüler. Projeyi derleyip derlemem önemli değil.

Referansın arkasına bir kod eklemezsem

CodeBehind=login.aspx.cs

MembershipUser gibi Security sınıflarına yapılan başvurular hem derleme zamanında hem de intellisense'i "MembershipUser türü veya ad alanı bulunamadı" gibi bir hatayla kullanmaya çalışırken başarısız olur. .Net 4.0 çerçevesinin gerektirdiği şekilde System.Web.ApplicationServices için bir başvuru ekledim.

Bu zahmetli dosyaların IIS Uygulama aracı kullanılarak oluşturulan web sitesi içindeki bir uygulamada çalıştığını eklemeliyim. Web sitesini Visual Studio'dan açtığımda ayrıştırıcı hataları veya referans hatalarıyla ilgili hiçbir sorunum yok. Bu karışıklık yalnızca uygulamayı Visual Studio'da bir proje olarak açtığımda oluşur.


1
Ne demek istediğini biliyorum John. Ve belki de aşağı oyu hak ediyor, ama şu anda bu sorunla gerçekten mücadele ediyorum. Belki de zorluklarım bu farktan değil başka bir şeyden kaynaklanır. Ancak, kabul edilen cevap soruyu cevaplasa da, karşılaştığım pratik soruna yardımcı olmuyor. Belki yeni bir soru açmalıyım.
DavidHyogo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.