2010-07-30 35 views
2

Il est nécessaire de déplacer les assemblages 'standard' hors du fichier xap (application Silverlight 4). J'ai eu un problème similaire (Silverlight: how to handle standard assemblies) et j'ai eu un bon lien avec des explications profondes. Mais tout n'est pas clair là-bas.Silverlight: comment gérer les assemblages standard (partie 2)

Après que j'ai changé sur le « Réduire la taille du XAP en utilisant l'application mise en cache de bibliothèque » la taille de mon xap fichier a été diminué deux fois, les ensembles suivants ont été déplacés dans des fichiers zip séparés:

  • 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.

Mais il y a encore quelques autres qui semblent comme de bons candidats pour être déplacés dans des fichiers séparés sur:

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

Tous ces assemblys sont référencés à partir de l'application Silverlight (et également à partir de projets Silverlight qui utilisent ces assemblys).

Pourriez-vous s'il vous plaît expliquer:

  • Q1. Quelle est la différence entre ces assemblées mentionnées?
  • Q2. Comment déplacer ces 4 assemblages dans des fichiers zip séparés?

Merci beaucoup!

post-scriptum Probablement, la réponse à ma question est dans le texte:

Ajouter une référence à un ensemble de bibliothèque dans le kit de développement Silverlight, ou à tout ensemble accompagné d'une cartographie assemblyShortName.extmap.xml fichier valide .

Mais je ne comprends pas ce que cela signifie. Si je comprends bien, j'ai besoin d'ajouter une référence sur ces assemblys (que je veux sortir) dans un SDK Silverlight. Mais comment faire ça? Merci.

Répondre

8

A1) La différence entre les deux listes est que le premier ensemble d'assemblages a déjà défini les fichiers nécessaires * .extmap.xml, qui sont utilisés par Visual Studio pour emballer automatiquement chaque ensemble dans un fichier zip, qui est ensuite mis en cache indépendamment sur le client (via le navigateur Web).

Si vous regardez dans ce dossier (régler l'emplacement du lecteur d'installation au besoin):

C: \ Program Files (x86) \ Microsoft SDKs \ Silverlight \ v4.0 \ Bibliothèques \ Client

Vous verra qu'il y a des fichiers * .extmap.dll pour presque tous les assemblages Silverlight courants (sinon tous). Par exemple, voici le contenu de 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> 

Si vous suivez la documentation située here, vous verrez comment cela se construit. La plupart des parties devraient être évidentes, avec le seul aspect inhabituel étant l'élément d'extension potentiellement. En plaçant un nom de fichier dans l'attribut downloadUri, l'assemblage est automatiquement compressé dans ce fichier (c'est un fichier zip, mais l'extension peut être tout ce que vous voulez). Lorsque vous faites référence à l'assembly tel que System.Windows.Data, il découvre ce fichier et l'utilise pendant la génération pour créer le fichier zip System.Windows.Data.zip. Si deux ou plusieurs assemblys référencés partagent le même nom de fichier de destination downloadUri, ils seront automatiquement combinés en un seul fichier au moment de la construction. A2) Vous pouvez suivre ce modèle et créer des fichiers * .extmap.dll pour chacun des assemblages que vous avez dans la deuxième liste.

Le fichier XML doit se trouver dans le même dossier que l'assembly que vous avez créé. Pour le GalaSoft.MvvmLight.SL4, (par exemple, je n'ai pas installé ce composant et je ne sais pas s'il est signé). Le fichier sera nommé:

GalaSoft.MvvmLight.SL4.extmap.xml

le contenu Il ressemblerait à quelque chose comme ceci:

<?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> 

Une fois que le fichier existe, Visual Studio va l'utiliser pour créer un fichier zip nommé GalaSoft.MvvmLight.SL4.zip. Tout cela se produit automatiquement une fois que vous faites référence à la DLL (tant que le fichier extmap.xll est côte à côte avec l'assembly d'origine).

+0

Excelent! Merci beaucoup! – Budda