2011-07-06 102 views
6

我有一個ASP.NET MVC項目,它有一個名爲emails的子文件夾。這包含我的電子郵件模板的HTM文件。在網站的某些地方,我有一個控制器,需要加載其中一個模板並將其作爲電子郵件發送。在文件系統中獲取ASP.NET MVC站點的路徑

我想要做的是使用反射來獲取當前正在執行的程序集的路徑,但它不像我期望的那樣工作。路徑我找回的是:

var directory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 

「C:\ WINDOWS \ Microsoft.NET \ Framework64 \ v4.0.30319 \臨時 ASP.NET爾斯\ SSL \ 1da130c4 \ f8e7810e \裝配\ DL3 \ 5f253aca \ 1a71f123_e83bcc01 \電子郵件\ ProductAccountConfirmation.htm」

我覺得這很奇怪,因爲該網站正在通過IIS的Visual Studio主辦。我原以爲這會給我在dev中的項目文件夾中的dll位置以及生產中的IIS部署文件夾。

回答

9

你在找什麼是Server.MapPath(),它會給你正在執行的應用程序的路徑。

1

使用ASP.Net,副本由程序集組成,它是在運行時使用的副本。項目文件夾中的dll只是模板。

爲了什麼目的,你需要這個目錄?可能有其他方法來實現你的目標。

1

你可以讓你的應用程序的根路徑:

@HostingEnvironment.ApplicationPhysicalPath 
4

因此,讓我們假設你有一個名爲template1.html文件在你的電子郵件子文件夾中。該代碼應該爲您提供該HTML文件的完整路徑。

HttpContext.Current.Server.MapPath("/") + "\\emails\\template1.html"; 
3
AppDomain.CurrentDomain.BaseDirectory 
+0

當你回答後,請補充說明或詳細的鏈路。 – AFract

+0

只是完美的,甚至適用於IIS下的子網站。 –

相關問題