gpt4 book ai didi

.net - 在 VS 2012 RC 中引用 TPL 数据流和 TPL 的问题

转载 作者:行者123 更新时间:2023-12-03 20:10:52 28 4
gpt4 key购买 nike

我刚刚将 Visual Studio 11 Beta 升级到新的 Visual Studio 2012 RC,并且在引用 TPL 数据流时遇到了问题。

首先,我尝试像以前一样通过从框架中添加引用来引用 Dataflow。但是当我尝试这样做时,我收到一个错误框:

A reference to 'System.Threading.Tasks.Dataflow' could not be added.



然后整个 Visual Studio 卡住。

阅读后 MEF and TPL Dataflow NuGet Packages for .NET Framework 4.5 RC ,我假设引用列表中显示的 Dataflow 版本是以前安装的某种工件。因此,我尝试使用 NuGet 中的 Dataflow,这似乎有效,直到我真正尝试编译我的代码,因为出现错误:

The type 'System.Threading.Tasks.Task' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Threading.Tasks, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.



这令人困惑,因为 Task在 mscorlib 中,不需要其他引用。但是有一个名为 System.Threading.Tasks 的引用程序集在引用列表中,所以我尝试添加它。不幸的是,一个熟悉的错误显示:

A reference to 'System.Threading.Tasks' could not be added.



然后 Visual Studio 再次卡住。

难道我做错了什么?如何在 VS 2012 RC 中使用 TPL 数据流?

最佳答案

尝试“添加引用”System.Threading.Tasks.dll明确来自 C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5 .或者,您可以使用 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 .如果添加对相同的引用 System.Threading.Tasks.Dataflow.dll直接在 Visual Studio 中没有 System.Runtime将添加引用,不存在问题。

使用 NuGet Package Explorer一个可以下载原版Microsoft.Tpl.Dataflow.4.5.1-rc.nupkg来自“NuGet 官方包源”。在 Package Matadata 的末尾,你会看到

enter image description here

可以修改元数据(按 Ctrl-K)并删除引用:

enter image description here

之后可以保存修改后的文件Microsoft.Tpl.Dataflow.4.5.1-rc.nupkg在某个目录中。在 NuGet 源列表(参见 herehere )中添加新位置(本地目录)后,您将能够从本地源添加新包(不要忘记选择显示所有包,包括 pre -发布见下图):

enter image description here

修改版Microsoft.Tpl.Dataflow.4.5.1-rc.nupkg不会添加 System.Runtime并且该项目将被编译而不会出错。

因此该错误不存在于 Visual Studio 2012 RC 中,甚至不存在于 Microsoft.Tpl.Dataflow.dll 中。 .该错误仅存在于 Microsoft.Tpl.Dataflow 的预发布版本的元数据中。 NuGet 包目前在“NuGet 官方包源”上可用。

您可以将错误报告发布到 autors以便修复包。

更新 2 :即使我的答案已经被标记为已解决,并且问题的赏金仍然不会从我的脑海中消失。实际上,我看到两个 Unresolved 问题:

  • 为什么存在未使用的程序集System.Runtime可能会在项目的构建过程中产生错误。
  • 我发现 NuGet 包的卸载或更新的工作方式存在一些常见问题(请参阅稍后的详细信息)。

  • 让我们接受这样一个事实,即第一个问题独立于原因而存在。第二个问题让我坐立不安。我在这里看到了真正的问题。大家可以做以下实验来更好的理解我:
  • 在 Visual Studio 2012 RC 中创建一个新的空控制台应用程序。
  • 验证项目是否没有引用 System.Runtime .
  • 从“工具”/“库包管理器”打开“包管理器控制台”。
  • 在“包管理器控制台”中执行命令“Install-Package Microsoft.Tpl.Dataflow -Pre”。
  • 验证 System.RuntimeSystem.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-rc4.5.1-rc1并将其保存在本地(它将保存在 Microsoft.Tpl.Dataflow.4.5.1-rc1.nupkg 下)。之后,我可以在我的项目的更新列表中看到"new"版本:

    enter image description here

    如果我安装更新引用 System.Runtime也不会被删除。

    所以目前 NuGet 的“更新”和“卸载”的实现存在 bug 或一般设计问题。如果我们向我们的项目添加一个包并对项目进行一些更新,我们将获得所有旧版本的所有依赖程序集的引用。 NuGet 从旧版本的包中添加的旧引用不会在卸载或更新过程中删除 .首先项目引用有垃圾本身不好,但是因为存在第一个问题(如果引用未引用的 System.Runtime存在编译错误),问题会更加严重。

    因此,如果 NuGet 中没有任何变化,则更新到 Microsoft.Tpl.Dataflow 的下一个版本不会为安装了 Microsoft.Tpl.Dataflow的用户解决问题在 4.5.1 版(或可能是早期版本)中。所有用户都必须删除对 System.Runtime 的引用。手动。我认为这是真正的 NuGet 问题,必须由 NuGet 开发人员解决。我会把问题的描述贴到 http://nuget.org/之后。

    可以找到我发布到 NuGet 的错误报告 here (对不起,文本格式不完美)。

    关于.net - 在 VS 2012 RC 中引用 TPL 数据流和 TPL 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10869730/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com