gpt4 book ai didi

c++ - WinSxS 无法加载 VC++ DLL

转载 作者:可可西里 更新时间:2023-11-01 16:05:45 32 4
gpt4 key购买 nike

我遇到了几个 VC++ DLL 的问题,我应该将其包含到我的 .NET/C# 项目中。一个 VC++ DLL 是 C++/CLI DLL,我将其用作 .NET 项目的公共(public)接口(interface)。其他 DLL 是用 native C++ 编写的。我无法访问 VC++ DLL 的源代码,我只能使用它们。

我创建了一个 .NET 测试项目并引用了 C++/CLI DLL。没问题,编译器很幸运,太棒了。只有一个问题:当我启动 .NET 程序的 EXE 时,由于缺少 VC++ 核心 DLL,我得到关于 C++ DLL 的错误。sxstrace 显示以下内容(缩写):

INFO: Reference: Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.6195"
INFO: Reference: Microsoft.VC80.OpenMP,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.6195"
INFO: Resolving reference Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.6195"
...
ERROR: Cannot resolve reference Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.6195".

现在我不傻了,尝试了几种方法。我已经阅读了很多关于 WinSxS 的文章,以便更深入地了解正在发生的事情。现在我正处于对我来说越来越奇怪的地步。我要执行程序的系统安装了当前版本 8.0.50727.762 (SP1) 中的 VC++ Redistributable 包。我知道 winsxs 中有一个 Microsoft.VC80.CRT 的策略文件,该文件将此程序集的所有版本重定向到当前版本 8.0.50727.762(这是 http://blogs.msdn.com/b/nikolad/archive/2007/03/29/a-solution-to-two-references-to-different-versions-of-crt-mfc-atl-in-one-application-manifest-file.aspx 问题的解决方案)。但是正如上面的错误所说,此策略文件似乎不起作用或未被考虑在内。系统只想找到 8.0.50727.6195 版本的程序集。

现在是第一个问题:这里的问题是什么?弄清楚这一点后,我可以解决最初的问题......

最佳答案

好的,现在可以了 - 感谢您的帮助。

我想出了两个必须解决的问题:

1) 我必须安装“Microsoft Visual C++ 2005 Service Pack 1 Redistributable Package MFC 安全更新”,它部署了 VC++ 程序集的版本 8.0.50727.6195。此更新很难在 Microsoft 服务器上找到,因此链接如下:http://www.microsoft.com/download/en/details.aspx?id=26347通常你只能找到 8.0.50727.762 版本(“Visual C++ 2005 Service Pack 1 Redistributable Package”),它已经过时了。由于 C++ DLL 是针对 6195 编译的,安装更新解决了第一个问题。

2) 虽然 C++/CLI DLL 是在 Release 模式下编译的,但下面的 native C++ DLL 是在 Debug 模式下交付的。现在 Microsoft 许可协议(protocol)禁止部署 VC++ 调试 DLL,并且 VC++ Redist 包不包含 VC++ 调试 DLL。 http://msdn.microsoft.com/en-us/library/aa985618.aspx说:

Debug versions of an application are not redistributable and none of the debug versions of the various Visual C++ dynamic-link libraries (DLLs) are redistributable.

解决方案:原生 C++ DLL 的开发人员给了我一个发布版本,一切正常......

关于c++ - WinSxS 无法加载 VC++ DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9110184/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com