来自程序集的类型是使用旧版本的 blend sdk 构建的,并且在 Windows Presentation Foundation 4 项目中不受支持
Posted
技术标签:
【中文标题】来自程序集的类型是使用旧版本的 blend sdk 构建的,并且在 Windows Presentation Foundation 4 项目中不受支持【英文标题】:the type from assembly is built with an older version of blend sdk and is not supported in a windows presentation foundation 4 project 【发布时间】:2015-11-08 12:49:41 【问题描述】:我在 VS 2013 中创建了一个 WPF 项目。升级到 VS 2015 后,设计器在从 Blend SDK 派生的类型上显示此错误:
来自程序集的类型是使用旧版本的 blend sdk 构建的,并且 在 Windows Presentation Foundation 4 项目中不受支持
【问题讨论】:
【参考方案1】:以管理员身份运行命令提示符
将目录更改为 Blend SDK:cd C:\Program Files (x86)\Microsoft SDKs\Expression\Blend\.NETFramework\v4.5\Libraries\
注册 DLL:gacutil -i System.Windows.Interactivity.dll
重启 Visual Studio
参考:https://connect.microsoft.com/VisualStudio/feedback/details/755407/xaml-designer-will-not-display-when-using-blend-sdk-behaviors
【讨论】:
为我工作。非常感谢!只是想你可以澄清它是 VS 的开发者 cmd 提示符,而不是通用的 Windows 提示符 您还可以通过从 Microsoft 下载最新的 NuGet 包来解决该问题:nuget.org/packages/Expression.Blend.Sdk.WPF,使用包管理器控制台中的Install-Package Expression.Blend.Sdk.WPF
。
@Alex - 这并没有为我解决问题。
如果您安装了 Visual Studio 2015,请使用“VS2015 开发人员命令提示符”而不是常规 cmd。 ***.com/a/40434598/3895469
@HristoYankov,FWIW,System.Windows.Interactivity.WPF NuGet 包适合我。 :-)【参考方案2】:
您可以通过手动更改 .sln 和 .csproj 文件中的版本号来解决此问题。
在 .csproj 和 .csproj.user 中
将 ToolsVersion
更改为您当前的 Visual Studio 版本。 VS 2013是12版,VS 2015是14版。
在.sln 中将VisualStudioVersion
更改为当前版本,您可以在“关于”窗口中找到它。
还将Microsoft Visual Studio Solution File, Format Version
更改为您当前的版本(例如14.00、12.00)
注意:这仅适用于内置程序集。如果外部依赖项(如 Prism)导致此错误,您必须使用新的 Blend SDK 重新编译它们。您也可以尝试更新依赖,可能最新版本已经使用最新的 Blend SDK 编译。
【讨论】:
在使用 Prism 库的“InteractionRequestTrigger”机制时,我遇到了同样的错误。不幸的是,此处提供的解决方案没有帮助。 @tmatuschek 此解决方案仅适用于内置类型。我相信您的 Prism dll 是使用旧版本的 SDK 构建的。要消除错误,您需要使用新版 SDK(使用 Visual Studio 2015)构建的 Prism dll。也许尝试下载最新版本的 Prism dll。 感谢您的回复。而且我认为您假设我需要使用正确版本的 Blend SDK 构建的新版本 Prism 是正确的。不幸的是,我已经在使用最新版本的 Prism 库(6.0.1)。我在 Prism github 上发布了一个问题。我只是想在这里评论一下,如果其他人在这里遇到同样的问题。 是的,当然,我以为我已经这样做了!这是:github.com/PrismLibrary/Prism/issues/213 这也不适用于同一程序集中定义的自定义行为。它实际上只适用于 Microsoft.Expression.Interactions 中定义的混合行为【参考方案3】:这里没有其他答案对我有用。最终解决的方法是删除 SDK 文件夹中的 .NET v4.0 版本的文件:
C:\Program Files (x86)\Microsoft SDKs\Expression\Blend\.NETFramework\v4.0\Libraries\
我正在通过 NuGet 引用 v4.5 文件,但似乎 设计者 在上述文件夹中找到了该文件。 v4.0 文件未在 GAC 中注册。
【讨论】:
谢谢你,救了我的命! :D 我没有删除,只是重命名了【参考方案4】:流行的答案是有效的,但由于开发人员世界总是在变化,我想我会注意到现在有一个(IMO)更好的解决方案。
2018 年 12 月,Microsoft 为 WPF 的 XAML 行为发布了一个官方的、开源的、受支持的 NuGet 包。 (UWP 有一个单独的。)迁移到这个包非常容易。您需要卸载当前的 NuGet 包,删除几个引用,安装此包,并更改 using 语句(或 FQN)。
https://www.nuget.org/packages/Microsoft.Xaml.Behaviors.Wpf/
https://devblogs.microsoft.com/dotnet/open-sourcing-xaml-behaviors-for-wpf/
我在这个 SO 答案中读到了它,所以归功于那个 OP:
How to add System.Windows.Interactivity to project?
【讨论】:
【参考方案5】:使用 Visual Studio 2017 时遇到类似问题,但以上答案都没有为我完全解决。找到了一个 Microsoft 开发人员社区 page,它有一个解决方法。 Bran Hagger 的评论建议从解决方案的目录中删除 .vs
文件夹。这个额外的步骤清除了缓存并导致 Visual Studio 重新构建它。
【讨论】:
【参考方案6】:只是 Microsoft Visual Studio 解决方案文件,格式版本更改为 14.00 对我有用。
【讨论】:
您当时使用的是哪个版本的 Visual Studio?【参考方案7】:这也可能是您混合了不同版本的 System.Windows.Interactivity.dll
,特别是如果您从 nuget 获取 SDK,其中有几个不同的软件包提供它,例如:
https://www.nuget.org/packages/Expression.Blend.Sdk/ https://www.nuget.org/packages/System.Windows.Interactivity.WPF/
在这种情况下,您必须在项目之间同步这些库。
【讨论】:
【参考方案8】:删除解决方案文件夹中的 .vs 文件解决了该问题。在我更新了我的 Visual Studio 2017 并打开了之前使用旧版本的 Visual Studio 2017 构建的项目后,这个问题发生在我身上。
【讨论】:
以上是关于来自程序集的类型是使用旧版本的 blend sdk 构建的,并且在 Windows Presentation Foundation 4 项目中不受支持的主要内容,如果未能解决你的问题,请参考以下文章
来自同一程序集的System.Type类型对象的哈希码是否保证唯一?