2011-06-03 4 views
3

J'ai une application WPF et une application Silverlight. Ils sont tous les deux utilisés pour afficher une carte et partager certaines des mêmes fonctionnalités. J'ai créé un projet de bibliothèque de classe Silverlight afin de rester DRY. Je fais référence à cela à la fois à Silverlight et à WPF. Il contient des méthodes utilitaires utiles dans les deux projets. Par exemple, j'ai cette méthode:Erreurs lors du référencement de la bibliothèque de classes Silverlight à partir de l'application WPF

public static void CenterText(TextBlock name, Polygon poly) 

Le projet silverlight n'a aucun problème avec cela. Cependant, je reçois l'erreur suivante lorsque vous appelez cela de mon application WPF:

Le type « System.Windows.Shapes.Polygon » est défini dans un assemblage non référencé. Vous devez ajouter une référence à l'assemblage 'System.Windows, Version = 2.0.5.0, Culture = neutral, PublicKeyToken = 7cec85d7bea7798e'

Cependant, j'ai cette ligne en haut du fichier:

using System.Windows.Shapes; 

alors WPF peut voir la classe Polygon parfaitement bien. Je suppose que la bibliothèque de classes silverlight utilise une version de l'infrastructure qui n'est pas compatible avec la version utilisée par le projet WPF.

Donc la question est, suis-je coincé réécrire exactement le même code dans mon application WPF ou est-il un moyen que je peux partager entre les deux?

Merci!

Répondre

4

Vous avez raison, Silverlight utilise une version complètement séparée du framework. C'est beaucoup, beaucoup plus petit que l'événement .NET client runtime. Cela signifie que vous ne pouvez pas mélanger des assemblys WPF et Silverlight dans la même application.

2

Dans Silverlight la classe est dans System.Windows.dll tandis que dans WPF c'est dans PresentationFramework.dll que la bibliothèque essaye de mettre la main sur l'assembly Silverlight qui n'est pas référencé par défaut dans une application WPF.

+0

Cela a du sens. Et il semble qu'il n'y ait pas d'assembly System.Windows à référencer dans .NET4 – Erix

+0

Eh bien, vous pouvez le référencer si vous obtenez la DLL depuis le dossier respectif, le problème est que cela ne fonctionnera pas puisque les deux assemblages contiennent des types avec le même espace de noms et nom donc il y aurait des conflits. –

3

J'ai rencontré cette erreur parce que j'avais téléchargé le SDK Expression Blend pour Silverlight au lieu de ce que je devrais avoir téléchargé: Microsoft Expression Blend Kit de développement logiciel (SDK) pour .NET 4. Il peut être trouvé sur le site MSFT, ici :

http://www.microsoft.com/en-us/download/details.aspx?id=10801

dès que je l'ai téléchargé expression SDK Blend pour .Net, enlevé tous SDK Blend pour les références Silverlight, et ajouté les mêmes références que Blend pour .Net, j'étais et en cours d'exécution.

+0

+1 pour le lien et l'info sur les différents paquets. J'ai cherché la DLL System.Windows.Interactivity et a été pointé vers le package SL quand je ne le voulais pas vraiment. – StingyJack

Questions connexes