App_Code में रहने वाली कक्षाएं सुलभ नहीं हैं


197

मैंने ASP.NET में एक वेबसाइट बनाई है और एक वर्ग बनाया है और इसे App_Code फ़ोल्डर के अंदर रखा है। हालाँकि मैं इसे अपने अन्य पृष्ठों से एक्सेस नहीं कर सकता। क्या इसे अनुमति देने के लिए कुछ कॉन्फ़िगर करने की आवश्यकता है? मैंने इसे पिछली परियोजनाओं में काम किया है, लेकिन किसी एक में नहीं।

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

1
मुझे लगता है कि आप अपने वेब पृष्ठों में नाम स्थान सहित हैं?
एलेक्स Czarto

1
संभावित डुप्लिकेट - stackoverflow.com/questions/409070/…
vapcguy

जवाबों:


637

फ़ोल्डर .csमें फ़ाइल पर राइट क्लिक करें App_Codeऔर इसके गुणों की जांच करें।

सुनिश्चित करें कि "बिल्ड एक्शन" "संकलन" पर सेट है।


10
आप इसे डिफ़ॉल्ट बिल्ड एक्शन के रूप में कैसे सेट कर सकते हैं? या क्या मुझे App_Code फ़ोल्डर की प्रत्येक फ़ाइल के लिए ऐसा करना होगा?
मलाकी

3
मैं विजुअल स्टूडियो 2012 में ऐसा क्यों नहीं कर सकता ??
RSK

4
यह VS2012 में एक बग प्रतीत होता है। मुझे भी होता है।
जेम्स नेल

2
उन लोगों के लिए जो अधिक विवरण चाहते हैं, आप यहां पा सकते हैं: how-to-code-net.blogspot.ro/2014/04/…
एलेक्सा एड्रियन

3
Yay ने मेरे Visual Studio प्रोजेक्ट में 142 त्रुटियों को हल किया, इस समाधान को साझा करने के लिए बहुत बहुत धन्यवाद: -]
माइकल जी। कर्मकार

14

इसे उन अन्य फ़ाइलों के शीर्ष पर रखें जहाँ आप कक्षा में पहुँचना चाहते हैं:

using CLIck10.App_Code;

या इस तरह से अन्य फ़ाइलों से वर्ग का उपयोग:

CLIck10.App_Code.Glob

सुनिश्चित नहीं है कि यह आपका मुद्दा है या नहीं, लेकिन यदि आप C # में नए थे, तो यह एक आसान तरीका है, जिससे आप फंस सकते हैं।

अद्यतन: मैंने हाल ही में पाया है कि अगर मैं किसी प्रोजेक्ट में एक App_Code फ़ोल्डर जोड़ता हूं, तो मुझे इस "विशेष" फ़ोल्डर को ठीक से पहचानने के लिए विज़ुअल स्टूडियो को बंद / फिर से खोलना होगा।


1
यह देखने के लिए बिल्ड एक्शन के साथ कुछ करना था - फेलबॉय के जवाब ने समस्या को हल किया। वैसे भी जवाब देने के लिए धन्यवाद :)
मालाची

जैसा कि मैंने App_Code फ़ोल्डर में वर्ग में एक नाम स्थान जोड़ा है, अच्छा काम किया है।
mashtheweb

हमें उस तरह के नामस्थान को क्यों शामिल करना है? क्यों intelliSense फ़ोल्डर का नाम निर्दिष्ट किए बिना उस वर्ग तक पहुंचने में सक्षम नहीं है?
एल्हम कोहेस्टानी

10

उस पृष्ठ पर जाएं जहां से आप App_code क्लास एक्सेस करना चाहते हैं, और उसके बाद app_code class के नामस्थान जोड़ें। आपको usingनिम्नानुसार एक बयान देने की आवश्यकता है:

using WebApplication3.App_Code;

उसके बाद, आपको ऐप_कोड क्लास प्रॉपर्टी पर जाना होगा और 'बिल्ड एक्शन ’को ile कंपाइल’ पर सेट करना होगा।


4

सुनिश्चित करें कि आप अपने पृष्ठों के समान नामस्थान का उपयोग कर रहे हैं


