【问题标题】:URI Relative Resource in SilverlightSilverlight 中的 URI 相对资源
【发布时间】:2012-08-13 19:21:17
【问题描述】:

我的 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,在确定问题时没有给我太多帮助。

有什么想法吗?

谢谢!

【问题讨论】:

    标签: c# file silverlight uri relative-path


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 我现在得到一个不同的错误,Format_InvalidString。我猜这就是你所指的。如何确定包含 obj 文件的程序集?
    • @pcaston2 它应该是没有“.dll”扩展名的编译程序集文件名。因此,如果您编译的项目/程序集文件名为“MyProject.View.dll”,那么您将使用“MyProject.View;component”
    • 其实GetResourceStream不会抛出无效字符串格式异常;只有 ArgumentException 和 ArgumentNullException。 Uri 构造函数可以抛出一个UriFormatException,这可能是你所看到的,我希望你首先得到它。是否有可能您现在有一个有效的文件流,而您的后续代码读取文件失败了?
    • 我的解决方案中有多个项目。我在 Display 项目(我的 Silverlight Web 应用程序)中进行了检查,它包含一个 Display.dll,除了 Microsoft 引用之外,我找不到任何其他 DLL。所以正如我所说,相应的字符串'Display;component/Resources/cube.obj'给了我一个错误。
    • 是的,我只是想尝试一下,看起来我遇到的问题已解决,此错误来自我已注释掉的其他代码。谢谢!
    【解决方案2】:

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

    【讨论】:

    • 我正在处理的项目最初是一个 MVC3 应用程序,我添加了一个 Silverlight 应用程序,并在过去尝试了一段时间让调试功能工作,同时使用 Chrome。不幸的是,我无法使该功能正常工作。
    • @pcaston2 AFAIK,Silverlight 调试仅适用于 Internet Explorer。
    • 我可能错了,但我听说有人使用 Chrome 取得了成功。我的 VS 2010 说符号没有加载(一定是我的项目中的配置问题),我已经尝试过 IE 有类似的问题。遵循了一些教程,但从未让它工作,我很确定我知道代码中的问题出在哪里,只是不知道该怎么做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多