我遇到了幾個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版本。
現在,這是第一個問題:這裏有什麼問題?我得到這個想法後,我可以解決最初的問題...
的版本不匹配是水晶在郵件中明確。它想要8.0.50727.6195,你有8.0.50727.762。轉到search.microsoft.com並在搜索框中輸入「8.0.50727.6195」。 – 2012-02-02 12:10:59
問題是,是否可以「說服」應用程序接受762而不是6195. – Dialecticus 2012-02-02 12:22:35
在這種情況下,我不確定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