Silverlight中的URI相对资源

时间:2012-08-13 19:21:18

标签: c# silverlight file uri relative

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

我的项目名为Display

Solution Explorer结构:

/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将构建操作设置为Content,如果相关的话。

我收到了JavaScript中出现的NullReferenceException,并没有给我很多帮助来确定问题。

有什么想法吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

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

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

编辑:还要确保你的Uri“显示;” part是容纳obj文件的程序集的正确名称。

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

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

答案 1 :(得分:0)

您可以尝试在项目上启用Silverlight调试,这样您就可以逐步执行SL代码,转到项目属性然后在Debug上一直向下并启用Silverlight调试器,然后运行您的项目和SL断点将被击中。