У меня был настоящий кошмар с Server.MapPath()
. Когда я вызываю Server.MapPath("~")
в моем приложении, работающем на ASP.NET Development Server, он возвращает корневой каталог, который заканчивается обратной косой чертой, как f:\projects\app1\
, но я вызываю его в опубликованной версии, установленной в IIS, он возвращает корневой каталог без любая обратная косая черта, как c:\inetpub\wwwroot\app1
. Почему это происходит? Как можно избежать?
Я выполнил 2 сценария на одной машине: Windows Server 2008 R2 x64, Visual Studio 2010 x64, IIS 7.
UPDATE:
Почему я забочусь об этом? Ineed Я написал собственный поставщик карты сайта, основанный на структуре файлов / папок. Он извлекает список файлов / папок корневого каталога "~"
, заменяет раздел корневого каталога на Server.MapPath("~")
, чтобы создать URL-адрес файлов .aspx
для использования в элементе управления ASP.NET Menu
. Я думаю, что следующий код объясняет, что я делаю:
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
}