【发布时间】:2009-04-28 16:36:10
【问题描述】:
我有一个 ASP.NET 网站,我在其中从 xml 文件加载一些验证规则。这个没有路径信息的 xml 文件名是硬编码在库中的。 (我知道硬编码的名字不好,但我们就用它来做这个例子)。
当我运行网站时,ASP.NET 尝试在 source 路径中查找 xml 文件,其中名称是硬编码的 C# 文件。这完全让我难以置信,因为我无法理解如何在运行时考虑使用源路径作为解析不合格文件名的可能性。
// the config class, in C:\temp\Project.Core\Config.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 Details: System.IO.FileNotFoundException:
Could not find file 'C:\temp\Project.Core\validation_rules.xml'.
谁能给我解释一下?我已经知道您应该如何处理 ASP.NET 中的一般路径,所以请不要回复解决方案。我只是真的很想明白这一点,因为它真的让我感到惊讶,而且它会一直困扰我。
更新
这里是LoadRulesFromXml的相关代码
public void LoadRulesFromXml( string in_xmlFileName, string in_type )
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load( in_xmlFileName );
...
更新2
看起来 Cassini 网络服务器获取了 VS 设置的当前目录,实际上它设置为我的库项目的路径。我不确定 VS 究竟是如何确定将哪个项目用于路径的,但这至少可以解释正在发生的事情。谢谢乔。
【问题讨论】:
-
Visual Studio(至少 2005 年)将从它自己的默认目录开始,位于 %ProgramFiles% 下的某个位置。但我相信每次使用文件打开对话框打开文件时,都会更改工作目录。底线是:最好不要依赖工作目录。