Frage

Ich habe einen echten Alptraum mit Server.MapPath() hatte. Als ich Server.MapPath("~") in meiner Anwendung aufrufen, die in ASP.NET Development Server ausgeführt wird gibt es Root-Verzeichnis, dass endet in einem Backslash wie f:\projects\app1\, aber ich nenne es in der veröffentlichten Version, in IIS installiert, es Root-Verzeichnis ohne Backslash zurück wie c:\inetpub\wwwroot\app1. Warum geschieht das? Wie könnte vermieden werden?

Ich habe zwei Szenarien auf derselben Maschine. Windows Server 2008 R2 x64, Visual Studio 2010 x64, IIS 7

UPDATE:

Warum kümmert mich das? Ineed Ich habe geschrieben eine benutzerdefinierte Site-Map-Anbieter basierend auf Datei- / Ordnerstruktur. Es extrahiert Liste der Datei / Ordner Stammverzeichnis "~" ersetzt Stammverzeichnis Abschnitt mit Server.MapPath("~") um URL .aspx Dateien für die Verwendung in ASP.NET Menu Steuerung zu erzeugen. Ich denke folgenden Code erklärt, was ich tue:

    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
    }
War es hilfreich?

Lösung

Es könnte aus sein, wenn Sie den virtuellen Verzeichnis innerhalb von IIS einrichten, je nachdem, ob Sie einen Schrägstrich verwendet, wenn Sie es einrichten.

Aber ist es wirklich wichtig? Warum würden Sie sogar egal, was kehrt Server.MapPath("~")? Ich kann nicht vorstellen, dass Sie immer es so nur benutzen würde. Viel wahrscheinlicher ist, wenn Sie tatsächlich einen Weg zu etwas brauchen innen Ihre Anwendung:

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

Darüber hinaus, wenn Sie Pfade aufzubauen, sollten Sie versuchen, in die Gewohnheit zu erhalten, unter

scroll top