2013-04-15 10 views
9

के अंदर Server.MapPath का उपयोग कैसे कर सकता हूं मेरे पास एक वेब एप्लिकेशन है जिसमें कई क्लास लाइब्रेरी प्रोजेक्ट हैं। नीचे कुछ उदाहरण कोड।मैं क्लास लाइब्रेरी प्रोजेक्ट

public static class LenderBL 
{ 
    static string LenderXml { get { return "MyPathHere"; } } 

    public static LenderColl GetLenders() 
    { 
     var serializer = new XmlSerializer(typeof(LenderColl)); 

     using (XmlReader reader = XmlReader.Create(LenderXml)) 
     { 
      return (LenderColl)serializer.Deserialize(reader); 
     } 
    } 
} 

मैं सामान्य रूप से संपत्ति LenderXml के लिए पथ पाने के लिए Server.MapPath का प्रयोग करेंगे, लेकिन जब मैं एक वर्ग पुस्तकालय में इसका इस्तेमाल वर्ग पुस्तकालय परियोजना की कि माता पिता समाधान की राह देता है, नहीं।

क्या कक्षा मुक्त परियोजना के लिए रास्ता प्राप्त करने का कोई तरीका है?

अग्रिम धन्यवाद।

उत्तर

28
var Mappingpath = System.Web.HttpContext.Current.Server.MapPath("pagename.aspx"); 

इसकी मदद करें।

+1

और संदर्भ System.Web की जरूरत है। –

+2

सिस्टम। वेब लाइब्रेरी को संदर्भित करने की आवश्यकता होगी, न केवल निर्दिष्ट। –

+1

@ फ्रीलांसर - क्षमा करें, शायद मैं अपने प्रश्न में स्पष्ट नहीं था। मैं क्लास लाइब्रेरी में Server.MapPath तक पहुंच सकता हूं, यह कैसे पेरेंट प्रोजेक्ट के लिए पथ लौटाता है। मैं कक्षा पुस्तकालय परियोजना के लिए एक रास्ता पाने के लिए देख रहा हूँ। – dotnetnoob

3

Server.MapPath हमेशा वेब रूट के संदर्भ में चलाएगा। तो, आपके मामले में वेब रूट मूल वेब प्रोजेक्ट है। जबकि आपकी कक्षा पुस्तकालय (असेंबली) अलग-अलग परियोजनाओं की तरह दिखते हैं, रनटाइम पर, वे सभी वेब प्रोजेक्ट प्रक्रिया में होस्ट किए जाते हैं। इसलिए, कक्षा पुस्तकालयों में संसाधनों के बारे में विचार करने के लिए कुछ चीजें हैं।

सबसे पहले, विचार करें कि कक्षा पुस्तकालय में संसाधनों को रखने के लिए यह समझ में आता है या नहीं। शायद, आपके पास वेब प्रोजेक्ट में xml फ़ाइल होनी चाहिए और इसे कक्षा पुस्तकालय में संदर्भित करना चाहिए। यह एमवीसी परियोजनाओं को वेब प्रोजेक्ट में अपने विचारों को कैसे बनाए रखने के लिए समतुल्य होगा। हालांकि, मुझे लगता है कि आप ऐसा नहीं कर सकते हैं।

दूसरा, आप अपने xml फ़ाइल के निर्माण गुणों को बदल सकते हैं। यदि आप अपनी गुणों में फ़ाइल को content और copy-always पर बदलते हैं। फाइल बिन निर्देशिका में कॉपी होगी। फिर Server.MapPath काम करना चाहिए क्योंकि फ़ाइल पहुंच योग्य होगी।

तीसरा, आप संसाधन को embedded resource बना सकते हैं और फिर इसे कोड में संदर्भित कर सकते हैं। यह सभी संसाधनों को एक निर्मित असेंबली में स्थानीय रखने का एक तरीका है।

उम्मीद है कि इससे मदद मिलती है।

+0

यह मामूली में सवाल का जवाब नहीं देता है। –

+2

@ ग्रांट थॉमस ओपी का कहना है कि 'सर्वर.मैपपाथ' काम कर रहा है, लेकिन मूल परियोजना का मार्ग लौटाता है। मैं केवल मूल परियोजना का अनुमान लगा सकता हूं वेब प्रोजेक्ट होस्टिंग। ये तीन विकल्प संदर्भित लाइब्रेरी में कोड से XML फ़ाइल सामग्री को संदर्भित करने के सभी तरीके हैं। तो जिस तरह से मैंने इसे पढ़ा, यह एक बिल्कुल उचित जवाब है। –

10

मैं समझ सकता के रूप में आप वर्तमान विधानसभा स्थान

static public string CurrentAssemblyDirectory() 
{ 
    string codeBase = Assembly.GetExecutingAssembly().CodeBase; 
    UriBuilder uri = new UriBuilder(codeBase); 
    string path = Uri.UnescapeDataString(uri.Path); 
    return Path.GetDirectoryName(path); 
} 
+1

यह एकमात्र समाधान है जो मैंने पाया है जो वास्तव में कक्षा पुस्तकालय और वेब ऐप दोनों में काम करता है। धन्यवाद –

संबंधित मुद्दे