2009-10-12 10 views
4

J'ai une bibliothèque de classes Silverlight qui est utilisée par l'application Silverlight et un service C# WCF normal.Utilisation de différentes versions de DLL dans une application

L'application Silverlight appelle le service WCF pour lire/écrire certaines données. Ils utilisent tous deux la bibliothèque commune pour manipuler les données transmises.

Tout compile bien, mais quand nous courons l'application, le webservice jette l'erreur suivante lorsque l'appel à la bibliothèque silverlight est faite:

« Impossible de charger le fichier ou l'assembly « System.Xml, Version 2.0 = .5.0, Culture = neutral, PublicKeyToken = 7cec85d7bea7798e 'ou une de ses dépendances Le système ne trouve pas le fichier spécifié. " Cela est dû au fait que la bibliothèque de classes silverlight fait référence à la version 2.0.5 de System.Xml, mais que le service WCF fait référence à la version 3.5 de System.Xml.

Existe-t-il un moyen de référencer les deux versions et de ne pas obtenir l'erreur?

+0

Cela n'a pas beaucoup de sens. WCF s'exécute sur un moteur d'exécution différent de Silverlight. –

+0

En outre, Silverlight s'exécute sur le client et le WCF sur le serveur. Je suppose que cette erreur se rapporte à la partie serveur WCF et n'est donc pas liée à Silverlight sauf si votre contrat de service arrive à conserver une valeur fortement typée ou un ensemble de valeurs qui ne peuvent pas être recréées dans WCF. Dans ce cas, vous devez modifier votre contrat pour qu'il contienne des types pris en charge correctement des deux côtés du service. –

Répondre

2

Si vous disposez de la source pour la bibliothèque commune, la meilleure approche consiste à avoir 3 projets, une fois pour SL, un pour WCF et un pour la source de bibliothèque partagée. Vous pouvez ensuite référencer les fichiers source de la bibliothèque partagée dans les projets SL et WCF en utilisant l'option de lien add as de Visual Studio. Les fichiers source peuvent ensuite être compilés avec les versions correctes de la bibliothèque .Net. La bonne chose à ce sujet est dû à la source étant des copies de référence, lorsque vous apportez des modifications à la bibliothèque partagée, les projets SL et WCF sont mis à jour sans aucune duplication.

Nous avons utilisé cette approche dans notre produit et cela fonctionne très bien.

HTH

+0

Merci Andy, Qui a résolu notre problème. – Zak

2

Non ce n'est pas pris en charge dans le CLR (sans beaucoup de piratage). La raison en est à cause d'une limitation fondamentale du CLR. A savoir qu'un seul mscorlib peut être chargé dans une instance du CLR.

Si vous avez 2 versions de System.Xml.dll, le référentiel référencera 2 versions différentes de mscorlib. Cela est particulièrement vrai pour un projet Silverlight et non-Silverlight qui ont des DLL mscorlib et BCL radicalement différentes. Par conséquent lorsque vous essayez de charger la deuxième DLL System.Xml, il finira par essayer de charger le différent mscorlib qui est lié à échouer.

La raison pour laquelle j'ai ajouté la mise en garde «sans beaucoup de piratage» est la redirection de liaison. Je suis sûr qu'il y a une belle magie de liaison que vous pouvez insérer dans app.config qui redirigera le fichier Silverlight System.Xml vers le fichier System.Xml complet pour le charger de manière fonctionnelle. Cependant, cela conduirait presque certainement à des erreurs plus graves au cours de l'exécution du programme.

+0

Est-ce que cela ne vient pas à .NET 4.0? – ParmesanCodice

+0

Cela n'a aucun sens. Silverlight s'exécute sur le client dans le plug-in Silverlight (clair de lune) alors que le service WCF s'exécute sur le serveur. Il n'y a pas de réutilisation du même CLR ici. Si quelque chose, il s'agit d'un problème de contrat de service et de marsatage de type de données. –

+0

@Jeff, comment cela n'a-t-il pas de sens? L'utilisateur dit qu'il reçoit une erreur en essayant de charger un second système.Xml dans leur processus et le numéro de version indique clairement qu'il s'agit de la version Silverlight. Je suis d'accord que le scénario est bizarre, mais je dois aller avec ce que le PO dit les symptômes sont. Je crois que mon analyse du scénario décrit par le PO est 100% correcte. Je ne sais pas pourquoi je reçois le downvote ici. – JaredPar

Questions connexes