PreCompiled Publish Hatası ve Çözümü

Sık karşılaşılan sorunlardan biri olmak ile birlikte, çözümünü nadir yabancı kaynaklı sitelerde bulabileceğiniz bir konudur. Bu sitelerin çoğu sorunu genel olarak ele aldığı için, birçok arkadaşımızın çözüm yoluna gitmekte zorluk yaşadığını gördüm. Detaylı bir şekilde, resimler ile birlikte publish sorununun üstesinden nasıl geleceğimizi anlatacağım.


"The file '/Default.aspx' has not been pre-compiled, and cannot be requested." sorunu, *.aspx çalışma sayfanıza herhangi bir dll'in compiled edilememesinden dolayi oluşmaktadır. Ne diye *.aspx sayfama dll compiled ettirmek isteyebilirim ki diye düşünebilirsiniz. Belki bilip, belki de bilmeden bu olayı projemizi Publish ederken yapıyoruz.


Build - Publish Web Site ekranından dosyanızı hangi klasöre publish edeceğinizi seçip, "Allow this precompiled site to be updatable" seçenegini seçin ve OK butonuna basın. Klasörde *.cs kodlarının gizlendiğini ve bin klasörünün içinde olduğunu göreceksiniz. Sitenizin düzgün çalışabilmesi için bin klasörünün içindeki dll'leri compiled etmesi gerekmektedir.
Buraya kadar güzelce yaptık, localhosta'da bir sorun gözükmüyor. Simdi sıra Publish olarak çıkarttığımız klasördekileri FTP'ye atmaya geldi. İlk önce, klasördekileri FTP adresinizin ana dizinine(root) attığınızda bir sorun olmayabilir. Varsayalım sitenize xxx isimli bir klasör oluşturdunuz. domainadiniz.com/xxx dizinine yeni çalışmanızı publish edip yüklediginiz vakit;
Line 1: <%@ page language="C***quot; autoeventwireup="true" inherits="_Default, App_Web_tkfeimge" %>
hatası ile karşılasacaksınız. Bu hatanin açılımı ve çözümü, sitenin ana dizinindeki(root) bin klasörünün içinde, "App_Web_tkfeimge.dll" dosyasını bulamıyor olması (tkfeimge sizde değişik gözükecektir). domainadiniz.com/xxx dizininin içinde bulunan bin klasöründeki dll'leri ana dizine atmanız gerektiğini unutmadan söyleyim. Yapmadığınız takdirde aynı şekilde bir sorun ile karşılaşabilirsiniz.


Hatırlatma: Daima bin klasörü ana dizinde(root) olmalidir. İstediginiz kadar alt klasör oluşturun, işleyiş daima ana dizindeki bin klasörüne dayalı olacaktır.
domainadiniz.com/xxx dosyasındakı bin klasörünü anadizine attınız, fakat bu seferde "The file '/Default.aspx' has not been pre-compiled, and cannot be requested." bu hata ile karşılaşacaksınız. Bu hata yabancı gelmiyordur. Hayda başa döndük mü, tabikide hayır. Sırasıyla işleyişin nasıl olduğunu, ne yaparsanız hangi hata ile karşılaşacağınızı ve çözüm yollarını gösterdim. Yalnız en son varsaydığımız bir xxx dosya sorunu vardı. Onun çözümünüde şimdi anlatacağım.
Mevcut sitenize yeni bir klösör olusturup, yeni bir site çalışması yapmak istiyorsunuz. Mevcut siteniz ve yeni site çalışmanız publishli. Mevcut siteniz çalışıyor durumda olmasına rağmen, yeni site çalışmanızda sitemde yer ayırdığım bu hata mevcut. O zaman IIS Application Pool yöntemi ile birden fazla sitenizi klasörler altında gösterebileceksiniz. Bu şekilde birden fazla sitenizi birbirine bağlayabileceksiniz.


IIS Application Pool nedir?

Geliştirdiğiniz web siteleri için ayrı Application Pool’lar tanımlayabilir ya da birden fazla web sitesini aynı Application Pool içinde çalıştırabilirsiniz. Sitelerden bir tanesinde yaşayacağınız sorun, Application Pool'lar ayrı olduğu için diger siteler etkilenmeyecektir.

IIS Application Pool'u hostumuzdan nasıl oluşturacağımızı inceleyelim;
Aşağıdaki anlatımım tamamen Plesk paneller içindir. Diğer yönetim panelleri içinde mantık genelde aynıdır.
Virtual Directories (Sanal Klasörler) butonuna tıklıyoruz. (Resim1)



Create Virtual Directory (Sanal Dizin Oluştur) butonuna tıklıyoruz. (Resim2)


Açılan sayfada yalnız Name yazan yere, oluşturduğumuz klasörün(xxx) ismini yazıp(siz kendi oluşturduğunuz klasörün ismini yazın) OK butonuna basıyoruz.

Artık yeni çalışmanızı, bin klasörü ile birlikte yukarıda oluşturduğunuz klasörün içine atabilirsiniz. Yazılanları harfiyen uyguladığınız takdirde herhangi bir hata ile karşılaşmayacaksınız.

Alıntı: https://www.orcunokan.com/precompile...si-ve-cozumu/6