【问题标题】:Silverlight: how to handle standard assembliesSilverlight:如何处理标准组件
【发布时间】:2010-07-25 15:20:18
【问题描述】:

一个常见的 Silverlight 任务:使 xap 文件的大小更小。有很多热门手册解释了如何使您的应用程序模块化。但我没有找到任何人解释如何制作“模块化”标准库。

我的 xap 文件的最大部分(1.7Mb,当整体大小为 1.8Mb 时)被标准程序集占用:其中 System.Windows.Controls.dll - 370Kb,System.Windows.Controls.Data.dll - 464Kb 等...

您能否告诉(或参考手册)如何将这些程序集移出 xap 文件?我可以使用 prism/unity 并动态加载它们,但在这种情况下,我需要从我的 Silverlight 库中删除对这些程序集的引用......并且它们变得不可编译......

详情: 让我们想象一下,我有“ModuleAView”项目,其中包含我的应用程序的页面。这个模块在单独的程序集中......但它仍然很大(它包含所有提到的库)。如果我从项目中移出库,我的 XAML 文件将无法编译。

请指教。 谢谢。

【问题讨论】:

    标签: .net silverlight silverlight-4.0 unity-container prism


    【解决方案1】:

    一个建议是使用 Silverlight 的程序集文件缓存选项。可以在here 找到文档和演练。您的应用程序的整体大小不会改变,但最终用户体验(对于返回用户)可能会随着浏览器缓存各个程序集而得到改善。

    【讨论】:

    • 我看到了几种方法:管理缓存选项并提供不同的 xap 文件名(添加日期/时间参数作为 'get' 参数。从我的角度来看,第二个更正确,但事实并非如此在我的环境中工作。第一种方法的问题 - ...但可能你是对的:我们不需要更改 xap 文件名,但我们需要让浏览器知道他应该检查文件是否在服务器端,应该重新加载。谢谢。这不是真正指定的问题,但您的评论很有帮助!:)
    • 什么意思?我想我不清楚你的问题到底是什么。我的回答和提供的链接显示了如何将标准程序集移出 XAP 文件(以及如何创建自己的)。
    • 对不起,我在评论中没有说清楚。对我来说,不清楚“使用 Silverlight 的程序集文件缓存选项”如何减小 xap 文件的大小。我以为您在谈论网络浏览器缓存:) 您的链接非常完美(对我来说并非所有内容都很清楚,但这是另一个问题的主题,它为我提供了良好的启动基础)。谢谢。
    【解决方案2】:

    通常,对于较大的复合应用程序,您需要下载一个主机应用程序,该应用程序接受 DLL 的“命中”(即,如果您使用 x、y 和 z,它们将包含在主机中)。另一种选择是轻量级的介绍性 XAP,然后在后台下载其他的。

    无论哪种方式,关键是制定项目的相关策略,以便您只包含一次 DLL。一旦你有一个包含必要 DLL 的 XAP 文件,加载到同一应用程序中的任何其他 XAP 都可以将引用设置为“copy-local=false”。这意味着它仍然会引用 System.Windows.Controls.Data.dll,例如,但实际上不会在生成 XAP 中保留副本。

    同样,如果您希望减少初始的占用空间和加载时间,您可能有:Application.xap 启动并为用户提供导航、启动屏幕等。它会立即动态加载“库.xap”在后台包含相关的 DLL(控件等),最后任何其他“Module1.xap”和“Module2.xap”将简单地引用 DLL,但将本地复制设置为 false。

    我在这里有一个带有源代码的深入示例: http://csharperimage.jeremylikness.com/2010/06/advanced-silverlight-applications-using.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-10
      • 2013-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-12
      • 2016-11-11
      相关资源
      最近更新 更多