为什么 WinHttpHandler 在生产服务器上导致“无法加载 DLL 'api-ms-win-core-localization-l1-2-0.dll'”?

Mar*_*cze 1 .net c# asp.net dll

我们已经开始在 ASP.NET 应用程序中使用WinHttpHandler NuGet 包。在开发机器上它运行良好,也适用于我们的登台环境。该应用程序面向 .NET 4.6.1。

但是,在生产中它会引发以下错误:

System.DllNotFoundException: Unable to load DLL 'api-ms-win-core-localization-l1-2-0.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
Run Code Online (Sandbox Code Playgroud)

我在谷歌上搜索了很多关于这个问题的信息,但找不到关于这个 dll 的任何有意义的信息。(我在论坛中发现有些人在遇到类似问题时手动将 dll 复制到他们的生产服务器,但这似乎不是正确的解决方案。)

这个dll来自哪里?应该明确安装吗?

(在我的开发机器上,我在 中找到了它C:\Windows\System32,在我们的登台机器上它在 中C:\Windows\System32\downlevel,但我不知道它来自哪里。)

Jua*_*gui 5

我认为您对API Sets有问题。该 dll 仅适用于Windows 8 API Sets,正如 msdn 上所述

API Sets 依赖于库加载器中的操作系统支持来有效地将命名空间重定向组件引入到库绑定过程中。根据各种输入,包括 API 集名称和绑定(导入)上下文,库加载器执行运行时将引用重定向到目标主机二进制文件,该二进制文件包含 API 集的适当实现。

所以我的建议是联系包的所有者并详细描述您使用该包的环境(操作系统、目标 .Net 框架标识符、目标 .Net 框架版本等)。希望他们能找到并修复错误。

更新:这是对包的GitHub 页面的讨论。这个问题的适当长期解决方案尚不清楚。

TLDR:安装Visual C++ Redistributable for Visual Studio 2015解决了这个问题。