Server.Mappathはローカルマシンとサーバーマシンで異なって動作しますか?
-
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");