在VS 2012 RC到TPL数据流和TPL引用问题(Problems with reference

2019-06-25 03:57发布

我刚刚升级的Visual Studio 11 Beta版到新的Visual Studio 2012 RC和具有参考TPL数据流的问题。

首先,我想引用数据流和我一样以前,通过添加框架的引用。 但是,当我尝试这样做,我得到一个错误对话框:

以“System.Threading.Tasks.Dataflow”的引用无法添加。

然后整个Visual Studio的冻结。

看完后MEF和TPL数据流的NuGet包的.NET Framework 4.5 RC ,我认为数据流的,在引用列表中显示是某种以前安装的神器版本。 所以,我尝试使用数据流从的NuGet,这似乎工作,直到我真正试图编译我的代码,因为我得到了一个错误:

类型“System.Threading.Tasks.Task”在未引用的组件定义的。 您必须添加到程序集的引用“System.Threading.Tasks,版本= 4.0.0.0,文化=中性公钥= b03f5f7f11d50a3a”。

这是令人困惑,因为Task是在mscorlib程序,没有其他的引用应该是必要的。 但是,有一个叫参考组装System.Threading.Tasks在参考文献列表,所以我想补充一点。 不幸的是,一个熟悉的错误表明:

以“System.Threading.Tasks”的引用无法添加。

然后Visual Studio中再次冻结。

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

Answer 1:

尝试“添加引用”的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目录。

更新 :我在研究这个问题更多的阅读后回答有关取出参考System.Runtime ,我可以添加以下内容:以参考System.Runtime会因为NuGet包的版本当期的错误添加Microsoft.Tpl.Dataflow.4.5.1-rc 。 如果一个引用添加到同一System.Threading.Tasks.Dataflow.dll直接在Visual Studio中没有System.Runtime引用将被添加并没有什么问题存在。

使用的NuGet软件包浏览器可以下载原始Microsoft.Tpl.Dataflow.4.5.1-rc.nupkg从“官方的NuGet包源”。 在封装Matadata一个年底会看到

一个可以修改元数据(按下Ctrl-K),取下参考:

一个后可以保存修改后的文件Microsoft.Tpl.Dataflow.4.5.1-rc.nupkg在某些目录中。 在的NuGet源列表中添加新的位置(本地目录)(参见后这里或点击这里 )将能够从本地源添加新包(不要忘记选择显示所有的软件包包括预发行看到下图):

修改后的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:即使我的答案被标记为已解决,赏金授予问题仍然没有从我的头上去了。 在现实中,我看到两个问题打开:

  1. 为什么不使用的组件的存在System.Runtime可以在项目的builging过程中产生错误。
  2. 我看到的方式卸载或包装的NuGet更新工作如何(见详情更高版本)的一些普遍问题。

让我们接受我们刚才说的第一个问题存在独立于原因的事实。 第二个问题让我坐立不安。 我在这里看到了真正的问题。 每个人都可以做如下的实验,以便更好地理解我:

  1. 创建在Visual Studio 2012 RC一个新的空控制台应用程序。
  2. 验证项目没有提及System.Runtime
  3. 从“工具” /“库包管理器”中打开“软件包管理器控制台”。
  4. 在“包管理器控制台”执行命令“ 安装,包Microsoft.Tpl.Dataflow -售前 ”。
  5. 验证两个System.RuntimeSystem.Threading.Tasks.Dataflow被包含在项目的参考名单。
  6. 在“包管理器控制台”执行命令“ 卸载-包Microsoft.Tpl.Dataflow”。
  7. 验证System.Threading.Tasks.Dataflow从项目引用的列表中删除, System.Runtime仍然在引用的列表

我提出一个更实验和我改变修饰的版本Microsoft.Tpl.Dataflow.4.5.1-rc.nupkg ,其中I除去参照System.Runtime ,从4.5.1-rc4.5.1-rc1和保存在本地(它将被保存在Microsoft.Tpl.Dataflow.4.5.1-rc1.nupkg )。 在那之后我可以看到更新的我的项目列表中的“新”版本:

如果我在安装更新的参考System.Runtime也将不会被删除。

因此,目前执行“更新”,的NuGet的“卸载”的有缺陷或一般的设计问题。 如果我们增加了一个包到我们的项目,使该项目的一些更新,我们会得到所有旧版本的所有相关组件的引用。 旧的引用,从旧版本的软件包通过的NuGet添加,会卸载或更新过程中不会被删除 。 首先,这不是好自己在该项目中引用的垃圾,但由于存在的第一个问题(编译时错误,如果引用未引用System.Runtime存在)的问题会更加严重。

因此,如果没有什么会的NuGet被改变的更新下一个版本Microsoft.Tpl.Dataflow不会解决谁安装的用户问题Microsoft.Tpl.Dataflow版本4.5.1(或可能的早期版本)。 所有的用户将不得不删除提及System.Runtime手动。 我认为这是必须由开发者的NuGet来解决现实的NuGet问题。 我将张贴问题的描述http://nuget.org/以后。

我张贴的NuGet bug报告,可以发现这里 (对不起,文字的不完美格式)。



Answer 2:

根据从MS阿洛克施拉姆,解决的办法是删除提及System.Runtime ,并认为这将被固定在下一版本。

我可以证实,删除该引用实际修复该问题。



文章来源: Problems with references to TPL Dataflow and TPL in VS 2012 RC