代码之家  ›  专栏  ›  技术社区  ›  Budda

Silverlight:如何处理标准程序集(第2部分)

  •  2
  • Budda  · 技术社区  · 15 年前

    必须将“标准”程序集移出xap文件(Silverlight4应用程序)。我也有类似的问题( Silverlight: how to handle standard assemblies )与深刻的解释有很好的联系。但并不是所有的事情都很清楚。

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

    • system.componentmodel.dataannotations;
    • system.windows.控件,
    • 系统.windows.controls.data,
    • system.windows.controls.data.input,输入,
    • system.windows.controls.input,输入,
    • system.windows.controls.navigation,导航,
    • system.windows.controls.toolkit;
    • system.windows.data.数据。

    但仍有少数人看起来像是优秀的候选人被转移到不同的文件中:

    • Galasoft.mvmlight.sl4号,
    • Microsoft.Practices.ServiceLocation,服务位置,
    • microsoft.practices.unity.silverlight(Microsoft.practices.unity.silverlight)
    • system.windows.controls.toolkit.internals.

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

    请你解释一下:

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

    非常感谢你!

    另外,我问题的答案可能在正文中:

    向Silverlight SDK中的库程序集或任何 程序集附带有效的assemblyshortname.extmap.xml映射 文件。

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

    1 回复  |  直到 15 年前
        1
  •  8
  •   WiredPrairie    15 年前

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

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

    C:\程序文件(x86)\Microsoft SDK\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.mvmlight.sl4(例如,我没有安装此组件,也不知道它是否已签名)。文件名为:

    galasoft.mvmlight.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.mvmlight.sl4.zip(加拉索夫.mvmlight.sl4.zip) . 一旦引用dll(只要extmap.xll文件与原始程序集并排出现),这一切都会自动发生。

    推荐文章