Silverlight:如何处理标准程序集

问题描述:

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

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

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

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

请指教。 谢谢。

一个建议是使用Silverlight的程序集缓存选项。文档和walkthru可能被发现here。应用程序的整体大小不会改变,但对于返回的用户来说,最终用户体验可能会随着浏览器缓存单个程序集而提高。

+0

我看到几条途径:管理缓存选项,并提供不同的XAP文件名(添加日期/时间参数为“得到”参数从我第二种是更正确的,但它在我的环境中不起作用。第一种方法的问题 - ...但可能你是对的:我们不需要更改xap文件名,但我们需要让浏览器知道他应该检查服务器端的文件是否被更改,并且应该重新加载。谢谢。这不是真正的指定问题,但是您的评论是有帮助的!:) – Budda 2010-07-28 02:00:22

+1

这是什么意思?我想我不清楚你的问题是什么。我的答案和提供的链接显示了如何将标准组件移出XAP文件(以及如何创建您自己的)。 – WiredPrairie 2010-07-28 12:40:10

+0

对不起,我在评论中不清楚。对于我来说,不清楚“使用Silverlight的程序集缓存选项”将如何减小xap文件的大小。我以为你在谈论网络浏览器缓存:)你的链接是完美的(并不是所有对我来说都很清楚,但这是另一个问题的话题,它给了我启动的良好基础)。 谢谢。 – Budda 2010-07-30 23:31:15

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

无论哪种方式,关键是制定您的项目是如何相关的,以便您只包含一次DLL。一旦你有一个包含必要的DLL的XAP文件,加载到同一个应用程序中的任何其他XAP都可以将引用设置为“copy-local = false”。这意味着它仍然会引用System.Windows.Controls.Data.dll,但实际上并不会在生成XAP中保留副本。如果你的愿望是减少初始的占用空间和加载时间,你可能会有:Application.xap启动并为用户提供导航,启动画面等。它会立即动态加载“在后台包含依赖DLL(控件等)的“Libraries.xap”,最后是其他任何“Module1.xap”和“Module2.xap”只会引用DLL,但复制本地设置为false。

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