2011-03-01 7 views
3

ne peut pas trouver que je reçois l'erreur suivante dans le concepteur VS2010:Visual Studio 2010 Designer Assemblée

System.Reflection.Adds.UnresolvedAssemblyException univers de type ne peut pas résoudre assemblage: Microsoft.Expression.Interactions, Version = 4.0 .5.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35.

Il s'agit d'un projet Silverlight et l'assemblage manquant est référencé par le projet. Le projet compile et fonctionne bien.

J'ai regardé avec fuslogvw et je ne peux pas trouver ce message d'erreur.

Ai-je besoin de copier la DLL quelque part où le Designer peut la trouver?

+0

avez-vous essayé de référencer à nouveau l'assemblage? De plus, si vous utilisez une DLL externe avec un exemple de code provenant d'exemples en ligne, assurez-vous d'utiliser la même version de la DLL utilisée dans l'exemple. – Majd

Répondre

1

Si vous utilisez .dll zippé téléchargé à partir du Web sous Vista ou Win7, la fonctionnalité OS blocage peut provoquer ce problème. J'ai écrit un blog post last week sur la façon de débloquer avant de décompresser un fichier. Je sais que ça a résolu un problème très similaire à celui que j'avais avec Ninject.

0

J'ai également fait face à ce problème et je l'ai finalement résolu d'une manière inhabituelle mais réussie. Nous utilisons les SDK Blend System.Windows.Interactivity et Microsoft.Expressions.Interactions.

Tout fonctionne correctement, sauf si le concepteur se bloque lors de l'utilisation d'un DataTrigger hérité avec la même exception. Ce ne serait pas le bordel, mais l'exception brise également IntelliSense dans tout le document XAML, ce qui n'est pas acceptable. Comme il s'agit d'une erreur reprocducible et reportet, j'ai décidé de résoudre le problème en utilisant le désassemblage, car nous avons besoin des extensions de l'Interaction Framework.

Voir: http://connect.microsoft.com/VisualStudio/feedback/details/648819/visual-studio-2010-silverlight-designer-crash

simplement obtenir une versions de SharpDevelops ILSpy, et ouvrir les deux assemblées en son sein. Sélectionnez l'assemblage dans la liste et allez dans Fichier -> Enregistrer. Cela va démonter l'ensemble des projets. Intégrez-les dans une solution vide et modifiez les noms d'assembly. Reconstruisez la référence de la bibliothèque Expression.Interactions vers votre nouvelle version désassemblée.

Dans le AssemblyInfo.cs, vous pouvez faire un tour.

En Microsoft.Expression.Interactions:

[assembly: XmlnsPrefix("http://yourdomain.com/interactions", "i")] 
[assembly: XmlnsDefinition("http://yourdomain.com/interactions", "Microsoft.Expression.Interactivity.Core")] 
[assembly: XmlnsDefinition("http://yourdomain.com/interactions", "Microsoft.Expression.Interactivity.Input")] 
[assembly: XmlnsDefinition("http://yourdomain.com/interactions", "Microsoft.Expression.Interactivity.Layout")] 
[assembly: XmlnsDefinition("http://yourdomain.com/interactions", "Microsoft.Expression.Interactivity.Media")] 

dans System.Windows.Interactivity:

[assembly: XmlnsPrefix("http://yourdomain.com/interactions", "i")] 
[assembly: XmlnsDefinition("http://yourdomain.com/interactions", "System.Windows.Interactivity")] 

maintenant mettre une référence aux nouveaux projets dans votre assemblée, ou de construire des ensembles et copier une version d'entre eux dans votre dossier bibliothèques et référencez directement les versions construites.

En XAML ajouter le nouvel espace de noms à votre RootElement comme la page/fenêtre:

<RootElement xmlns:i="http://yourdomain.com/interactions"> 
    <!-- your xaml code --> 
    <i:Interaction.Triggers> ... </i:Interaction.Triggers> 
</RootElement> 

Il fonctionne comme un charme.Vous pouvez utiliser à la fois les fonctionnalités d'interaction et d'expression combinées en un xmlns et, bien sûr, l'exception du concepteur a disparu et IntelliSense ne se cassera plus.