Kelas yang berada di App_Code tidak dapat diakses

198

Saya telah membuat situs web di ASP.NET dan telah membuat kelas dan memasukkannya ke dalam folder App_Code. Namun saya tidak dapat mengakses ini dari halaman saya yang lain. Apakah ada sesuatu yang perlu dikonfigurasi untuk memungkinkan ini? Saya telah membuatnya bekerja dalam proyek-proyek sebelumnya, tetapi tidak dalam yang ini, entah bagaimana.

namespace CLIck10.App_Code
{
    public static class Glob
    {
        ...
    }
}
Maleakhi
sumber
1
Saya berasumsi Anda memasukkan namespace di halaman web Anda?
Alex Czarto
1
Kemungkinan rangkap - stackoverflow.com/questions/409070/…
vapcguy

Jawaban:

639

Klik kanan pada .csfile di App_Codefolder dan periksa propertinya.

Pastikan "Bangun Tindakan" diatur ke "Kompilasi".

StevenMcD
sumber
10
Bagaimana Anda bisa mengatur ini sebagai aksi build bawaan? atau apakah saya harus melakukan itu untuk setiap file di folder App_Code?
Maleakhi
3
Mengapa saya tidak bisa melakukan ini di Visual Studio 2012 ??!
RSK
4
Ini tampaknya menjadi bug di VS2012. Terjadi pada saya juga.
James Nail
2
bagi mereka yang menginginkan detail lebih lanjut dapat Anda temukan di: how-to-code-net.blogspot.ro/2014/04/…
Alexa Adrian
3
Yay ini memecahkan 142 kesalahan dalam proyek Visual Studio saya, terima kasih banyak untuk berbagi solusi ini: -]
Michael G. Workman
14

Letakkan ini di bagian atas file lain di mana Anda ingin mengakses kelas:

using CLIck10.App_Code;

ATAU mengakses kelas dari file lain seperti ini:

CLIck10.App_Code.Glob

Tidak yakin apakah itu masalah Anda atau tidak, tetapi jika Anda baru menggunakan C # maka ini mudah untuk dilakukan.

Pembaruan: Baru-baru ini saya menemukan bahwa jika saya menambahkan folder App_Code ke proyek, maka saya harus menutup / membuka kembali Visual Studio agar dapat mengenali folder "khusus" ini dengan benar.

AaronLS
sumber
1
Itu ada hubungannya dengan tindakan membangun dengan tampilan itu - jawaban FailBoy memecahkan masalah. Terima kasih sudah membalasnya :)
Maleakhi
Yang bagus yang berfungsi ketika saya menambahkan namespace ke kelas di folder App_Code.
mashtheweb
Kenapa kita harus memasukkan namspace seperti itu? Mengapa intelliSense tidak dapat mengakses kelas itu tanpa menentukan nama folder?
Elham Kohestani
10

Buka halaman dari mana Anda ingin mengakses kelas App_code, dan kemudian tambahkan namespace dari kelas app_code. Anda perlu memberikan usingpernyataan, sebagai berikut:

using WebApplication3.App_Code;

Setelah itu, Anda harus pergi ke properti kelas app_code dan mengatur 'Build Action' ke 'Compile'.

pengguna3363647
sumber
4

pastikan Anda menggunakan namespace yang sama dengan halaman Anda


sumber
1
Tetapi mengapa saat itu ada di APP_CODE? Saya pikir ada sesuatu di sana dengan kelas PUBLIC yang harus diekspos di seluruh solusi secara otomatis !?
Fandango68
4

Saya belum tahu mengapa ini terjadi, tapi saya memiliki kelas yang ada di App_Codefolder saya yang memanggil metode satu sama lain, dan baik-baik saja dalam melakukan ini ketika saya membangun proyek .NET 4.5.2, tapi kemudian saya harus kembalikan ke 4.0 karena server target tidak ditingkatkan. Saat itulah saya menemukan masalah ini (setelah memperbaikilangversion di web.config saya dari 6 hingga 5 ... cerita lain) ....

Salah satu metode saya terus mengalami kesalahan seperti:

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

Semua kelas saya sudah diatur ke "Kompilasi" di properti mereka, seperti yang disarankan pada jawaban yang diterima di sini, dan masing-masing memiliki namespace yang sama, dan masing-masing memiliki using MyNamespace;di atas setiap kelas.

Saya menemukan bahwa jika saya hanya memindahkan kelas yang menyinggung yang harus memanggil metode satu sama lain, folder standar bernama sesuatu selain "App_Code", mereka berhenti mengalami masalah konflik ini.

Catatan : Jika Anda membuat folder standar yang disebut "AppCode", pindahkan kelas Anda ke dalamnya, hapus folder "App_Code", lalu ganti nama "AppCode" menjadi "App_Code", masalah Anda akan kembali. Tidak masalah jika Anda menggunakan opsi "Folder Baru" atau "Tambahkan ASP .NET Folder" untuk membuat "App_Code" - sepertinya memasukkan nama.

Mungkin ini hanya masalah .NET 4.0 (dan mungkin sebelumnya) ... Saya baik-baik saja di 4.5.2 sebelum harus kembali!

vapcguy
sumber
0

Saya merasa lebih mudah untuk memindahkan file ke proyek Perpustakaan Kelas terpisah dan kemudian referensi proyek itu di proyek web dan menerapkan namespace di usingbagian file. Untuk beberapa alasan solusi lain tidak bekerja untuk saya, tetapi pekerjaan ini berhasil.

Zarepheth
sumber
0

Dalam kasus saya, saya tidak bisa membuat proyek untuk dibangun dengan kelas yang ditentukan dalam folder App_Code.

Tidak dapat meniru skenario dengan tepat untuk berkomentar, tetapi harus menutup dan membuka kembali studio visual agar Intellisense dapat bekerja sama, setuju ...

Saya perhatikan bahwa ketika kelas di folder App_Code diatur ke 'Kompilasi' alih-alih 'Konten' (klik kanan) bahwa kesalahan berasal dari versi kedua kelas ... Lihat ke kiri-sebagian besar 3 dari 3 bidang antara panel kode dan tab. Yang 'lain' disebut sesuatu di sepanjang baris 10_App_Code atau serupa.

Untuk memperbaiki masalah ini, saya mengganti nama folder dari App_Code ke Code, secara eksplisit mengatur ruang nama pada kelas dan mengatur semua kelas menjadi 'Kompilasi'

hngr18
sumber