c# - Silverlight 中的 URI 相对资源

标签 c# file silverlight uri relative-path

我的 Silverlight 项目中的一个文件夹中有一个文件。

我的项目名为 Display

解决方案资源管理器结构:

/Resources
    cube.obj

我的代码是:

Uri u = new Uri(@"Display;component/Resources/cube.obj", UriKind.Relative);
Stream stream = Application.GetResourceStream(u).Stream;
StreamReader reader = new StreamReader(stream);

cube.obj 将构建操作设置为内容(如果相关)。

我在 JavaScript 中遇到了 NullReferenceException,但它并没有给我确定问题提供太多帮助。

有什么想法吗?

谢谢!

最佳答案

将文件的构建操作设置为“资源”,而不是“内容”。

NullReferenceException 来自Application.GetResourceStream(u).StreamGetResourceStream 返回 null,因为文件不可用,因为它是错误的构建操作。访问空引用上的 Stream 会引发异常。

编辑:还要确保您的 Uri“显示;” Partial 是包含 obj 文件的程序集的正确名称。

只是为了澄清。当您希望将文件与各种程序集一起放置在 XAP 文件中时,请使用 Content。然后,您可以访问不带前缀“Display;component”路径的文件。 (注意:我突然想到,我不认为我已经用 Application.GetResourceStream 专门以这种方式加载了“内容”资源,所以我不确定它是否会工作,但我怀疑它会)。我还怀疑如果您在不同的路径/项目中具有相同的文件名,这可能会导致问题。如果您想与多个项目/程序集共享相同的资源/文件,此方法特别有用。

使用Resource将使文件嵌入程序集DLL中。这样,您需要指定要查找的程序集(因此有“Display;component”前缀)。但是,如果您要打包预编译的程序集以便在 Silverlight 项目中使用或想要以不同的方式管理文件,则这是必要的。

关于c# - Silverlight 中的 URI 相对资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11940871/

相关文章:

c# - 在 CodeBehind 上使用 XAML 样式

c# - Silverlight/XNA 动画滞后

c# - Silverlight HTTP POST 几个变量,最简单的示例(最少代码)

c# - LightSwitch -- 无法确定目标数据库架构提供程序

c# - 如何将 C++ 对象传递给 C# 类库

Java 8 Stream 确定文本文件中的最大计数

将字符数组复制到文本文件中

c++ - 是否显示Common Item Dialog 或GetOpenFileName? (Win32 API)

c# - 枚举向后兼容性

c# - SQL - 对员工进入时间进行分类