2011-10-27 6 views
0

上のC#のIISの展開「パスの一部が見つかりませんでした」。は、私は私のapplicatinからXMLファイルをロードしています生産

しかし、アプリケーションを配備した後、システムはそれを見つけることができません。
、これは誤りです:
Exception Details: System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\inetpub\wwwroot\XMLMetadata\Actions.1.xml'.

ファイルが
C:\inetpub\wwwroot\MyApp\XMLMetadata\Actions.1.xml
としないようにに展開されました:
C:\inetpub\wwwroot\XMLMetadata\Actions.1.xml

ASP .NET 4 MVCアプリケーション 私は何をしないのですか?

答えて

0

ここでは、正確なフレームワークと基本クラスが何をしているのかは分かりませんが、私はASP.NETを推測しています。その場合は、Control.ResolveUrl()をご覧ください。

次に、Load()コールの代わりに、次のようなものが必要です。

XDocument.Load(this.ResolveUrl("~/XMLMetadata\\Actions.1.xml")); 
0

私は過去にこのようなものを使用しました:

var appPath = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) + HttpContext.Current.Request.ApplicationPath; 
    if (appPath.Substring(appPath.Length - 1, 1) != "/") appPath = appPath + "/"; 
    var filePath = appPath + "XMLMetaData//Actions.1.xml"; 
+0

私はあなたの記事を読んでいるが、これはおそらく役に立たないだろう。 – Chuck

0

うーん - あなたはそれがC:\inetpub\wwwroot\MyApp\XMLMetadata\ではなくC:\inetpub\wwwroot\XMLMetadata\に展開している理由を尋ねることを意味するのですか?

エラーが発生した理由をお答えしました。

ハードコードされた場所ではなく、参考URL、つまり~\XMLMetadata\を試してみてください。

また、IISをローカルで使用して開発システムをテストするようにしてください。

0

この場合、「〜」を使用したいと思っています。 Server.MapPathで使用される「〜」は、アプリケーションのルートへの物理パスを提供します。ここで "/"はドメイン名のルートへの物理的なパスを与えます。これらのパスは、IISのセットアップ方法に応じて異なる場合があります。

XDocument.Load(HttpContext.Current.Server.MapPath("~") + "XMLMetadata\\Actions.1.xml"); 
+0

これは動作しませんが、それでも "MyApp"の仮想ディレクトリではなく、ルートの物理パスに解決されます。 –

+0

彼のウェブサイトがIISでアプリケーションとしてマークされている限り、これは正しいと思います。彼がコードを実行している場所であり、開発と生産でパスが異なっているようだから、私は前提にしています。 – ptfaulkner

0

あなたがそのレベルに解決する必要がありますので、あなたのWebアプリケーションは、仮想ディレクトリに座っているので、これは次のとおりです。ApplicationPath from MSDN

var applicationRoot = 
    HttpContext.Current.Server.MapPath(
     HttpRequest.ApplicationPath); 

備考:

Use this property to construct a URL relative to the application root from a page or Web user control that is not in the root directory. This allows pages and shared controls that exist at different levels of a directory structure to use the same code to link to resources at fixed locations in the application.

0
XDocument.Load(HttpContext.Current.Server.MapPath("XMLMetadata/Actions.1.xml"));