2012-03-07 15 views
5

ASP.NETを初めて使用しているため、私の問題に対する最良の解決策がわかりません。ASP.NETアプリケーションコード内の相対パス

xDoc.Load("Templates/template1.cfg"); 

XDOCがXmlDocumentです:私のようなコードの行を持っています。私のプロジェクトでは、トップレベルにTemplatesというディレクトリがあります。私がデバッグモードでプロジェクトを実行すると、DirectoryNotFoundExceptionが表示され、明らかにテンプレートディレクトリがC:\Program Files\Common Files\Microsoft Shared\DevServer\10.0\Templatesにあります。

ハードコーディングを行わずにそのディレクトリを正しくポイントするにはどうすればよいですか?

+6

に関連している保証しますServer.MapPath' 'で見たことがありますか? – asawyer

答えて

15

Server.MapPath - は相対パスのパスを返します。 ~は、相対パスがアプリケーションのルート

xDoc.Load(Server.MapPath("~/Templates/template.cfg")); 
+2

ありがとうございます。あなたと@asawyerにはスポットがあります。問題が解決しました。 – kmarks2

+0

シンプルだけどまだ正確に必要なもの。これは非常に役に立ちます。ありがとう –

3
xDoc.Load("~/Templates/template.cfg"); 

が機能しますか?

1

パスにチルダ "〜"を使用します。

xDoc.Load("~/Templates/template1.cfg"); 

チルダは、アプリケーションのベースディレクトリを表します。

+0

残念ながら、それは私が最初に試したのと同じ問題です。 〜/ aspxページで正常に動作するため、どちらが奇妙です。 – kmarks2

+0

ええ - xDocは、ASP.NETアプリケーションのコンテキストでxDocが使用されていることを認識しません。 Server.MapPathを確認してください。 – n8wrl

7

私はおそらくこれは、ASP.NETのあなたのXMLの読み込みコードをそれぞれ独立させることができ

xDoc.Load(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Templates/Template.cfg")); 

を使用します。たとえば、Windows Formsアプリケーションで再利用する場合は、Windowsフォームを含むディレクトリに相対的なパスが与えられます。

3

試行:

xDoc.Load(Server.MapPath("~/Templates/template1.cfg"));