来自程序集的类型是使用旧版本的 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 项目中不受支持的主要内容,如果未能解决你的问题,请参考以下文章

旧版本的 Facebook 但我想要应用程序邀请 如何?

使用来自另一个 MEF 程序集的类而不引用它

来自同一程序集的System.Type类型对象的哈希码是否保证唯一?

卸载旧的 Android SDK 版本

.NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化

我可以针对较新的 android SDK 构建而不排除旧手机的所有者吗?