尝试从C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5 显式“添加引用”System.Threading.Tasks.dll。或者,您可以使用C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Facades 目录。
更新:在阅读the answer 后,我进一步检查了有关删除对System.Runtime 的引用的问题,我可以添加以下内容:将添加对System.Runtime 的引用,因为NuGet 包Microsoft.Tpl.Dataflow.4.5.1-rc 的当前版本出错。如果直接在 Visual Studio 中添加对同一 System.Threading.Tasks.Dataflow.dll 的引用,则不会添加 System.Runtime 引用,也不存在任何问题。
使用NuGet Package Explorer可以从“NuGet官方包源”下载原版Microsoft.Tpl.Dataflow.4.5.1-rc.nupkg。在 Package Matadata 的末尾会看到
可以修改元数据(按Ctrl-K)并删除引用:
之后可以将修改后的文件Microsoft.Tpl.Dataflow.4.5.1-rc.nupkg保存在某个目录中。在 NuGet 源列表(请参阅here 或 here)中添加新位置(本地目录)后,将能够从本地源添加新包(不要忘记选择显示所有包,包括 pre -release 见下图):
修改后的Microsoft.Tpl.Dataflow.4.5.1-rc.nupkg不会添加System.Runtime,项目编译不会出错。
所以这个错误在 Visual Studio 2012 RC 中不存在,甚至在 Microsoft.Tpl.Dataflow.dll 中也不存在。该错误仅在“NuGet 官方包源”上当前可用的Microsoft.Tpl.Dataflow NuGet 包的预发布版本的元数据中。
您可以将错误报告发布到autors,以便修复包。
已更新 2:即使我的答案已被标记为已解决,并且授予问题的赏金仍然没有从我的脑海中消失。实际上,我看到了两个未解决的问题:
- 为什么存在未使用的程序集
System.Runtime会在项目构建过程中产生错误。
- 我发现卸载或更新 NuGet 包的工作方式存在一些一般性问题(请参阅后面的详细信息)。
让我们接受这样一个事实,即第一个问题独立于原因而存在。第二个问题让我坐立不安。我在这里看到了真正的问题。大家可以做以下实验来更好地理解我:
- 在 Visual Studio 2012 RC 中创建一个新的空控制台应用程序。
- 验证项目没有引用
System.Runtime。
- 从“工具”/“库包管理器”打开“包管理器控制台”。
- 在“包管理器控制台”中执行命令“Install-Package Microsoft.Tpl.Dataflow -Pre”。
- 确认
System.Runtime 和System.Threading.Tasks.Dataflow 都包含在项目的引用列表中。
- 在“包管理器控制台”中执行命令“Uninstall-Package Microsoft.Tpl.Dataflow”。
- 确认
System.Threading.Tasks.Dataflow 已从项目的引用列表中删除,但 System.Runtime 仍在引用列表中。
我又做了一个实验,修改了Microsoft.Tpl.Dataflow.4.5.1-rc.nupkg的版本,把System.Runtime的引用从4.5.1-rc删除到4.5.1-rc1,并保存在本地(会保存在Microsoft.Tpl.Dataflow.4.5.1-rc1.nupkg下) )。之后,我可以在我的项目更新列表中看到“新”版本:
如果我安装更新,对 System.Runtime 的引用也不会被删除。
因此,NuGet 的“更新”和“卸载”的当前实现存在错误或一般设计问题。如果我们向我们的项目添加一个包并对项目进行一些更新,我们将获得所有旧版本的所有依赖程序集的引用。 在卸载或更新期间不会删除由 NuGet 从旧版本包中添加的旧引用。首先项目引用有垃圾本身不好,但是由于存在第一个问题(如果存在对未引用的System.Runtime的引用,则编译时出错)问题会更加严重。
因此,如果在 NuGet 中没有任何变化,则更新到下一个版本的 Microsoft.Tpl.Dataflow 将无法解决在版本 4.5.1(或可能是早期版本)中安装 Microsoft.Tpl.Dataflow 的用户的问题。所有用户都必须手动删除对System.Runtime 的引用。我认为这是真正的 NuGet 问题,必须由 NuGet 开发人员解决。稍后我会将问题描述发到http://nuget.org/。
我发布到 NuGet 的错误报告可以在 here 找到(抱歉文本格式不完美)。