Klasy rezydujące w App_Code nie są dostępne

197

Utworzyłem stronę internetową w ASP.NET i stworzyłem klasę i umieściłem ją w folderze App_Code. Nie mogę jednak uzyskać dostępu do tego z innych stron. Czy trzeba coś skonfigurować, aby na to pozwolić? Sprawiłem, że działało w poprzednich projektach, ale jakoś nie w tym.

namespace CLIck10.App_Code
{
    public static class Glob
    {
        ...
    }
}
Malachiasz
źródło
1
Zakładam, że umieszczasz przestrzeń nazw na swoich stronach internetowych?
Alex Czarto,
1
Możliwy duplikat - stackoverflow.com/questions/409070/…
vapcguy

Odpowiedzi:

637

Kliknij .csplik prawym przyciskiem myszy w App_Codefolderze i sprawdź jego właściwości.

Upewnij się, że „Działanie kompilacji” jest ustawione na „Kompiluj”.

StevenMcD
źródło
10
Jak ustawić to jako domyślną akcję kompilacji? czy muszę to zrobić dla każdego pliku w folderze App_Code?
Malachi
3
Dlaczego nie mogę tego zrobić w programie Visual Studio 2012?
RSK
4
To wydaje się być błędem w VS2012. Zdarza mi się również.
James Nail
2
dla tych, którzy chcą więcej szczegółów, można znaleźć na stronie: how-to-code-net.blogspot.ro/2014/04/…
Alexa Adrian
3
Tak, to rozwiązało 142 błędy w moim projekcie Visual Studio, wielkie dzięki za udostępnienie tego rozwiązania: -]
Michael G. Workman
14

Umieść to u góry innych plików, w których chcesz uzyskać dostęp do klasy:

using CLIck10.App_Code;

LUB uzyskaj dostęp do klasy z innych plików takich jak ten:

CLIck10.App_Code.Glob

Nie jestem pewien, czy to jest twój problem, czy nie, ale jeśli byłeś nowy w języku C #, to jest łatwe do zrobienia.

Aktualizacja: Niedawno odkryłem, że jeśli dodam folder App_Code do projektu, muszę zamknąć / ponownie otworzyć program Visual Studio, aby poprawnie rozpoznać ten „specjalny” folder.

AaronLS
źródło
1
Wyglądało to na działanie kompilacji - odpowiedź FailBoy rozwiązała problem. Dzięki za odpowiedź i tak :)
Malachi
Fajny, który działał, gdy dodałem przestrzeń nazw do klasy w folderze App_Code.
mashtheweb
Dlaczego musimy uwzględnić taką przestrzeń nazw? Dlaczego intelliSense nie może uzyskać dostępu do tej klasy bez podania nazwy folderu?
Elham Kohestani
10

Przejdź do strony, z której chcesz uzyskać dostęp do klasy App_code, a następnie dodaj przestrzeń nazw klasy app_code. Musisz dostarczyć następujące usingoświadczenie:

using WebApplication3.App_Code;

Następnie musisz przejść do właściwości klasy app_code i ustawić opcję „Kompiluj akcję” na „Kompiluj”.

użytkownik3363647
źródło
4

upewnij się, że używasz tej samej przestrzeni nazw co strony


źródło
1
Ale dlaczego, kiedy jest w APP_CODE? Myślałem, że cokolwiek tam z klasami PUBLIC powinno zostać automatycznie ujawnione w całym rozwiązaniu !?
Fandango68,
4

Nie zastanawiałem się jeszcze, dlaczego tak się dzieje, ale miałem w App_Codefolderze klasy, które wywoływały w sobie metody i świetnie sobie z tym radziłem, gdy budowałem projekt .NET 4.5.2, ale potem musiałem przywróć go do 4.0, ponieważ serwer docelowy nie był aktualizowany. Właśnie wtedy znalazłem ten problem (po naprawieniu langversionw moim pliku web.config od 6 do 5 ... innej historii) ....

W jednej z moich metod występował błąd:

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

Wszystkie moje klasy były już ustawione na „Kompiluj” w swoich właściwościach, jak sugerowano w przyjętej odpowiedzi tutaj, i każda z nich miała wspólną przestrzeń nazw, która była taka sama, a każda z nich miała using MyNamespace;na górze każdej klasy.

Odkryłem, że jeśli właśnie przeniosłem obraźliwe klasy, które musiały na siebie wywoływać metody, do innego, standardowego folderu o nazwie innej niż „App_Code”, przestały mieć problem z konfliktem.

Uwaga : jeśli utworzysz standardowy folder o nazwie „AppCode”, przenieś do niego swoje klasy, usuń folder „App_Code”, a następnie zmień nazwę „AppCode” na „App_Code”, twoje problemy powrócą. Nie ma znaczenia, czy użyjesz opcji „Nowy folder” lub „Dodaj folder ASP .NET”, aby utworzyć „Kod_aplikacji” - wydaje się, że wpisuje nazwę.

Być może jest to tylko problem .NET 4.0 (i być może wcześniej) ... W wersji 4.5.2 czułem się dobrze przed przywróceniem!

vapcguy
źródło
0

Odkryłem, że łatwiej jest przenieść pliki do osobnego projektu biblioteki klas, a następnie odwołać się do tego projektu w projekcie sieciowym i zastosować przestrzeń nazw w usingsekcji pliku. Z jakiegoś powodu inne rozwiązania nie działały dla mnie, ale ta poprawka zadziałała.

Zarepheth
źródło
0

W moim przypadku nie udało mi się zbudować projektu z klasami zdefiniowanymi w folderze App_Code.

Nie mogę powtórzyć scenariusza, aby skomentować, ale musiał zamknąć i ponownie otworzyć studio wizualne, aby intellisense do współpracy zgodziło się ...

Zauważyłem, że gdy klasa w folderze App_Code jest ustawiona na „Kompiluj” zamiast „Treść” (kliknij ją prawym przyciskiem myszy), błędy pochodzą z drugiej wersji klasy ... Spójrz na lewą stronę 3 z 3 pól między okienkiem kodu a kartą. Ten „inny” został nazwany czymś podobnym do 10_App_Code lub podobnym.

Aby rozwiązać problem, zmieniłem nazwę folderu z App_Code na Code, jawnie ustawiłem przestrzenie nazw w klasach i ustawiłem wszystkie klasy na „Kompiluj”

hngr18
źródło