2012-03-07 69 views
5

Mới sử dụng ASP.NET Tôi không chắc chắn về giải pháp tốt nhất cho vấn đề của mình. Tôi có một dòng mã như:Đường dẫn tương đối trong mã ứng dụng ASP.NET phía sau

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

xDoc là XmlDocument. Trong dự án của tôi, ở cấp cao nhất có một thư mục có tên là Mẫu. Khi tôi chạy dự án ở chế độ gỡ lỗi, tôi nhận được một DirectoryNotFoundException và dường như nó đang tìm kiếm thư mục Templates trong C:\Program Files\Common Files\Microsoft Shared\DevServer\10.0\Templates.

Cách chính xác có thể trỏ đến thư mục đó mà không cần mã hóa cứng?

+6

Bạn đã xem 'Server.MapPath' chưa? – asawyer

Trả lời

15

Server.MapPath - trả về đường dẫn của đường dẫn tương đối; ~ đảm bảo đường dẫn tương đối có liên quan đến ứng dụng gốc

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

Cảm ơn. Bạn và @asawyer đang ở trên. Đã giải quyết được sự cố. – kmarks2

+0

Vì vậy, đơn giản nhưng vẫn chính xác những gì tôi cần. Điều này rất hữu ích. Cảm ơn –

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

có thể hoạt động?

1

Sử dụng dấu ngã "~" trong đường dẫn của bạn.

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

Dấu ngã biểu thị thư mục cơ sở cho ứng dụng của bạn.

+0

Thật không may đó là những gì tôi đã thử đầu tiên, với cùng một vấn đề. Đó là lẻ vì ~/hoạt động tốt trong các trang aspx. – kmarks2

+0

Vâng - xDoc sẽ không biết nó đang được sử dụng trong ngữ cảnh của một ứng dụng ASP.NET. Kiểm tra Server.MapPath. – n8wrl

7

tôi có lẽ sẽ sử dụng

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

Điều này làm cho XML đang tải độc lập của bạn của ASP.NET. Nếu bạn đã tái sử dụng nó trong, ví dụ, một ứng dụng Windows Forms, điều này sẽ cung cấp cho một đường dẫn liên quan đến thư mục có chứa các hình thức Windows vô cùng.

3

Hãy thử:

xDoc.Load(Server.MapPath("~/Templates/template1.cfg")); 
Các vấn đề liên quan