Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Silverlight中的URI相对资源_C#_File_Silverlight_Uri_Relative Path - Fatal编程技术网

C# Silverlight中的URI相对资源

C# Silverlight中的URI相对资源,c#,file,silverlight,uri,relative-path,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 Stream

我在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将生成操作设置为Content

我得到了一个在JavaScript中出现的NullReferenceException,它在确定问题时没有给我太多帮助

有什么想法吗


谢谢

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

将文件的生成操作设置为“资源”,而不是“内容”

NullReferenceException
来自
应用程序.GetResourceStream(u).Stream
GetResourceStream
返回
null
,因为文件不可用,因为它是错误的生成操作。访问空引用上的
,然后触发异常

编辑:还要确保Uri“Display;”部分是包含obj文件的程序集的正确名称

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


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

我正在处理的项目最初是一个MVC3应用程序,我在Silverlight应用程序上加了一个补丁,并在使用Chrome时尝试了一段时间使调试功能正常工作。不幸的是,我无法使该功能正常工作。@pcaston2 AFAIK,Silverlight调试只在Internet Explorer中工作。我可能错了,但我听说人们在Chrome上取得了成功。我的VS2010说没有加载符号(在我的项目中一定是配置问题),我也尝试过类似问题的IE。遵循了一些教程,但从未使其工作,我非常确定我知道问题在代码中的位置,只是不确定如何处理它。我现在得到一个不同的错误,Format_InvalidString。我猜这就是你指的。如何确定包含obj文件的程序集?@pcaston2它应该是编译后的程序集文件名,不带“.dll”扩展名。因此,如果编译的项目/程序集文件名为“MyProject.View.dll”,那么您将使用“MyProject.View;component”,实际上,
GetResourceStream
不会引发无效的字符串格式异常;仅ArgumentException和ArgumentNullException。
Uri
构造函数可以抛出一个
UriFormatException
,这可能就是您看到的,我希望您先得到它。您现在是否有可能拥有指向该文件的有效流,并且是后续代码读取该文件失败?我的解决方案中有多个项目。我在Display项目(我的Silverlight web应用程序)中进行了检查,它包含一个Display.dll,除了Microsoft引用之外,我找不到任何其他dll。如我所说,相应的字符串显示;component/Resources/cube.obj'给了我一个错误。是的,我只是想尝试一下,看起来我遇到的块问题已经解决了,这个错误来自我注释掉的其他代码。谢谢