WinSxS无法加载VC++DLL
WinSxS fails to load VC++ DLLs
我遇到了几个VC++DLL的问题,应该将其包含在我的.NET/C#项目中。一个VC++DLL是一个C++/CLI DLL,我使用它作为.NET项目的公共接口。其他DLL是用本机C++编写的。我无法访问VC++DLL的源代码,只能使用它们。
我做了一个.NET测试项目,并引用了C++/CLI DLL。没问题,编译器很幸运,很棒。只有一个问题:当我启动.NET程序的EXE时,由于缺少VC++核心DLL,我会收到有关C++DLL的错误。sxtrace显示以下内容(缩写):
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安全更新",它部署了版本8.0.50727.6195的VC++程序集。在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模式下编译的,但下面的本机C++DLL是在Debug模式下交付的。现在,Microsoft许可协议禁止部署VC++调试DLL,并且VC++Redist软件包不包括VC++调试DLLs。http://msdn.microsoft.com/en-us/library/aa985618.aspx说:
应用程序的调试版本是不可重新分发的,并且各种Visual C++动态链接库(DLL)的调试版本都不可重新发布。
解决方案:原生C++DLL的开发人员给了我一个发布版本,一切都很好。。。
- 从 wxWidgets 中的.DLL加载图标
- 视觉C++:在 DLL 加载期间,全局变量初始化顺序是否具有确定性?
- 无法使用c++/cli包装从c#dll加载函数
- 混合延迟 dll 加载和手动调用 LoadLibraryA 是否安全?
- 无法从 dll 加载函数
- 如何设置我的dll加载,该dll取决于Env-ailiable的某些第三部分DLL
- 将本机非托管的C DLL加载到托管的C#应用中,导致DLL输出垃圾
- 无法在 Python 3.5 上导入 cv2 DLL 加载失败
- 当使用“空dllmain”的dll加载链接到DLL时,应用程序无法启动(0xc0000142)
- 如何从DLL加载的DLL链接到函数
- 如何从Java中的C DLL加载和使用结构和功能
- 我可以用具有相同功能名称的多个DLL加载元素吗?
- 窗口挂钩和 dll 加载
- CEGUI-从DLL加载资源
- 什么可能导致时间函数和 DLL 加载之间死锁
- 以下代码是如何工作的(从DLL加载动态类)
- 错误:Visual Studio中没有为opencv_world310.dll加载符号
- 使用 LoadLibraryA 的 dll 加载错误
- 从 WinAPI C 项目中的专用 DLL 加载图像资源
- 模块"MyShellExt.dll"加载失败