我是LINQtoXML的新手。我想使用XElement.Load(“”)方法。但是编译器找不到我的文件。你能帮我写一下XML文件的正确路径吗?
请注意:我在App_Code中定义了一个类,我想在其中一个方法和位于App_Data中的XML文件中使用XML文件数据。
settings = XElement.Load("App_Data/AppSettings.xml");
我无法使用Request.ApplicationPath
和Page.MapPath()
或Server.MapPath()
获取文件的物理路径,因为我不在类继承的表单页类中。
简要错误消息:
无法找到路径' C:\ Program Files \ Microsoft Visual Studio 9.0 \ Common7 \ IDE \ App_Data \ AppSettings.xml '的一部分。
<登记/>
您看到编译的路径与我的项目路径完全不同(G:\ MyProjects \ ASP.net Projects \ VistaComputer \ Website \ App_Data \ AppSettings.xml)
完整错误消息在这里:
System.IO.DirectoryNotFoundException was unhandled by user code
Message="Could not find a part of the path 'C:\\Program Files\\Microsoft Visual Studio 9.0\\Common7\\IDE\\App_Data\\AppSettings.xml'."
Source="mscorlib"
StackTrace:
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize)
at System.Xml.XmlDownloadManager.GetStream(Uri uri, ICredentials credentials)
at System.Xml.XmlUrlResolver.GetEntity(Uri absoluteUri, String role, Type ofObjectToReturn)
at System.Xml.XmlReader.Create(String inputUri, XmlReaderSettings settings, XmlParserContext inputContext)
at System.Xml.XmlReader.Create(String inputUri, XmlReaderSettings settings)
at System.Xml.Linq.XElement.Load(String uri, LoadOptions options)
at System.Xml.Linq.XElement.Load(String uri)
at ProductActions.Add(Int32 catId, String title, String price, String website, String shortDesc, String fullDesc, Boolean active, Boolean editorPick, String fileName, Stream image) in g:\MyProjects\ASP.net Projects\VistaComputer\Website\App_Code\ProductActions.cs:line 67
at CMS_Products_Operations.Button1_Click(Object sender, EventArgs e) in g:\MyProjects\ASP.net Projects\VistaComputer\Website\CMS\Products\Operations.aspx.cs:line 72
at System.Web.UI.WebControls.Button.OnClick(EventArgs e)
at System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)
at System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
InnerException:
答案 0 :(得分:12)
您可以尝试HostingEnvironment.ApplicationPhysicalPath静态属性(假设这在ASP.NET应用程序中使用):
string filePath = Path.Combine(
HostingEnvironment.ApplicationPhysicalPath,
@"App_Data\AppSettings.xml"
);
我不同,恕我直言更好的方法是编写一个可重复使用的函数,它将文件名作为参数,并在一天结束时从某些WebForm调用,您可以访问Server.MapPath
。这样做的好处是该函数不再依赖于ASP.NET引擎,并且可以在其他文件名将以不同方式计算的应用程序中重用。所以基本上把问题分开了: