¿El Server.MapPath se comporta de manera diferente en la máquina y la máquina servidor local?

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

  •  01-10-2019
  •  | 
  •  

Pregunta

He tenido una pesadilla real con Server.MapPath(). Cuando llamo Server.MapPath("~") en mi aplicación que se ejecuta en el servidor de desarrollo de ASP.NET vuelve directorio raíz que termina en una barra inclinada hacia atrás como f:\projects\app1\, pero yo lo llamo en la versión publicada, instalado en IIS, vuelve directorio raíz sin ningún tipo de barra invertida como c:\inetpub\wwwroot\app1. ¿Por qué sucede esto? ¿Cómo podría evitar?

Lo hice 2 escenarios en una misma máquina:. Windows Server 2008 R2 x64, x64 Visual Studio 2010, IIS 7

ACTUALIZACIÓN:

¿Por qué me importa eso? Ineed que he escrito un proveedor de mapas de sitio personalizado basado en la estructura de archivos / carpetas. Extrae lista de archivos / carpetas de "~" directorio raíz, sección de directorio raíz reemplaza con Server.MapPath("~") el fin de generar el URL de archivos .aspx para su uso en el control Menu ASP.NET. Creo siguiente código explica lo que estoy haciendo:

    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
    }
¿Fue útil?

Solución

Podría ser de al configurar el directorio virtual dentro de IIS, en función de si ha utilizado una barra final cuando su puesta en marcha.

Pero, ¿realmente importa? ¿Por qué incluso preocuparse por lo Server.MapPath("~") retornos? No me puedo imaginar alguna vez tendría que utilizar así como así. Mucho más probable es cuando realmente se necesita un camino a algo dentro de su aplicación:

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

Además, cada vez que se acumulan las trayectorias, se debe tratar de entrar en el hábito de usar Path.Combine , debido a que no es necesario que preocuparse de barra final, en ese caso:

string fullPath = Path.Combine(Server.MapPath("~"), @"Something\Foo.txt");
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top