2008-09-20 19 views
7

मैं कार्य निर्धारित करने के लिए डॉटनेटनेट के शेड्यूलर के साथ काम कर रहा हूं और मैं अपने द्वारा बनाए गए ईमेल टेम्पलेट का भौतिक फ़ाइल पथ प्राप्त करना चाहता हूं। समस्या यह है कि HttpContext NULL है क्योंकि निर्धारित कार्य एक अलग थ्रेड पर है और http अनुरोध नहीं है। आप फ़ाइल के भौतिक पथ को पाने के बारे में कैसे जाएंगे?एएसपी.नेट में जब आप एचटीपीसीएन्टेक्स्ट.क्यूरेंट न्यूल होते हैं तो आपको भौतिक फ़ाइल पथ कैसे मिलता है?

उत्तर

13

System.Web.Hosting.HostingEnvironment.MapPath वह है जो आप खोज रहे हैं। जब भी आप सर्वर या HttpContext.Current ऑब्जेक्ट्स का उपयोग कर रहे हैं, तो यह देखने के लिए पहले जांचें कि HostingEnvironment में आपको क्या चाहिए।

+0

क्या होगा यदि आप किसी वेब प्रोजेक्ट के बाहर हैं लेकिन चाहते हैं आइए कहें कि किसी छवि को पकड़ने के लिए या पढ़ने के लिए अपने वेब प्रोजेक्ट के इमेज फ़ोल्डर में जाएं, एक एचटीएम फाइल की सामग्री कहें जो आपकी वेबसाइट पर साइटें हैं लेकिन आपके पास उस फाइल पर जाने के लिए बाहर उपयोग करने के लिए एक यूटिलिटी विधि है? – PositiveGuy

+0

यदि आप वेब प्रोजेक्ट के बाहर हैं, तो मुझे लगता है कि आपको वेब प्रोजेक्ट को वैसे भी ढूंढने के लिए अपने कस्टम कोड की आवश्यकता होगी। एक बार जब आप इसे प्राप्त कर लेंगे, तो आप केवल उस पथ का पालन कर सकते हैं, बिना किसी विशेष सहायक के 'मैपपाथ'। – bdukes

0

चूंकि यह प्रक्रिया वेब साइट के संबंध में वास्तव में बाहर की बैंड है, हो सकता है कि आप केवल एक कॉन्फ़िगर फ़ाइल में पथ डाल सकें।

सबसे अच्छा विचार नहीं हो सकता है, लेकिन यह एक विकल्प है।

0

यह क्या कहता है। गेट टाइप()। विधानसभा। स्थान?

+1

यह सी लौटाता है: \ विन्डोज़ \ माइक्रोसॉफ्ट.नेट \ फ्रेमवर्क \ v2.0.50727 \ अस्थायी एएसपी.नेट फ़ाइलें \ mywebsite \ 50f1a686 \ ab5b581d \ App_Code.xkcsxvg6.dll – John

0

आप विधानसभा & देख सकता हूँ इस तरह codebase पथ:

Imports System.Reflection 
Imports System.IO 
... 
Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase) 

सामान इस तरह का हमेशा काम नहीं करता, ऐसा करने से मैं क्या सिफारिश करेंगे बारे में डेटा के एक समूह के साथ एक लॉग लिख रहा है असेंबली, यह देखने के लिए कि इस स्थान में क्या काम करता है। जब मैं AppCenter में होस्ट करने के लिए COM घटक बना रहा था, तो मुझे ऐसा कुछ करने के लिए करना था। मैंने इसका उपयोग "APP_BASE" होना चाहिए, और उसे सेट करने के लिए किया, इसलिए app.config फ़ाइल ठीक से लोड हो जाएगी।

Log.Write (Assembly.GetExecutingAssembly().CodeBase) 
Log.Write (Assembly.GetExecutingAssembly().Location) 
Log.Write (Path.GetFullPath(".")) 
Log.Write (Application.StartupPath) 
... and so on, whatever you can think of ... 
1

ऐसा करने के कई तरीके हैं, मैं अपने मॉड्यूल के लिए कॉन्फ़िगरेशन विकल्प के रूप में पथ जानकारी संग्रहीत करके व्यक्तिगत रूप से इसे प्राप्त करता हूं, यह सुरुचिपूर्ण नहीं है, लेकिन यह हर बार काम करता है और काम करता है।

जो ब्रिकमैन मैं कहीं भी विश्वास करता हूं, इस बारे में एक ब्लॉग पोस्टिंग है कि शेड्यूलर के अंदर उपयोग के लिए एक नया HTTPContext कैसे बनाया जाए।

+0

भविष्य के पाठकों के लिए, जो ब्रिकमैन लेख [मूल संस्करण के लिए यहां हैं] (http://www.dnnsoftware.com/community-blog/cid/135304/the-quest-for-the-dotnetnuke-holy-grail) और [यहां एक अद्यतन संस्करण के लिए] (http://www.dnnsoftware.com/community-blog/cid/137009/new-and-improved-holy-grail)। – AaronSieb

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

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