我和Server.MapPath()
發生了一場真正的噩夢。當我在ASP.NET Development Server中運行的應用程序中調用Server.MapPath("~")
時,它返回的根目錄以f:\projects\app1\
之類的反斜槓結尾,但我將其稱爲發佈版本,安裝在IIS中,它返回沒有任何反斜槓的根目錄c:\inetpub\wwwroot\app1
。爲什麼會發生?怎麼可能避免?Server.MapPath在本地機器和服務器機器中的行爲有所不同嗎?
我做了2種情景中同一臺機器上:在Windows Server 2008 R2 x64上,Visual Studio 2010的64位,IIS 7
UPDATE:
爲什麼我關心它? Ineed我寫了一個基於文件/文件夾結構的自定義站點地圖提供程序。它提取根目錄"~"
的文件/文件夾列表,用Server.MapPath("~")
替換根目錄部分,以生成用於ASP.NET Menu
控件的.aspx
文件的URL。我想下面的代碼說明我在做什麼:
string mainRoot = HttpContext.Current.Server.MapPath("~");
DirectoryInfo di = new DirectoryInfo(mainRoot);
//added to solve this problem with Server.MapPath
if (!mainRoot.EndsWith(@"\"))
mainRoot += @"\";
FileInfo[] files = di.GetFiles("*.aspx");
foreach (FileInfo item in files)
{
string path = item.FullName.Replace(mainRoot, "~/").Replace(@"\", "/");
//do more here
}
+1要做出確切的一些觀點。可能來自配置,應該不是真的重要。 – 2010-07-01 06:02:03
+1好主意!我應該記住自己,儘管我從來沒有遇到任何問題。 – user29964 2010-07-01 06:05:19
看到我的更新爲什麼我關心它 – 2010-07-01 06:26:09