在VS2008 ASP.NET项目中使用嵌入文件

3

我有一个ASP.NET项目,想要在项目中包含一个XML文件来存储一些相对静态的数据。为了做到这一点,我从解决方案上下文菜单中选择了“添加文件”,然后选择了我的XML文件。添加了文件之后,我想要从代码中加载XML。我尝试了以下方法:

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("MyData.xml");

我也尝试了以下方法:

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("~/MyData.xml");

但似乎它正在查找当前目录(即我的VS2008目录),而不是项目。我这样做错了吗?是否有一种简单的方法可以引用嵌入在项目中的资源,就像这样?

2个回答

0

在你的第二次尝试中,波浪号“~”会在它作为控件属性(如HyperLink.NavigateUrl)中的文件URL的一部分时被计算。如果它只是作为传递给xmlDocument.Load()的字符串的一部分,则必须使用Server.MapPath("~/MyData.xml")进行显式计算。

或者,

您可以将文件作为嵌入式资源包含在内。右键单击解决方案中的文件,在生成操作中选择嵌入式资源。在“复制到输出目录”选项中,选择“不复制”

以下是读取文件的示例:

        var assembly = Assembly.GetExecutingAssembly();
        if (assembly != null)
        {
            var stream = assembly.GetManifestResourceStream("RootProjectNamespace.MyData.xml");
            if (stream != null)
            {
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load(stream);
            }
        }

请注意,您必须在文件名前加上项目的默认命名空间。您可以通过右键单击项目,选择属性,在应用程序选项卡中找到默认命名空间位于顶部来查找此信息。

0

你添加XML文件到ASP.NET项目中所遵循的步骤并没有将其嵌入应用程序中,而只是像我们的.aspx页面一样作为另一个文件存在于应用程序中。

你可以尝试:

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(Server.MapPath("~/MyData.xml"));

同时,将这些文件保存在App_Data文件夹中会更好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接