2011-11-30 123 views
1

我們正在開發一款應用程序,該程序可從.NET框架的Profiled Native Images中獲益良多。由於如此,我們的安裝過程中,我們正在運行的幾個.NET程序集的以下內容:使用「ngen install .../profile」後,IntelliTrace無法正常工作

ngen install "ASSEMBLY NAME" /Profile

部署我們的應用程序後不久,我們收到的投訴,在Visual Studio 2010中用戶的智能跟蹤功能停止工作。經過簡短的調查,我們發現只要分析本機映像mscorlib.dll,IntelliTrace停止工作。此外,發生此情況時,我們會在事件查看器中收到以下消息:

TraceLog Profiler檢測到加載到進程中的NGEN /配置文件程序集。這種組件不受支持。收藏將被禁用。

,這是特別麻煩的,因爲mscorlib.dll中是任何其他.NET組件,這意味着在任何組件使用ngen install ... /profile導致mscorlib.dll中要生成以及的依賴關係。

下面是問題的一個簡單再生產:

  1. 創建一個新的控制檯應用程序,將其目標框架到.NET 2.添加代碼爲出現在圖像中SomeFunction後設置一個斷點。 Sample code

  2. 設置的IntelliTrace來 「的IntelliTrace事件和調用信息」

  3. 開始調試。一旦斷點被​​擊中,你應該得到以下,correctIntelliTrace: Correct IntelliTrace

  4. 停止調試並退出Visual Studio。在提升模式

  5. 打開新的cmd.exe
  6. 執行: %windir%\Microsoft.NET\Framework\v2.0.50727\ngen install "System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /Profile
  7. 啓動Visual Studio和再次開始調試。相同的斷點將被擊中。這一次,然而,智能跟蹤看起來方式如下: Broken IntelliTrace
  8. 要的IntelliTrace在同一個cmd窗口再次運行:

%windir%\Microsoft.NET\Framework\v2.0.50727\ngen uninstall "System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /Profile

我們還試圖用/NoDependencies ngen.exe的標誌只添加特定的程序集,沒有mscorlib,但是,它似乎忽略了標誌 - 儘管我們已經執行了ngen install ... /Profile /NoDependencies,依賴關係被安裝:運行ngen display | find "<profiling>"顯示mscorlib仍然安裝,即使/ NoDependenc使用了ies標誌。

問題

  1. 有沒有一種方法來卸載NGEN mscorlib程序/ profile文件,即使安裝了其他NGEN /型材裝配?
  2. NGen/Profile執行後,是否有解決方法使IntelliTrace正常工作?
  3. 爲什麼沒有/ NoDependencies標誌按預期工作?

謝謝 維塔利Belman

+0

呃,怎麼你的程序集的部署搞砸mscorlib程序的用戶的NGEN-ED形象? –

+0

@HansPassant(以Vitaly的同事的身份)問題不在於mscorlib的**正則**正則形式的圖像被調節或以其他方式觸及 - 事實並非如此。問題是僅僅存在一個ngen **/profile **圖像會導致intellitrace停止工作。 –

+0

這仍然不能解釋它,用戶是如何得到*任何像這樣的ngen-ed圖像? Ngen.exe始終在目標機器上運行。我猜想,最好看看安裝程序。 –

回答

2

好吧,我有OpenCover一個類似的問題,解決這個問題的方法是,有人告訴我是

ngen uninstall "assembly details" /Profile 

的IntelliTrace可能正試圖儀器庫爲了執行跟蹤,但它不能這樣做,因爲它不會得到JITCompilationStarted事件,除非它們覆蓋了JITCachedFunctionSearchStarted事件。

最好的事情是隻需在開發機器上卸載/ Profile場景組件。

我知道我有一些重複你知道的事情,但我希望提供一個答案,爲什麼會發生,但它可能不是你可以解決自己的問題。

+0

我看到David Broman給了你他在MSDN論壇上給我的同樣建議http://social.msdn.microsoft.com/Forums/en/clr/thread/97f07f2d-4135-4599-94bd-66b358edddb1 –

+0

謝謝Shaun,我確實學到了一些新東西。關於正在運行的卸載 - 問題是我們的客戶是開發人員。卸載/配置文件程序集會讓所有用戶的運行速度變慢。但是,如果不卸載,則無法使用Intellitrace和其他分析器。最終,我向用戶提供了一個來自我的應用程序UI的選項,允許他打開「兼容模式」,降低性能,但允許Intellitrace通過運行NGen Uninstall來運行。 – VitalyB

+0

一個好方法 - 作爲一名開發人員,我從來沒有使用'ngen install/Profile ...',所以這在我自己的分析器編寫實驗中不會遇到。 –

0
  1. 有沒有一種方法來卸載NGEN mscorlib程序/ profile文件,即使安裝了其他NGEN /型材裝配?

你可以直接刪除/重命名的mscorlib的NIC文件夾中刪除本機映像的mscorlib程序。例如,對於.NET 4.0 64位,該文件夾的位置是:

c:\Windows\assembly\NativeImages_v4.0.30319_64\mscorlib