App_Code'da bulunan sınıflara erişilemiyor


198

ASP.NET'te bir web sitesi oluşturdum ve bir sınıf oluşturup App_Code klasörünün içine koydum. Ancak buna diğer sayfalarımdan erişemiyorum. Buna izin vermek için bir şeyin yapılandırılması gerekiyor mu? Önceki projelerde çalışmasını sağladım, ancak bu projede bir şekilde değil.

namespace CLIck10.App_Code
{
    public static class Glob
    {
        ...
    }
}

1
Web sayfalarınıza ad alanını eklediğinizi varsayalım?
Alex Czarto

Yanıtlar:


640

Klasördeki .csdosyayı sağ tıklayın App_Codeve özelliklerini kontrol edin.

"Derleme Eylemi" nin "Derleme" olarak ayarlandığından emin olun.


10
Bunu varsayılan oluşturma eylemi olarak nasıl ayarlayabilirsiniz? veya bunu App_Code klasöründeki her dosya için yapmak zorunda mıyım?
Malachi

3
Bunu neden Visual Studio 2012'de yapamıyorum ??!
RSK

4
Bu VS2012'de bir hata gibi görünüyor. Bana da olur.
James Nail

2
daha fazla ayrıntı isteyenler için: how-to-code-net.blogspot.ro/2014/04/…
Alexa Adrian

3
Yay bu Visual Studio projemdeki 142 hataları çözdü, bu çözümü paylaştığınız için çok teşekkürler: -]
Michael G. Workman

14

Sınıfa erişmek istediğiniz diğer dosyaların en üstüne koyun:

using CLIck10.App_Code;

VEYA sınıfa diğer dosyalardan erişin:

CLIck10.App_Code.Glob

Bu sorunun olup olmadığından emin değilim ama C # için yeni olsaydınız, bu takılmak için kolay bir konudur.

Güncelleme: Son zamanlarda bir projeye bir App_Code klasörü eklerseniz, bu "özel" klasörü düzgün bir şekilde tanıması için Visual Studio'yu kapatıp yeniden açmam gerektiğini buldum.


1
Yapı eylemiyle ilgili bir şeydi - FailBoy'un cevabı sorunu çözdü. Yine de cevap verdiğiniz için teşekkürler :)
Malachi

App_Code klasöründe sınıfa bir ad alanı ekledi gibi çalışan güzel.
mashtheweb

Neden böyle bir isim alanını eklemek zorundayız? İntelliSense neden klasör adını belirtmeden bu sınıfa erişemiyor?
Elham Kohestani

10

App_code sınıfına erişmek istediğiniz sayfaya gidin ve sonra app_code sınıfının ad alanını ekleyin. usingAşağıdaki gibi bir ifade sağlamanız gerekir :

using WebApplication3.App_Code;

Bundan sonra, app_code class özelliğine gitmeniz ve 'Build Action'ı' Derleme 'olarak ayarlamanız gerekir.


4

sayfalarınızla aynı ad alanını kullandığınızdan emin olun


1
Ama neden APP_CODE'deyken? Ben orada PUBLIC sınıfları ile bir şey otomatik olarak çözüm boyunca maruz gerektiğini düşündüm !?
Fandango68

4

Bunun neden olduğunu henüz anlayamadım, ancak App_Codeklasörümde birbirlerini yöntem olarak çağıran sınıflar vardı ve bir .NET 4.5.2 projesi oluşturduğumda bu konuda iyiydim, ama sonra hedef sunucu yeni sürüme geçirilmediği için 4.0'a geri döndürün. İşte o zaman bu sorunu buldum ( langversionweb.config dosyasında 6'dan 5'e ... başka bir hikaye düzelttikten sonra) ....

Benim yöntemlerden biri gibi bir hata devam etti:

The type X.Y conflicts with the imported type X.Y in MyProject.DLL

Tüm sınıflarım, burada kabul edilen yanıtta önerildiği gibi özelliklerinde zaten "Derle" olarak ayarlanmıştı ve her birinin aynı olan ortak bir ad alanı vardı ve her using MyNamespace;birinin her sınıfın en üstünde vardı .

Birbirine yöntemleri çağırmak zorunda rahatsız edici sınıfları "App_Code" dışında bir şey adlı başka bir standart klasöre taşındı, ben bu çatışma sorunu sahip durdurdu bulundu.

Not : "AppCode" adlı standart bir klasör oluşturursanız, sınıflarınızı bu klasöre taşıyın, "App_Code" klasörünü silin, sonra "AppCode" adını "App_Code" olarak yeniden adlandırın, sorunlarınız geri dönecektir. "App_Code" oluşturmak için "Yeni Klasör" veya "ASP .NET Klasörü Ekle" seçeneğini kullanmanızın bir önemi yoktur.

Belki bu sadece bir .NET 4.0 (ve muhtemelen daha önce) sorun ... Ben geri dönmek zorunda önce 4.5.2 iyi oldu!


0

Dosyaları ayrı bir Sınıf Kütüphanesi projesine taşımak ve daha sonra web projesinde bu projeye başvurmak usingve dosya bölümünde ad alanını uygulamak daha kolay buldum . Bir nedenden ötürü diğer çözümler benim için işe yaramıyordu, ama etraftaki bu çalışma işe yaradı.


0

Benim durumumda, App_Code klasöründe tanımlanan sınıflarla inşa etmek için bir proje alamadım.

Senaryoyu tam olarak yorumlamak için çoğaltmak mümkün değil, ancak işbirliği yapmak için intellisense için görsel stüdyoyu kapatıp yeniden açmak zorunda kaldı ...

App_Code klasöründe bir sınıf 'İçerik' yerine 'Derleme' olarak ayarlandığında (sağ tıklatın) hataların sınıfın ikinci sürümünden geldiğini fark ettim ... Kod bölmesi ile sekme arasındaki 3 alanın 3'ü. 'Diğer' olana 10_App_Code veya benzeri satırlar boyunca bir şey denirdi.

Sorunu gidermek için, klasörü App_Code'dan Kod olarak yeniden adlandırdım, sınıflarda ad alanlarını açıkça ayarladım ve tüm sınıfları 'Derle' olarak ayarladım

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.