【问题标题】:VS2013 Failure to load Resource file for Windows 8 AppVS2013 Windows 8 App 加载资源文件失败
【发布时间】:2013-11-14 00:52:13
【问题描述】:

我正在创建一个带有可自定义动态磁贴的应用程序,并且有一些我自己的、我想要包含在我的项目中的标记 XML 模板。

XML 文件已放在Assets/Tiles/FileName.xml

我正在尝试使用以下代码来加载文档:

XmlDocument tileXml = new XmlDocument();
tileXml.LoadXml("ms-appx:///Assets/Tiles/SM_Date.xml");

文件名与目录中一样存在。运行时,应用程序强制退出,找不到指定的文件。

这是我在输出中遇到的唯一错误

AppName.exe 中出现了“System.Exception”类型的第一次机会异常

如何从项目资产加载 XML 文件?

我尝试了以下路径

ms-appex:///Assets/Tile/SM_DAte.xml
ms-appx:///资产...
ms-appex://资产...
ms-appx://资产...
/资产...
资产...
/瓷砖...
瓷砖...

一切都无济于事。我检查了输出目录,文件确实被复制到资产目录,位于:\bin\Debug\AppX\

尝试将其作为文件加载也不起作用:

using System.IO;
string xmlContent = File.ReadAllText("");

上面会抛出一个错误,指出 File in undefined。

【问题讨论】:

  • 我以为我已经在标签中找到了。我在 SurfacePro 上,运行 Windows8.1,为 Windows8.1 开发应用程序。
  • 您确定 XML 有效吗?另外,请尝试在外部编辑器中将其保存为 UTF,而不使用 BOM。

标签: c# xml visual-studio-2013 windows-8.1


【解决方案1】:

首先尝试将路径更改为“ms-appx”而不是“ms-appex”。 如果这不起作用(我希望如此)尝试将 Stream 获取到资源文件,然后调用 接受 Stream 的 XmlDocument 上的 Load 重载方法。

请看这里:http://msdn.microsoft.com/en-us/library/windows/apps/hh965322.aspx 在这里:Getting a Stream from a resource file / content

【讨论】:

  • 我打错了我原来的问题,我实际上使用的是ms-appx。有关出错的代码行、错误本身和解决方案资源管理器的附加图片,请参阅编辑。
【解决方案2】:

如果@atomaras 回答没有帮助,请尝试在 XML 文件中设置属性,如下所示:

Build Action : Content
Copy to Output Directory : Copy Always or Copy if newer

刚刚检查过,XmlDocument 似乎没有加载文件的重载 - 它接受 XML 字符串。改用LoadFromFileAsync

http://msdn.microsoft.com/en-US/library/windows/apps/br206263

【讨论】:

  • 我的资产目录没有这个选项。我假设它被设置为自动复制。
  • 目录确实被复制到输出了。
  • 更新了帖子-我认为您的问题是尝试使用LoadXml
  • 您需要为LoadFromFileAsync() 提供IStorageFile。 FromUri 看起来更有希望。
【解决方案3】:

您是否尝试使用“Assets\Tiles\FileName.xml”? 因为有时使用 '\' 而不是 '/' 在 windows 上会有所帮助。

【讨论】:

    【解决方案4】:

    我终于能够通过使用以下代码来完成此操作:

    XDocument xDoc = XDocument.Load(@"Assets\Tiles\SM_Date.xml");
    XmlDocument wideTileXml = new XmlDocument();
    wideTileXml.LoadXml(xDoc.ToString());
    

    对我来说,这似乎是一种解决方法,因为我必须将 XML 作为纯文本加载,然后从纯文本 XML 生成 XmlDocument...

    有点骇人听闻,但就目前而言,它可以满足我的需要。感谢所有帮助。

    【讨论】:

    • XmlDoc 和 XDoc 的组合很可笑。但是很有趣。
    • 这是我让它工作的唯一方法。对于using System.IO,Visual Studio 告诉我File 是未知的。
    • 废话。 RT 有时有完全不同的 API,尤其是 I/O。但是必须有一种(异步)方式从 Uri 加载。为什么你更喜欢 XmlDoc 而不是 XDoc 让我感到震惊。
    • 因为TileNotification构造函数需要使用XmlDocument。我是一名 Java 开发人员,正在尝试使用 C#...
    • @Downvoters。与其投反对票,不如提供一些建设性的反馈意见?发布的答案都没有奏效,所以我找到了解决方法......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-09
    • 2017-11-18
    • 1970-01-01
    • 2020-03-15
    • 2012-07-24
    • 2018-01-15
    • 2013-02-26
    相关资源
    最近更新 更多