2010-07-01 32 views
4

我和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 
    } 

回答

6

這可能是從當您設置虛擬目錄的IIS裏面,這取決於你是否在設置時使用的斜線。

但它真的很重要嗎?爲什麼你會關心Server.MapPath("~")返回什麼?我無法想象你會像這樣使用它。更可能的是,當你真正需要的東西路徑內您的應用程序:

Server.MapPath("~/Something/Foo.txt"); 

此外,只要你建立的路徑,你應該嘗試進入使用Path.Combine的習慣,因爲你不」你需要擔心後面的斜線:

string fullPath = Path.Combine(Server.MapPath("~"), @"Something\Foo.txt"); 
+0

+1要做出確切的一些觀點。可能來自配置,應該不是真的重要。 – 2010-07-01 06:02:03

+0

+1好主意!我應該記住自己,儘管我從來沒有遇到任何問題。 – user29964 2010-07-01 06:05:19

+0

看到我的更新爲什麼我關心它 – 2010-07-01 06:26:09

相關問題