C#学习教程:参考库中的ASP.NET相对路径分享


参考库中的ASP.NET相对路径

我有一个ASP.NET网站,我在其中从xml文件加载一些validation规则。 此xml文件名没有路径信息,在库中进行了硬编码。 (我知道硬编码的名称并不好,但是让我们在这个例子中使用它)。

当我运行网站时,ASP.NET尝试在路径中找到xml文件,其中名称为硬编码的C#文件是。 这对我来说完全令人难以置信,因为我无法理解,在运行时,我们甚至考虑将源路径视为解析不合格文件名的可能性。

// the config class, in C:tempProject.CoreConfig.cs public static string ValidationRulesFile { get { return m_validationRulesFile; } } private static string m_validationRulesFile = "validation_rules.xml"; // using the file name m_validationRules.LoadRulesFromXml( Config.ValidationRulesFile, "Call" ); 

以下是显示我们查找的路径与Config.cs相同的exception:

  Exception Details: System.IO.FileNotFoundException: Could not find file 'C:tempProject.Corevalidation_rules.xml'. 

任何人都可以向我解释这个吗? 我已经知道你应该如何处理ASP.NET中的路径,所以请不要回答解决方案。 我真的很想理解这一点,因为它真的让我感到惊讶,而且它会让我感到困扰。

UPDATE

以下是LoadRulesFromXml的相关代码

 public void LoadRulesFromXml( string in_xmlFileName, string in_type ) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load( in_xmlFileName ); ... 

UPDATE2

看起来Cassini Web服务器获取VS设置的当前目录,实际上它设置为我的库项目的路径。 我不确定VS究竟如何确定用于路径的项目,但这至少解释了发生了什么。 谢谢乔。

如果您不提供路径,则文件访问通常会使用当前工作目录作为默认值。 在ASP.NET中,这可能是您的Web应用程序目录。

依赖当前工作目录通常不是一个好主意,因此您可以使用Path.Combine指定不同的默认目录,例如,相对于AppDomain.CurrentDomain.BaseDirectory的一个目录,它也是ASP.NET的Web应用程序目录。应用程序。

您应该明确地将路径添加到您要打开的文件的名称。 您还可以尝试跟踪当前的工作目录。

从Visual Studio运行Cassini时,当前目录inheritance了Visual Studio的工作目录:这似乎是你的情况。

即:

 public void LoadRulesFromXml( string in_xmlFileName, string in_type ) { // To see what's going on Debug.WriteLine("Current directory is " + System.Environment.CurrentDirectory); XmlDocument xmlDoc = new XmlDocument(); // Use an explicit path xmlDoc.Load( System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, in_xmlFileName) ); ... 

完全猜测我会说Method LoadRulesFromXml()正在查看托管站点的应用程序根URL的路径…这可能是C: temp Project.Core 可能是通过执行Server.MapPath("~")

你可以发布LoadRulesFromXML的代码,或者你有代码吗?

上述就是C#学习教程:参考库中的ASP.NET相对路径分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/1031841.html

发表评论

邮箱地址不会被公开。 必填项已用*标注