2009-07-02 55 views
2

我有一個項目,該項目包括預生成的DLL模塊,內置在過去的一段時間內,使用Visual Studio 9Howto:多個版本的msvcrt9作爲專用SxS程序集?

該項目的EXE現在構建,使用Visual Studio的SP1 9

當我們部署EXE時,我們不想要求管理員訪問權限,所以C-Runtime已經綁定到應用程序的根目錄中。 The Dlls:MSVCRT90.DLL及其清單:Microsoft.VC90.CRT.manifest

現在,EXE和最新版本的運行時清單都是一致的 - 應用程序清單要求msvcrt.dll 9.0.30729.1,並且crt-manifest包含確認msvcrt90.dll是9.0的條目.30729.1

現在,出現問題。我們的應用程序使用的第三方DLL庫與原始msvcrt90.dll版本9.0.21022.8鏈接,並具有此效果的內部清單。

在我們的開發PC上安裝了兩個版本的VS9 CRuntime的應用程序的作品。在我們第一次安裝應用程序的「新鮮」PC上 - DLL無法加載。

現在,我可以做一些祕技 - 一個是將應用恢復到9.0.2 - 從原始源媒體中獲取9.0.2 DLL。這是不理想的,因爲9.0.3是優選的。 或者我努力嘗試重建第三方庫。

我還非常確定,在我們的開發PC上,當第三方庫要求舊的dll時,它會被重定向到新的dll - 它們是二進制兼容的。

應用程序清單和程序集旨在拯救我們所有人免受這種垃圾。 必須可以編輯程序集清單文件,以便可以加載exe和dll。

回答

2

我從來沒有嘗試過,但我認爲你可以通過bindingRedirect在清單中解決這個問題,我知道它在託管的世界中起作用。

見例如(您需要更改值您的版本)

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<configuration> 
    <windows> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <assemblyIdentity name="Your.Application.Name" type="win32" version="9.0.0.0"/> 
     <dependentAssembly> 
     <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b" /> 
     <bindingRedirect oldVersion="9.0.20718.0-9.0.21022.8" newVersion="9.0.30411.0"/> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity type="win32" name="Microsoft.VC90.MFC" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b" /> 
     <bindingRedirect oldVersion="9.0.20718.0-9.0.21022.8" newVersion="9.0.30411.0"/> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity type="win32" name="Microsoft.VC90.MFCLOC" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"> 
     </assemblyIdentity> 
     <bindingRedirect oldVersion="9.0.20718.0-9.0.21022.8" newVersion="9.0.30411.0"/> 
     </dependentAssembly> 
    </assemblyBinding> 
    </windows> 
</configuration> 
+0

這是非常接近到什麼香港專業教育學院一直在努力。 但是在哪裏以及如何放置該XML? 我的應用程序有一個嵌入的.manifest文件,文檔說bindingRedirections應該放在app.exe.config文件中。我創建了配置文件,將它放在我的應用程序文件夾中,但沒有看到任何區別。我不知道它甚至被使用。 也許我需要確保assemblyIdentity完全匹配我的應用程序清單assemblyIdentiy。 – 2009-07-03 12:20:31

相關問題