2010-01-16 17 views
1

我有一個VC++託管的應用程序,它是根據VC80.CRT版本8.0.50727.762構建和測試的。我驗證了內嵌清單指向762,並且構建機器具有762作爲最新的VC80.CRT版本。指導一個VC++應用程序使用較舊的VC80.CRT版本

該應用程序現在也運行在既具有762也具有更高版本的運行時(4053)的機器上。

兩臺機器,順帶說一句,是XP專業版SP2;第二臺機器(可以說是4053)擁有.NET 3.0。

該應用程序適用於4053機器,我想我明白,由於SxS下的VC80.CRT伴隨的發佈者策略,應用程序爲應用程序加載4053而不是762。

由於各種原因,我不想進入,我一直在試圖強制它使用762版本,迄今沒有成功。

無論如何,在研究文獻後,我想我理解決定要加載的目標版本的鏈:app config - > publisher policy - > machine config。

所以我已經下了myapp.exe.config文件(見下文)myapp.exe附近;請注意publisherPolicy的設置爲「no」以避免鏈接的第二步。

該應用程序仍然加載4053,而不是762.也許這是由於機器配置文件說什麼,但我甚至不能開始弄清楚該文件的內容應該是什麼意思 - 當然沒有任何對VC80.CRT或其中任何msvc [x] 80.dll庫的引用。

我預計,指的是一箇舊版本的組件將是比較容易做到,關鍵是要克服「DLL地獄」 - 即使裝配出版商感覺就像保證(通過發行政策)的向後兼容性。
任何人都可以發光嗎? 謝謝

<configuration> 
    <runtime>  
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
      <dependentAssembly> 
       <assemblyIdentity type="win32" name="Microsoft.VC80.CRT" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"> 
       </assemblyIdentity> 
       <publisherPolicy apply="no" /> 
       <bindingRedirect oldVersion="*" newVersion="8.0.50727.762"/> 
      </dependentAssembly> 
     </assemblyBinding> 
    </runtime> 
</configuration> 
+0

我不知道任何人說已經能夠想出解決辦法。看起來最不起眼的是張俊峯,這個寫得很爛的傻瓜。文件是悲慘的和不準確的。放棄所有希望,解決真正的問題。 – 2010-01-16 02:19:03

回答

1

Machine.config是爲.NET應用程序。本機SxS配置位於the WinSxS directory

您的EXE是否有嵌入式清單?由於XP SP2(我認爲)這些優先於外部(foo.exe.manifest)文件。

+0

我們似乎確實可以通過提供我們自己的基於762的清單的exe和(yikes)中的清單來取得進展。這種解決方案讓我感覺遠離溫暖和模糊,但它已經在我們嘗試過的地方工作過... 即使我們已經接受了這種方法,感謝您提供的輸入和進一步的信息/支持。 – Steph 2010-06-30 16:03:39

相關問題