我向 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
?
最佳答案
问题是您的库被编译为与 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 系统上可能执行的操作很少,但调用仍然必须发生。
关于.net - 为什么运行时需要 Microsoft.Threading.Tasks?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24920952/