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

标签 .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

最佳答案

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

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

关于.net - 为什么运行时需要 Microsoft.Threading.Tasks?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24920952/

相关文章:

.Net UserControl XCode 等价物

.net - 如何为 WCF 服务创建全局异常处理程序?

python-3.x - python SDK 上的 Azure Webjobs

c# - 可移植类库不支持System.IO,为什么?

xamarin.ios - 可移植类库 System.Object 错误

c# - 使用 log4net 版本 2.0.3 执行登录数据库

c# - 为什么我不能使用以下 IEnumerable<string>?

azure - 在 Azure DevOps 发布管道中自动创建标签

azure - 将 ARM 模板资源部署到一个资源组,并将 secret 部署到另一资源组中的 key 保管库

c# - 在页面/主页面和子页面之间共享相同的 View 模型