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

.net 为什么运行时需要Microsoft.Threading.Tasks?,.net,azure,portable-class-library,base-class-library,.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" developmentDepend

我向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
,这样我的主要项目就不包括这些便携设备了。我的印象是,一个.NET4.5应用程序不需要便携包,因为它们已经在.NET的核心中,BCL的东西只在构建时需要


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

问题是,您的库是为了与
Microsoft.Threading.Tasks
(实际上,您可能需要在部署中包括
Microsoft.Threading.Tasks
Microsoft.Threading.Tasks.Extensions
,以及
Microsoft.Threading.Tasks.Extensions.Desktop
)。如果您使用的是.NET 4.5,则这3个DLL中的代码只知道将调用转发到NET framework,如果您使用的是.NET 4.0,则会执行其替换调用


编译后的DLL的“导入”(使用C术语)不会因其运行时环境而改变。您的程序始终必须调用该代理,该代理在4.5系统上的作用可能很小,但调用仍然必须发生。

如果您的目标是4.5,为什么要包含
Microsoft.Bcl.Async
?这些包允许.NET 4.0项目访问.NET 4.5tures(async/await和一些其他调用)。便携库需要它们能够支持非4.5项目的功能。门户项目B依赖于上述内容,我的库A依赖于B,是4.5,我想知道为什么我的4.5应用程序也需要上述内容。