【问题标题】:server.mappath null [duplicate]server.mappath null [重复]
【发布时间】:2026-01-15 02:05:04
【问题描述】:

可能重复:
HttpContext.Current.Server null

我的 ASP .NET 解决方案中有三个项目:

  • 一个类库
  • 一个网络应用程序
  • Windows 服务

我的 Web 应用程序中有一个包含 XML 文件的文件夹。需要使用此 XML 文件填充来自类库函数的 XMLreader。我已经添加了这个:

var reader = XmlReader.Create(HttpContext.Current.Server.MapPath("~/TestDevice/Data.xml"), settings);

当从我们的应用程序调用此函数时,它可以工作。 当从 Windows 应用程序调用类库的这个函数时,我在 HttpContext.Current.Server 得到空引用,因为它在 Windows 应用程序中不可用。我不想提供硬编码路径,尽管它适用于 Windows 和 Web 应用程序。我可以使用一些不起作用的功能来访问来自不同项目或 server.mappath 的任何替代文件的文件吗?请提出解决方案

谢谢

【问题讨论】:

标签: c# asp.net windows-services


【解决方案1】:

System.AppDomain.CurrentDomain.BaseDirectory 应该可以解决问题。

http://msdn.microsoft.com/en-us/library/system.appdomain.basedirectory.aspx

获取基础目录 装配解析器用于探测 程序集。

【讨论】:

    【解决方案2】:

    HttpContext.Current.Server.MapPath alternative in windows application

    file path using C#

    HttpContext.Current.Server null

    问同样的基本问题四次并不会改变这样一个事实,即您无法使用 Windows 服务访问 Web 应用程序路径,并且 Web 应用程序不会知道您的服务在哪里。

    使用配置文件来定义您的数据的存储位置并向两者提供相同的信息 - 或使用其他一些存储方式来存储您的数据,例如具有已发布位置的数据库。

    【讨论】:

      【解决方案3】:

      最简单的解决方案可能是将 xml 文件的路径传递给该函数,而不是让函数本身足够聪明以找出它 - 然后您的 Web 应用程序可以使用 HttpContext 方法,而 Winforms 应用程序将使用常规路径。对于 WinForms 或 Windows 服务,没有等效的 MapPath 方法。

      【讨论】: