【问题标题】:Project using PCL 'TPL Dataflow' won't compile when targetting .NET 4.5.2以 .NET 4.5.2 为目标时,使用 PCL 'TPL Dataflow' 的项目将无法编译
【发布时间】:2014-09-02 17:14:48
【问题描述】:

我使用的是 Windows 7 Pro x64 SP1 和 Visual Studio 2012 Update 4。使用 TPL Dataflow 包和 .NET 4.5.2 时,我无法编译我的 VB.NET WPF 项目。我创建了一个基础项目,除了这段代码之外什么都没有,并且只为 x64 编译:

Imports System.Threading.Tasks.Dataflow

Class MainWindow
    Dim test As New System.Threading.Tasks.Dataflow.BufferBlock(Of String)
End Class

我尝试添加对 System.Runtime.dll 和 System.Diagnostics.Tracing.dll 的外观引用,但没有任何效果。如果我更改为 .NET 4.5,它编译得很好。由于项目中需要它的其他功能,我必须参考 4.5.2。

具体错误:

警告 1 无法解析主要参考“System.Threading.Tasks.Dataflow,Version=4.5.23.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a,processorArchitecture=MSIL”,因为它间接依赖于框架程序集“ System.Runtime,Version=4.0.10.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" 在当前目标框架中无法解决。 “.NETFramework,版本=v4.5.2”。要解决此问题,请删除引用“System.Threading.Tasks.Dataflow, Version=4.5.23.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL”或将您的应用程序重新定位到包含“System.Runtime”的框架版本,版本=4.0.10.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a"。 TPLDataflow4.5.2Demo

警告 2 无法解析主要参考“System.Threading.Tasks.Dataflow,Version=4.5.23.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a,processorArchitecture=MSIL”,因为它间接依赖于框架程序集“ System.Diagnostics.Tracing,Version=4.0.10.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" 在当前目标框架中无法解决。 “.NETFramework,版本=v4.5.2”。要解决此问题,请删除引用“System.Threading.Tasks.Dataflow, Version=4.5.23.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL”或将您的应用程序重新定位到包含“System.Diagnostics”的框架版本.Tracing,版本=4.0.10.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a"。 TPLDataflow4.5.2Demo

警告 3 在 Imports 'System.Threading.Tasks.Dataflow' 中指定的命名空间或类型不包含任何公共成员或无法找到。确保命名空间或类型已定义并包含至少一个公共成员。确保导入的元素名称不使用任何别名。 F:\Projects\TPLDataflow4.5.2Demo\TPLDataflow4.5.2Demo\MainWindow.xaml.vb 1 9 TPLDataflow4.5.2Demo

错误 4 类型“System.Threading.Tasks.Dataflow.BufferBlock”未定义。 F:\Projects\TPLDataflow4.5.2Demo\TPLDataflow4.5.2Demo\MainWindow.xaml.vb 4 21 TPLDataflow4.5.2Demo

解决方案:

事实证明,我使用的 Microsoft .NET Framework 4.5.2 Developer Pack 有一个错误,导致 PCL 无法正确编译。

我从http://support.microsoft.com/kb/2901951 下载并安装了 Microsoft .NET Framework 4.5.2 开发包的更新版本,我的应用程序能够顺利编译。

【问题讨论】:

  • 您如何定位这些版本的运行时和跟踪? .NET 4.0 和 4.5 的正确强名称具有“4.0.0.0”版本
  • TPL Dataflow 是来自 NuGet 的封闭 Microsoft 包,它们在其中引用。我知道 4.5.2 是就地升级,但我不确定你在这里问什么。
  • 另外,这些版本确实来自微软,可以在“C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.2\RedistList\FrameworkList.xml ”。版本是正确的,但由于某种原因,使用 .NET 4.5.2 而不是 4.5 时重定向失败
  • connect 中似乎有一张关于使用 .NET 4.5.2 定位 PCL 库的公开票
  • 看起来确实是这样。我发现所有重定向都作为 .NET 多目标包的一部分存在。适用于 4.5.1 和 4.5,但不适用于 4.5.2。哎呀。我会尝试下载更新,看看它是否修复它。

标签: task-parallel-library portable-class-library tpl-dataflow .net-4.5.2


【解决方案1】:

connect 上有一张票,指定使用 .NET 4.5.2 和 PCL 库导致构建失败。

这已在Microsoft .NET Framework 4.5.2 Developer Pack 中修复

当您重新编译使用 .NET 可移植库以 Microsoft .NET Framework 4.5.2 为目标的 Microsoft .NET Framework 4.5.1 应用程序时,您会在编译期间收到以下错误消息:

类型“{type}”在未引用的程序集中定义。您必须添加对程序集“{assembly}”的引用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-02
    • 1970-01-01
    • 2017-02-12
    • 2011-05-01
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    • 2012-11-08
    相关资源
    最近更新 更多