我刚刚升级的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?
尝试“添加引用”的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:即使我的答案被标记为已解决,赏金授予问题仍然没有从我的头上去了。 在现实中,我看到两个问题打开:
- 为什么不使用的组件的存在
System.Runtime
可以在项目的builging过程中产生错误。 - 我看到的方式卸载或包装的NuGet更新工作如何(见详情更高版本)的一些普遍问题。
让我们接受我们刚才说的第一个问题存在独立于原因的事实。 第二个问题让我坐立不安。 我在这里看到了真正的问题。 每个人都可以做如下的实验,以便更好地理解我:
- 创建在Visual Studio 2012 RC一个新的空控制台应用程序。
- 验证项目没有提及
System.Runtime
。 - 从“工具” /“库包管理器”中打开“软件包管理器控制台”。
- 在“包管理器控制台”执行命令“ 安装,包Microsoft.Tpl.Dataflow -售前 ”。
- 验证两个
System.Runtime
和System.Threading.Tasks.Dataflow
被包含在项目的参考名单。 - 在“包管理器控制台”执行命令“ 卸载-包Microsoft.Tpl.Dataflow”。
- 验证
System.Threading.Tasks.Dataflow
从项目引用的列表中删除, 但System.Runtime
仍然在引用的列表 。
我提出一个更实验和我改变修饰的版本Microsoft.Tpl.Dataflow.4.5.1-rc.nupkg
,其中I除去参照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
不会解决谁安装的用户问题Microsoft.Tpl.Dataflow
版本4.5.1(或可能的早期版本)。 所有的用户将不得不删除提及System.Runtime
手动。 我认为这是必须由开发者的NuGet来解决现实的NuGet问题。 我将张贴问题的描述http://nuget.org/以后。
我张贴的NuGet bug报告,可以发现这里 (对不起,文字的不完美格式)。
根据从MS阿洛克施拉姆,解决的办法是删除提及System.Runtime ,并认为这将被固定在下一版本。
我可以证实,删除该引用实际修复该问题。