1
लेकिन जब यह APP_CODE में क्यों है? मुझे लगा कि PUBLIC कक्षाओं के साथ वहाँ कुछ भी पूरे समाधान के दौरान स्वतः ही उजागर हो जाना चाहिए !?
Fandango68

4

मुझे अभी तक यह पता नहीं चला है कि ऐसा क्यों होता है, लेकिन मेरी कक्षाएं मेरे App_Codeफ़ोल्डर में थीं जो एक-दूसरे को कॉल कर रहे थे, और जब मैंने .NET 4.5.2 प्रोजेक्ट बनाया, तो यह करने में ठीक था, लेकिन फिर मुझे समाप्त करना पड़ा इसे 4.0 पर वापस लाएं क्योंकि लक्ष्य सर्वर अपग्रेड नहीं हो रहा था। जब मुझे यह समस्या (ठीक करने के बाद) मिलीlangversion 6 से 5 तक मेरी web.config ... एक और कहानी) ...।

मेरे तरीकों में से एक में त्रुटि रही:

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

मेरी सभी कक्षाएं पहले से ही उनके गुणों में "संकलित" करने के लिए सेट थीं, जैसा कि यहां स्वीकृत उत्तर पर सुझाव दिया गया है, और प्रत्येक के पास एक सामान्य नामस्थान था जो समान था, और प्रत्येक using MyNamespace;में प्रत्येक कक्षा के शीर्ष पर था ।

मैंने पाया कि अगर मैंने सिर्फ उन अपमानजनक वर्गों को स्थानांतरित कर दिया, जिनमें "एप_कोड" के अलावा मानक फ़ोल्डर को एक-दूसरे को कॉल करने की विधि थी, तो उन्होंने इस संघर्ष को रोक दिया।

नोट : यदि आप "AppCode" नामक एक मानक फ़ोल्डर बनाते हैं, तो अपनी कक्षाओं को इसमें स्थानांतरित करें, "App_Code" फ़ोल्डर हटाएं, फिर "AppCode" का नाम बदलकर "App_Code" करें, आपकी समस्याएं वापस आ जाएंगी। इससे कोई फर्क नहीं पड़ता कि आप "App_Code" बनाने के लिए "नया फ़ोल्डर" या "एएसपी .NET फ़ोल्डर जोड़ें" विकल्प का उपयोग करते हैं - यह नाम पर कुंजी लगता है।

शायद यह सिर्फ एक .NET 4.0 (और संभवतः पहले का) मुद्दा है ... मैं 4.5.2 में ठीक था वापस आने से पहले!


0

मैंने फ़ाइलों को एक अलग क्लास लाइब्रेरी प्रोजेक्ट में स्थानांतरित करना आसान पाया और फिर उस प्रोजेक्ट को वेब प्रोजेक्ट में रेफर किया usingऔर फाइल के सेक्शन में नेमस्पेस लागू किया । किसी कारण से अन्य समाधान मेरे लिए काम नहीं कर रहे थे, लेकिन इस काम ने चारों ओर किया।


0

मेरे मामले में, मुझे App_Code फ़ोल्डर में परिभाषित कक्षाओं के साथ निर्माण करने के लिए एक परियोजना नहीं मिल सकती है।

परिदृश्य को टिप्पणी करने के लिए ठीक-ठीक दोहराया नहीं जा सकता है, लेकिन सहमत होने के लिए असहिष्णुता के लिए दृश्य स्टूडियो को बंद और फिर से खोलना पड़ा ...

मैंने देखा कि जब App_Code फ़ोल्डर में एक वर्ग 'सामग्री' के बजाय 'संकलित' पर सेट होता है (राइट-क्लिक करें) कि कक्षा के दूसरे संस्करण से त्रुटियां आ रही थीं ... सबसे बाईं ओर देखें कोड फलक और टैब के बीच 3 क्षेत्रों में से 3। 'अन्य' को 10_App_Code या समान की तर्ज पर कुछ कहा जाता था।

समस्या को सुधारने के लिए, मैंने फ़ोल्डर का नाम बदलकर App_Code से कोड कर दिया है, कक्षाओं में स्पष्ट रूप से नामस्थान सेट कर दिए हैं और सभी कक्षाओं को 'संकलन' में सेट कर दिया है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.