4

J'ai une bibliothèque de classes WPF .NET 4.0 faisant référence à une bibliothèque de classes Silverlight 4.Problème de partage d'assembly Silverlight 4

La bibliothèque SL compile très bien mais quand je compile la bibliothèque de classes WPF, je reçois:

Error 2 Unknown build error, 'Cannot resolve dependency to assembly 'System.Windows, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e' because it has not been preloaded. When using the ReflectionOnly APIs, dependent assemblies must be pre-loaded or loaded on demand through the ReflectionOnlyAssemblyResolve event.' MyProj.Presentation.Wpf 

je me dis que le problème doit être similaire à celui mentionné ici: http://markti.spaces.live.com/blog/cns!D92CF278F0F91957!273.entry

mais mon WPF La bibliothèque ne contient aucun code XAML qui référence un contrôle utilisateur de ma bibliothèque SL. En fait, ma bibliothèque SL ne contient aucun code XAML. Il possède cependant plusieurs DependencyObjects partagés, tels qu'un EventCommander (liaison d'événements d'élément d'interface utilisateur aux Commandes) et certains helpers DataTemplate.

Y at-il un moyen de réduire le problème ici? Et quelqu'un a-t-il trouvé un moyen de référencer efficacement les éléments de l'interface utilisateur dans un projet SL4 à partir de .NET 4.0?

Merci.

Répondre

4

cette

Quelqu'un connaît un moyen de référencer un ensemble SL4 avec références System.Windows à partir d'un assemblage .NET complet (sans juste relier les fichiers et la création de deux projets différents pour maintenir)?

n'est pas possible pour le moment. Référencer des assemblys SL dans des projets .NET ne fonctionnera que si le projet SL ne référence aucun assemblage autre que mscorlib, System, System.Core, System.ComponentModel.Composition et Microsoft.VisualBasic. L'ajout d'un projet WPF et la liaison de vos fichiers SL dans ce projet est la seule façon de réutiliser votre code SL s'il utilise, par ex. System.Windows.

Cheers, Alex

+0

Merci. Une autre question: si je peux l'obtenir pour compiler, et je sais que je n'utilise aucune surface, est-ce que je peux tromper le temps d'exécution pour utiliser un assemblage? En ce moment j'essaye de partager un assembly qui utilise System.Xml.Linq, mais je reçois Impossible de charger le fichier ou l'assembly 'System.Xml.Linq, Version = 2.0.5.0, Culture = neutre, PublicKeyToken = 31bf3856ad364e35' ou une de ses dépendances. J'ai essayé de me lier à l'événement AppDomain AssemblyResolve et de charger manuellement l'ensemble .NET System.Xml.Linq complet, mais j'obtiens une exception de non-concordance de définition de manifeste à la place. – Jeff

+0

Je reçois le même message d'erreur mais la solution ne fonctionne pas. – eros

0

Trouvé! J'ai eu quelques xmlns namespaces définies dans ma bibliothèque de classe SL4 comme:

using System.Windows.Markup; 

[assembly: XmlnsDefinition("http://MyProj/Presentation", "MyProj.Presentation")] 
[assembly: XmlnsDefinition("http://MyProj/Presentation", "MyProj.Presentation.Controls")] 

et qui ont empêché l'assemblage WPF de référence, en produisant l'erreur mentionnée ci-dessus. Il suffit de déplacer les déclarations d'espace de noms dans le projet WPF pour fixer ...

[Modifier]

Ok, donc le problème est résolu ... mais personne ne sait d'un moyen de référencer un ensemble SL4 avec le système. Références Windows à partir d'un assembly .NET complet (sans simplement lier les fichiers et créer deux projets différents à maintenir)?

+0

Est-ce une réponse ou question? – AnthonyWJones

+0

Les deux, désolé. C'est ma réponse à la façon dont j'ai résolu le problème immédiat mais la question est toujours ouverte ...Plus précisément, j'aimerais toujours trouver une façon de faire du partage sans que le problème ne soit mentionné. Est-ce que vous suggéreriez de mettre cela dans ma question initiale ou de la laisser comme réponse? Merci. – Jeff