【问题标题】:Output directory path both locally and on remote server for ASP.NET Web ServiceASP.NET Web 服务的本地和远程服务器上的输出目录路径
【发布时间】:2014-06-24 05:18:28
【问题描述】:

我已经用 C# 构建了一个 ASP.NET RESTful 服务项目。我需要添加一些带有配置的自定义 XML 文件,我需要在运行时读取和处理这些文件。

我将 XML 文件添加到我的项目中,并将属性“复制到输出目录”设置为“始终复制”。

为了打开文件,我使用了以下 sn-p:

Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "configuration.xml");

当我将项目发布到服务器时效果很好,但如果我在本地运行 Web 服务,输出目录会发生变化,我必须将 bin 附加到路径的开头,例如:

Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin\\configuration.xml");

有什么方法可以为本地和远程服务器获取正确的输出目录?

【问题讨论】:

标签: c# asp.net output-directory


【解决方案1】:

除了将文件复制到输出文件夹之外,您还可以将它们保存在根项目文件夹(或某些子文件夹结构)中,并使用HttpServerUtility.MapPath() 方法来解析文件的正确物理路径服务器(本地和远程)。

因此,在您的场景中,HttpContext.Current.Server.MapPath("configuration.xml") 将返回类似 C:\MyWebApp\configuration.xml 的路径,然后您可以正常加载。

【讨论】:

  • 我是否必须为文件设置任何构建操作才能保留在根项目文件夹中?
  • 不需要构建操作,这些只是作为您的网站/服务的内容文件,应该部署到服务器。
  • 管理 XML 文件的程序集与运行 Web 服务的程序集不同。我最终使用了 HttpServerUtility.MapPath() 并将资源文件移动到 Web 服务程序集中。
【解决方案2】:

您可以将属性Build Action设置为configuration.xml的“嵌入式资源”,然后可以使用Assembly.GetExecutingAssembly().GetManifestResourceStream()访问该文件

例如Assembly.GetExecutingAssembly().GetManifestResourceStream(MyPRoject.configuration.xml)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    • 2019-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多