Server.Mappathはローカルマシンとサーバーマシンで異なって動作しますか?

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

  •  01-10-2019
  •  | 
  •  

質問

私は本当の悪夢を持っていました Server.MapPath(). 。電話するとき Server.MapPath("~") ASP.NET開発サーバーで実行されている私のアプリケーションでは、次のようにバックスラッシュで終了するルートディレクトリを返します f:\projects\app1\, 、しかし、私はそれを公開されたバージョンで呼び、IISにインストールされています、それはバックスラッシュなしでルートディレクトリを返します c:\inetpub\wwwroot\app1. 。なぜこれが起こるのですか?どうすれば避けることができますか?

Windows Server 2008 R2 X64、Visual Studio 2010 X64、IIS 7の2つのシナリオを実行しました。

アップデート:

なぜ私はそれを気にするのですか? 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
    }
役に立ちましたか?

解決

設定時にトレーリングスラッシュを使用したかどうかに応じて、IIS内に仮想ディレクトリを設定するときの可能性があります。

しかし、それは本当に重要ですか?なぜあなたは何を気にするのでしょうか Server.MapPath("~") 戻り値?あなたがそのようにそれを使用することは想像できません。あなたが実際に何かへの道を必要とするときは、はるかに高い可能性があります 中身 あなたの申請:

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

さらに、パスを構築するたびに、使用する習慣に入ろうとする必要があります Path.comBine, 、あなたはその時点でトレーニングスラッシュを心配する必要がないので:

string fullPath = Path.Combine(Server.MapPath("~"), @"Something\Foo.txt");
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top