Silverlight:如何处理标准组件(第2部分)

时间:2010-07-30 23:52:01

标签: .net silverlight silverlight-4.0 xap

有必要将“标准”程序集移出xap文件(Silverlight 4应用程序)。我遇到了类似的问题(Silverlight: how to handle standard assemblies)并且得到了很好的解释。但并非一切都很清楚。

在我通过使用应用程序库缓存打开“减少XAP大小”后,我的xap文件的大小减少了两倍,以下程序集被移出到单独的zip文件中:

  • System.ComponentModel.DataAnnotations;
  • System.Windows.Controls,
  • System.Windows.Controls.Data,
  • System.Windows.Controls.Data.Input,
  • System.Windows.Controls.Input,
  • System.Windows.Controls.Navigation,
  • System.Windows.Controls.Toolkit;
  • System.Windows.Data。

但仍然很少有其他人似乎很适合转移到单独的文件中:

  • GalaSoft.MvvmLight.SL4,
  • Microsoft.Practices.ServiceLocation,
  • Microsoft.Practices.Unity.Silverlight,
  • System.Windows.Controls.Toolkit.Internals。

所有这些程序集都是从Silverlight应用程序(以及使用这些程序集的Silverlight项目)引用的。

请你解释一下:

  • Q1。这些提到的组件有什么区别?
  • Q2。如何将这4个程序集移动到单独的zip文件中?

非常感谢!

P.S。可能我的问题的答案在文中:

  

在Silverlight SDK中添加对库程序集的引用,或者添加引用   程序集伴随有效的assemblyShortName.extmap.xml映射   文件。

但我不明白这是什么意思。如果我正确理解,我需要将这些程序集(我想要移出)的引用添加到Silverlight SDK中。但是怎么做呢?感谢。

1 个答案:

答案 0 :(得分:8)

A1)两个列表之间的区别在于第一组程序集已经定义了必要的* .extmap.xml文件,Visual Studio使用这些文件自动将每个程序集打包到一个zip文件中,然后缓存该文件独立于客户端(通过Web浏览器)。

如果查看此文件夹(根据需要调整安装驱动器位置):

C:\ Program Files(x86)\ Microsoft SDKs \ Silverlight \ v4.0 \ Libraries \ Client

您会看到几乎所有常见的Silverlight程序集都有* .extmap.dll文件(如果不是全部的话)。例如,这是System.Windows.Data.extmap.dll的内容:

<?xml version="1.0"?>
<manifest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <assembly>
    <name>System.Windows.Data</name>
    <version>2.0.5.0</version>
    <publickeytoken>31bf3856ad364e35</publickeytoken>
    <relpath>System.Windows.Data.dll</relpath>
    <extension downloadUri="System.Windows.Data.zip" />
  </assembly>

</manifest>

如果您按照位于here的文档进行操作,您将会看到它是如何构建的。大多数部分应该是显而易见的,唯一不寻常的方面可能是扩展元素。通过在downloadUri属性中放置一个文件名,程序集会自动打包到该文件中(它是一个zip文件,但扩展名可以是你想要的任何内容)。

当您引用诸如System.Windows.Data之类的程序集时,它会发现此文件并在构建期间使用它来创建zip文件System.Windows.Data.zip。如果两个或多个引用的程序集共享相同的downloadUri目标文件名,则它们将在构建时自动合并为单个文件。

A2) 您可以按照该模式为第二个列表中的每个程序集创建* .extmap.dll文件。

xml文件应与您创建的程序集位于同一文件夹中。

对于GalaSoft.MvvmLight.SL4,(例如,我没有安装此组件,也不知道它是否已签名)。该文件将命名为:

<强> GalaSoft.MvvmLight.SL4.extmap.xml

它的内容看起来像这样:

<?xml version="1.0"?>
<manifest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <assembly>
    <name>GalaSoft.MvvmLight.SL4</name>
    <version>#.#.#.#</version> <!-- needs the version number -->
    <!-- if there's a public key token, put it in this element, and
        uncomment it -->
    <!-- <publickeytoken></publickeytoken> -->
    <relpath>GalaSoft.MvvmLight.SL4.dll</relpath>
    <extension downloadUri="GalaSoft.MvvmLight.SL4.zip" />
  </assembly>
</manifest>

一旦该文件存在,Visual Studio将使用它来构建名为 GalaSoft.MvvmLight.SL4.zip 的zip文件。这一切都会在您引用dll后自动发生(只要extmap.xll文件与原始程序集并排)。