gpt4 book ai didi

c# - 引用库中的 ASP.NET 相对路径

转载 作者:太空狗 更新时间:2023-10-29 22:11:38 25 4
gpt4 key购买 nike

我有一个 ASP.NET 网站,我在其中从 xml 文件加载一些验证规则。这个没有路径信息的 xml 文件名是硬编码在库中的。 (我知道硬编码的名称不好,但我们就用它来做这个例子)。

当我运行该网站时,ASP.NET 尝试在 路径中查找 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 究竟如何确定将哪个项目用于该路径,但这至少解释了正在发生的事情。谢谢乔。

最佳答案

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

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

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

从 Visual Studio 运行 Cassini 时,当前目录继承自 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)
);
...

关于c# - 引用库中的 ASP.NET 相对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/798814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com