2012-02-02 124 views
9

我遇到了幾個VC++ DLL的問題,我應該將其包含到我的.NET/C#項目中。一個VC++ DLL是一個C++/CLI DLL,我用它作爲.NET項目的公共接口。其他DLL用本機C++編寫。我無法訪問VC++ DLL的源代碼,我只需要使用它們。WinSxS無法加載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版本。

現在,這是第一個問題:這裏有什麼問題?我得到這個想法後,我可以解決最初的問題...

+0

的版本不匹配是水晶在郵件中明確。它想要8.0.50727.6195,你有8.0.50727.762。轉到search.microsoft.com並在搜索框中輸入「8.0.50727.6195」。 – 2012-02-02 12:10:59

+0

問題是,是否可以「說服」應用程序接受762而不是6195. – Dialecticus 2012-02-02 12:22:35

+0

在這種情況下,我不確定Microsoft的版本。我在Microsoft下載中找不到版本爲8.0.50727.6195的VC++ 2005 Redist Package,目前的VC++ 2005 Redist軟件包版本爲8.0.50727.762。如果762版本高於6195版本,應該如我所寫:WinSxS策略文件應將6195重定向到762--但它不是。 – Matthias 2012-02-02 13:26:55

回答

8

好吧,現在它的工作 - 感謝您的幫助。

我想通了,必須解決兩個問題:

1)我必須安裝「微軟的Visual C++ 2005 Service Pack 1的再發行組件包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是以發佈模式編譯的,但下面的本地C++ DLL已經以調試模式發佈,現在微軟許可協議禁止部署VC++ Debug的DLL和VC++的Redist包不包括VC++調試的DLL http://msdn.microsoft.com/en-us/library/aa985618.aspx說:

的調試版本應用程序不可再分發,並且各種Visual C++動態鏈接庫(DLL)的調試版本都不可再分發。

解決方案:本地C++的DLL開發商給了我一個發行版本,一切工作正常...

+0

爲後代注意:步驟1)解決了我的「應用程序無法啓動,因爲它的並排配置不正確」錯誤與原始問題無關。當其他建議失敗時,也可能爲其他人工作。 – shinjin 2012-08-24 20:02:57