2013-05-01 38 views
0

我正在調查我們發佈的應用程序的一些小型轉儲程序。我無法在本地再現這些崩潰,但對於大量的報告,我注意到加載的dll的列表包括常規和.ni。一些WPF dll的版本。應用程序是否可以加載NativeImage和JIT版本的.Net dll?

從VS 2010的 '模塊' 窗格中,如PresentationCore(這裏格式)

PresentationCore.dll中C:\ WINDOWS \ PresentationCore.dll中 - 加載符號。 C:\用戶\ PresentationCore.pdb
PresentationCore.ni.dll * C:\ WINDOWS \ PresentationCore.ni.dll - 找不到匹配的二進制文件。 PresentationFramework.Aero.dll * C:\ WINDOWS \ PresentationFramework.Aero.dll - 不匹配的二進制發現 PresentationFramework.Aero.ni.dll * C:\ NativeImages ... \ PresentationFramework.Aero.ni。 DLL - 沒有找到匹配的二進制文件。

基本上,看起來好像我們加載兩個NativeImage和JIT的版本。這可能嗎?

我檢查我的本地機器上我們發佈的產品的負載,和Visual Studio僅列出了模塊加載窗格單一版本。此外,融合報道的NativeImage版本的負載沒有錯誤,只是什麼我以爲是一般的警告:

警告:本機圖片不會在LoadFrom上下文進行探測。本機圖像只會在默認加載上下文中進行探測,就像使用Assembly.Load()一樣。

據我所知,我們不使用LoadFrom引用這些二進制文件,所以...

是否有一個原因,我看到NativeImage的結構和正常的DLL的在我的調用堆棧?這是正常的嗎?任何想法,如果這可能導致問題,並且你推薦任何方法來防止這種情況發生?

+0

觸發加載JIT二進制文件的dll使用LoadFrom顯式加載。我更改了privateBinDir以包含它們的路徑並使用Load加載它們 - 這似乎允許它們從NativeImage緩存中加載它們的引用。這似乎與文檔直接相反,該文檔指出JIT dll的引用恢復爲默認加載上下文。 – FrozenKiwi 2013-05-07 19:27:29

回答

0

它似乎是可能的應用程序加載多個版本。我重寫了插件加載以使用直接的「Load」而不是「LoadFrom」,並將插件目錄添加到應用程序的探測路徑中。在此Fusion Logger顯示GAC和NI目錄之間不再有重複內容。

http://msdn.microsoft.com/en-CA/library/823z9h8w(v=vs.80).aspx

不幸的是,我無法得到的這點主要一個真正的答案(減少啓動時間)作爲開關引入不穩定,我不能得到一個乾淨的負載。現在我恢復了這個改變,如果我設法讓事情乾淨地加載,我會用結果更新答案。

相關問題