首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WinSxS无法加载VC++ DLL

WinSxS无法加载VC++ DLL
EN

Stack Overflow用户
提问于 2012-02-02 17:50:34
回答 1查看 15.1K关注 0票数 10

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

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

代码语言:javascript
复制
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++可再发行软件包。我知道在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版本。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-06 16:59:14

好了,现在它可以工作了--谢谢你的帮助。

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

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

2)虽然C++/CLI是在发布模式下编译的,但下面的本机C++ DLL是在调试模式下交付的。现在,微软许可协议禁止部署VC++调试DLL,并且VC++ Redist包不包括VC++调试DLL。http://msdn.microsoft.com/en-us/library/aa985618.aspx说:

应用程序的

调试版本不可重新分发,并且各种Visual C++动态链接库(DLL)的任何调试版本都不可重新分发。

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

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9110184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档