0

我独立的小型 C# 项目需要中等数量(约 100 个)的 (XML) 文件,这些文件需要在运行时提供特定于域的值。它们不需要对用户可见。但是我需要偶尔添加或更新它们,我准备手动执行(即我不设想特定的工具,特别是因为它们可能是在系统之外创建的)。

我希望它们是可重定位的(即使用相对文件名)。我应该考虑哪些选项来组织它们,打开和阅读它们需要哪些调用?

该项目本质上是独立的(与 Web 服务、数据库或其他第三方应用程序无关)。它被组织成少量的命名空间,文件的所有逻辑都可以限制在一个命名空间中。

========= 很抱歉不清楚。我会再试一次。在 Java 应用程序中,可以包含相对于类路径读取的资源文件,而不是最终的 *.exe。我相信有一种方法可以在 C# 中做类似的事情。

========= 我相信我应该使用与RESX相关的东西。请参阅(RESX 文件和 xml 数据https://stackoverflow.com/posts/1205872/edit)。我可以将字符串放在 resx 文件中,但这很乏味且容易出错,我希望将它们复制到适当的位置。

很抱歉不清楚,但我不太确定如何提出这个问题。

========= 这个问题似乎非常接近(C#相当于 getClassLoader().getResourceAsStream(...))。我希望能够在 VisualStudio 中添加文件 - 我的问题是我将它们放在哪里以及如何指示它们是资源?

4

3 回答 3

1

如果您将它们放在相对于您的可执行文件的子文件夹中,假设.\Config您可以使用File.ReadAllText(@"Config\filename.xml").

如果您有一个 ASP.NET 应用程序,您可以将它们放在特殊App_Data文件夹中并使用File.ReadAllText(Server.MapPath("~/App_Data/filename.xml"))

于 2009-07-30T11:13:22.717 回答
0

http://www.attilan.com/2006/08/accessing_embedded_resources_u.php上有详细的答案。看来该文件必须指定为 EmbeddedResource。我还没有让这个工作,但这是我想要的。

于 2009-07-30T15:11:18.837 回答
0

我仍然不清楚您是否有 Win 表单或 Web 项目......无论如何,使用相对文件名不需要使它们可重定位。我建议在 web.config 或 app.config 文件的 appSettings 部分添加一个条目,其中包含 xml 文件的完整路径。如果它们被移动,您所要做的就是更改您的配置文件。

<!-- app/web.config --->
<appSettings>
        <add key="filelocation" value="c:\xmlfiles"/>
</appSettings>

//c# code (in ASP.NET app, for example)
using System.IO;
using System.Xml.Linq;

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string path = ConfigurationManager.AppSettings["filelocation"];
        DirectoryInfo di = new DirectoryInfo(path);
        List<XDocument> xmlDocs = new List<XDocument>();
        foreach (FileInfo fi in di.GetFiles())
        {
            xmlDocs.Add(XDocument.Load(fi.FullName));
        }
    }
}

当然,您可能知道也可能不知道 xml 文件名,因此您可能不会以完全相同的方式加载和阅读它们。

在您的情况下,如果您有一个 ASP.NET 站点(假设它永远不会在多个服务器上),将它们放在您的 App_Data 文件夹中似乎是完全合适的。请注意,如果您在配置文件中列出“~/App_Data”,您知道将其转换为完整路径,就像 darin 对 Server.MapPath() 所做的那样。

于 2009-07-30T13:16:55.820 回答