我在VS2010设计器中遇到以下错误:
System.Reflection.Adds.UnresolvedAssemblyException 类型Universe无法解析程序集:Microsoft.Expression.Interactions,Version = 4.0.5.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35。
这是一个Silverlight项目,项目引用了缺少的程序集。该项目编译并运行良好。
我用fuslogvw查看了,我找不到该错误信息。
我是否需要将dll复制到Designer可以找到的地方?
答案 0 :(得分:1)
此程序集是Blend SDK的一部分。你可以从这里免费安装它: Microsoft Expression Blend Software Development Kit (SDK) for .NET 4
答案 1 :(得分:1)
如果您使用的是在Vista或Win7下从网上下载的压缩.dll,则操作系统阻止功能可能会导致此问题。我写了一篇关于如何在解压缩文件之前取消阻止的blog post last week。我知道它解决了我和Ninject一样的问题。
答案 2 :(得分:0)
我也遇到了这个问题,最终以一种不寻常但成功的方式解决了这个问题。
我们正在使用Blend SDK的System.Windows.Interactivity
和Microsoft.Expressions.Interactions
。
一切正常,除非设计人员在使用具有相同异常的继承DataTrigger
时崩溃。这不会是混乱,但例外也会破坏整个XAML文档中的IntelliSense,这是不可接受的。
由于这是一个可再发送和报告错误,我决定使用反汇编来解决问题,因为我们需要对交互框架进行扩展。
只需获取SharpDevelops版本的ILSpy,然后在其中打开两个程序集。从列表中选择程序集,然后转到文件 - >保存。这将拆解整个项目。将这些集成在空白解决方案中并更改程序集名称。将Expression.Interactions库中的引用重建为新的反汇编版本。
在AssemblyInfo.cs
你可以做一招。
在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")]
System.Windows.Interactivity
中的:
[assembly: XmlnsPrefix("http://yourdomain.com/interactions", "i")]
[assembly: XmlnsDefinition("http://yourdomain.com/interactions", "System.Windows.Interactivity")]
现在在程序集中引用新项目,或者构建程序集并将它们的版本复制到libraries文件夹并直接引用构建的版本。
在XAML中,将新命名空间添加到您的rootelement,如页面/窗口:
<RootElement xmlns:i="http://yourdomain.com/interactions">
<!-- your xaml code -->
<i:Interaction.Triggers> ... </i:Interaction.Triggers>
</RootElement>
它就像一个魅力。您可以将交互和表达式功能组合到一个xmlns中,当然,设计器异常消失了,IntelliSense将不再中断。