私は本当の悪夢を見ましたServer.MapPath()
。ASP.NET Development Server で実行されているアプリケーションを呼び出すServer.MapPath("~")
と、 のようなバック スラッシュで終わるルート ディレクトリが返さf:\projects\app1\
れますが、IIS にインストールされた公開バージョンで呼び出すと、 のようなバック スラッシュなしでルート ディレクトリが返されますc:\inetpub\wwwroot\app1
。なぜこれが起こるのですか?どうすれば回避できますか?
同じマシンで 2 つのシナリオを実行しました: Windows Server 2008 R2 x64、Visual Studio 2010 x64、IIS 7。
アップデート:
なぜ私はそれを気にするのですか?ファイル/フォルダー構造に基づいてカスタム サイト マップ プロバイダーを作成しました。ルート ディレクトリのファイル/フォルダのリストを抽出"~"
し、ルート ディレクトリ セクションを置き換えて、ASP.NETコントロールで使用するファイルのServer.MapPath("~")
URL を生成します。次のコードは、私がやっていることを説明していると思います:.aspx
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
}