我的 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).Stream
。 GetResourceStream
返回 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/