尝试明确地从'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'目录。更新后,我在阅读有关删除对'System.Runtime'引用的
答案后更详细地研究了该问题并可以添加以下内容:由于NuGet软件包'Microsoft.Tpl.Dataflow.4.5.1-rc'当前版本中的错误,将添加对'System.Runtime'的引用。如果在Visual Studio中直接添加对相同的'System.Threading.Tasks.Dataflow.dll'的引用,则不会添加'System.Runtime'引用,也不存在任何问题。
使用
NuGet Package Explorer,可以从“NuGet官方软件包源”下载原始的
Microsoft.Tpl.Dataflow.4.5.1-rc.nupkg
。在软件包元数据的末尾,您将看到
您可以修改元数据(按下Ctrl-K),并删除引用:
![enter image description here](https://istack.dev59.com/TsPM6.webp)
接下来,您可以将修改后的文件Microsoft.Tpl.Dataflow.4.5.1-rc.nupkg
保存到某个目录中。在NuGet源列表中添加新位置(本地目录)之后(请参见此处或此处),您将能够从本地源添加新软件包(不要忘记选择显示所有软件包包括预发布版本,请参见下面的图片):
![enter image description here](https://istack.dev59.com/60oX2.webp)
修改后的
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:即使我的答案已被标记为已解决并获得了悬赏,问题仍然存在于我的头脑中。实际上,我看到两个未解决的问题:
1.为什么存在未使用的程序集
System.Runtime
会在构建项目时产生错误。
2.我注意到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
版本更改为本地保存的4.5.1-rc1
版本,并删除了对System.Runtime
的引用。此后,我可以在我的项目更新列表中看到“新”的版本:
![enter image description here](https://istack.dev59.com/icTHg.webp)
如果我安装更新,对于System.Runtime的引用也不会被删除。因此,NuGet的"更新"和"卸载"当前实现存在缺陷或一般性设计问题。如果我们将一个包添加到我们的项目中并对该项目进行一些更新,我们将获得所有旧版本的所有依赖程序集的引用。旧版本包由NuGet添加的旧引用在卸载或更新期间不会被删除。首先,在项目引用中存在垃圾本身就不好,但是由于存在第一个问题(如果未引用的System.Runtime引用存在,则编译时出错),问题甚至会更加严重。
因此,如果NuGet中没有任何更改,那么更新到下一个版本的Microsoft.Tpl.Dataflow
将无法解决已安装Microsoft.Tpl.Dataflow
4.5.1(或可能早期版本)的用户的问题。所有用户都必须手动删除对System.Runtime
的引用。我认为这是真正的NuGet问题,必须由NuGet开发人员解决。我稍后将在http://nuget.org/上发布该问题的描述。
我提交给NuGet的错误报告可以在这里找到(抱歉文本格式不完美)。