【问题标题】:Why is Microsoft.Threading.Tasks needed at runtime?为什么在运行时需要 Microsoft.Threading.Tasks?
【发布时间】:2014-09-15 06:07:43
【问题描述】:

我在 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.Build 和 Microsoft.Bcl.Async?

【问题讨论】:

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

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


【解决方案1】:

问题是您的库被编译为与Microsoft.Threading.Tasks 中的“某物”对话(实际上您可能需要在部署中包含Microsoft.Threading.Tasks、Microsoft.Threading.Tasks.Extensions 和Microsoft.Threading.Tasks.Extensions.Desktop)。如果您使用的是 .NET 4.5,那么这 3 个 DLL 中的代码只知道将调用转发到 NET 框架,如果您使用的是 .NET 4.0,它会执行替换调用。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-15
    • 2013-01-03
    • 2022-07-29
    • 2020-04-03
    • 1970-01-01
    • 2020-11-08
    • 2013-03-24
    • 1970-01-01
    相关资源
    最近更新 更多