في ASP.NET كيف يمكنك الحصول على مسار الملف الفعلي عندما يكون HttpContext.Current NULL؟

StackOverflow https://stackoverflow.com/questions/109280

سؤال

أنا أعمل مع برنامج جدولة DotNetNuke لجدولة المهام وأتطلع للحصول على مسار الملف الفعلي لقالب البريد الإلكتروني الذي قمت بإنشائه.المشكلة هي أن HttpContext فارغ لأن المهمة المجدولة موجودة في موضوع مختلف ولا يوجد طلب http.كيف يمكنك الحصول على المسار الفعلي للملف؟

هل كانت مفيدة؟

المحلول

System.Web.Hosting.HostingEnvironment.MapPath هو ما تبحث عنه.عندما تستخدم كائنات الخادم أو HttpContext.Current، تحقق أولاً لمعرفة ما إذا كان ذلك صحيحًا أم لا بيئة الاستضافة لديه ما تحتاجه.

نصائح أخرى

هناك العديد من الطرق للقيام بذلك، وأنا شخصيًا أتغلب عليها عن طريق تخزين معلومات المسار كخيار تكوين لوحداتي، إنها ليست أنيقة، ولكنها تعمل وتعمل في كل مرة.

أعتقد أن جو برينكمان لديه مدونة في مكان ما حول كيفية إنشاء نص HTTPContext جديد للاستخدام داخل المجدول.

نظرًا لأن هذه العملية خارج النطاق حقًا فيما يتعلق بموقع الويب، فربما يمكنك فقط وضع المسار في ملف التكوين.

قد لا تكون الفكرة الأفضل، لكنها بديل.

ماذا يقول this.GetType().Assembly.Location؟

هل يمكنك إلقاء نظرة على مسارات التجميع و CodeBase مثل هذا:

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

هذا النوع من الأشياء لا يعمل دائمًا، لذا ما أوصي به هو كتابة سجل يحتوي على مجموعة من البيانات حول التجميع، لمعرفة ما الذي يعمل في هذا الموقع.هذا ما كان علي فعله للحصول على شيء مماثل عندما كنت أقوم بإنشاء مكون COM لاستضافته في AppCenter.لقد استخدمت هذا "للحصول على" ما يجب أن يكون عليه "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 ...
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top