【问题标题】:Sharing an XML file between two projects?在两个项目之间共享 XML 文件?
【发布时间】:2012-08-22 18:03:51
【问题描述】:

我环顾四周,根本找不到打开链接 XML 文件的方法。我的文件夹结构是这样的:

...\projects\ConfigService\
...\projects\Shared\
...\projects\WebTool\

在 Shared 文件夹中,我有一个 XML 文件,它将由 WebTool 项目修改并由 ConfigService 读取(在每个文件构建和运行后多次)。为了使事情尽可能简单,我只是在每个项目的 XML 中尝试“添加为链接”,但是我如何真正获得链接对象的完整路径以便我可以打开它?我使用链接是因为在我的项目构建后文件将被更改,但我不会重新构建。

我找到的所有答案要么尝试将链接文件打包到项目的二进制文件中,要么说明用于添加类/代码而不仅仅是平面资源。

或者有更好的方法吗?

【问题讨论】:

  • 运行时文件在哪里?想必你需要 ConfigService 运行时的完整路径吧?
  • 文件不会被移动,它会保留在 Shared 文件夹中,这样在运行时,WebTool 可以对其进行更新,并且 ConfigService 可以在下次打开文件时看到更改。
  • 好的,那么这将如何部署?您正在谈论如何配置开发项目,但大概您将在某个地方部署它,它不会总是在 Visual Studio 内运行。
  • 这些项目只是带有代码的 ASPX 网页,因此它们只是位于服务器上的那些文件夹中。因此,对于我部署到的每台服务器,我都需要共享 XML 的相对路径,否则我只需要使用绝对路径。
  • 有问题的类是否可以访问HttpContext 或HttpServerUtility,如果是,那么最简单的解决方案是使用HttpServerUtility.MapPath()。

标签: c# asp.net .net xml visual-studio-2010


【解决方案1】:

最适合他的解决方案是使用Server.MapPath() 方法找到他的Shared 文件夹,而不管他的网站在文件系统中的哪个位置。因为它总是[virtual-directory]\Shared,所以效果很好,他不需要担心配置设置。

【讨论】:

  • 是的,这是一个很好的答案!我获得完整路径的线路是:string fullFilePath = HttpContext.Current.Server.MapPath(@"~\Shared\SharedFile.xml");
【解决方案2】:

我认为您想使用app.config 文件来解决此问题。以下是你的做法。

在 WebTool 服务和 Config 服务中,添加一个带有以下文本的 app.config 文件:

<configuration>
<appSettings>
    <add key="XmlFileLocation" value="c:\folder\projects\shared\myfile.xml" />
</appSettings>
</configuration>

然后,您可以使用以下方法检索每个程序中的文件位置:

string filepath = ConfigurationManager.AppSettings["XmlFileLocation"];

不过,您必须在项目中添加对 System.Configuration 的引用。

祝你好运!

【讨论】:

  • 这对于一台服务器来说是一个很好的解决方案,但是如果我部署到多台服务器上,我的 `\projects` 文件夹将位于每个服务器的不同位置。有没有办法让它更具可扩展性?
  • 我在服务器上做了很多部署,我发现这个配置文件系统解决了很多这样的问题 :) 例如,假设我有 10 个在虚拟机上运行的 ConfigService 副本,以及一个WebTool 在本地 PC 上运行。 ConfigService 机器将具有\\WebToolServer\share\folder\projects\myfile.xml,WebTool PC 将具有c:\share\folder\projects\myfile.xml - 前提是您与 Windows 文件服务共享 c:\share :)
  • 啊哈,我明白了。这个答案非常适合让一堆服务器与之交互的单个 XML 文件(这是非常可扩展的:D)。但是对于我的项目,我为每台服务器都有一个共享 XML,没有两台服务器应该相互通信。在这种情况下,我认为大猩猩的答案更容易解决,但这也很好。谢谢你的解释!
  • 当然——如果你愿意,他们总是可以为每台服务器指向一个共享文件夹。
【解决方案3】:

两条路 一个取决于您将如何部署。如果他们都去同一个文件夹,奥德先生的解决方案是一个快速和简单的。 如果您要部署到更复杂的文件夹结构,例如

MyApps
  Shared
  ConfigService
  WebTool

创建一个与之镜像的文件夹结构,并将每个项目中的输出目录设置为相关目录(而不是默认的 bin\debug bin\release)。您可以使用来自每个工具的相对路径来抓取它,例如(..\MyXmlFile.xml)。

也就是说,我不喜欢上面的任何一个。

还有什么分享的?如果有一个 dll,那么它可能应该有一个返回文件位置或内容的方法,并让它管理该位置的位置。

PS 不要忘记看到它暴露在文件系统(某处)上,您需要处理一些善意的个人删除或修改它。

【讨论】:

  • 这只是一个面向内部的工具,仅供我的部门使用,因此安全性并不是真正的问题(至少现在是这样)。这些是 ASPX 页面,它们将位于服务器上的确切文件夹结构中。
猜你喜欢
  • 1970-01-01
  • 2011-10-01
  • 1970-01-01
  • 2014-10-16
  • 1970-01-01
  • 1970-01-01
  • 2011-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多