为什么运行时需要Microsoft.Threading.Tasks?

时间:2014-07-23 21:05:30

标签: .net azure portable-class-library base-class-library

我为Azure部署了一个解决方案,发现Microsoft.Threading.Tasks丢失,无法加载应用程序。

我参考的一个项目是使用便携式的东西

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Microsoft.Bcl" version="1.1.9" targetFramework="portable-net45+sl50+win+wp80" developmentDependency="true" />
  <package id="Microsoft.Bcl.Async" version="1.0.168" targetFramework="portable-net45+sl50+win+wp80" developmentDependency="true" />
  <package id="Microsoft.Bcl.Build" version="1.0.14" targetFramework="portable-net45+sl50+win+wp80" developmentDependency="true" />
  <package id="Microsoft.Net.Http" version="2.2.22" targetFramework="portable-net45+sl50+win+wp80" developmentDependency="true" />
  <package id="Newtonsoft.Json" version="6.0.3" targetFramework="portable-net45+sl50+win+wp80" />
</packages>

我将这些标记为developmentDependency,因此我的主要项目不包括这些便携式计算机。我的印象是.NET 4.5应用程序不需要可移植软件包,因为它们已经应该位于.NET的核心中,并且仅在构建时需要BCL内容。

我的假设是错的吗?我是否仍应在我的.NET 4.5应用程序中包含Microsoft.Bcl.BuildMicrosoft.Bcl.Async

1 个答案:

答案 0 :(得分:2)

问题是你的图书馆被编译为与Microsoft.Threading.Tasks内的“某事”对话(实际上你可能需要包括Microsoft.Threading.TasksMicrosoft.Threading.Tasks.ExtensionsMicrosoft.Threading.Tasks.Extensions.Desktop你的部署)。如果您使用的是.NET 4.5,那么这3个DLL中的代码只需要将调用转发到.NET框架,如果您使用的是.NET 4.0,它会进行替换调用。

您编译的DLL的“Imports”(使用C术语)不会根据其运行时环境而改变。你的程序总是必须打电话给那个代理,代理在4.5系统上可能做的很少,但是呼叫仍然必须发生。