我們正在開發一款應用程序,該程序可從.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中要生成以及的依賴關係。
下面是問題的一個簡單再生產:
創建一個新的控制檯應用程序,將其目標框架到.NET 2.添加代碼爲出現在圖像中SomeFunction後設置一個斷點。
設置的IntelliTrace來 「的IntelliTrace事件和調用信息」
開始調試。一旦斷點被擊中,你應該得到以下,correctIntelliTrace:
停止調試並退出Visual Studio。在提升模式
- 打開新的cmd.exe
- 執行:
%windir%\Microsoft.NET\Framework\v2.0.50727\ngen install "System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /Profile
- 啓動Visual Studio和再次開始調試。相同的斷點將被擊中。這一次,然而,智能跟蹤看起來方式如下:
- 要的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標誌。
問題
- 有沒有一種方法來卸載NGEN mscorlib程序/ profile文件,即使安裝了其他NGEN /型材裝配?
- NGen/Profile執行後,是否有解決方法使IntelliTrace正常工作?
- 爲什麼沒有/ NoDependencies標誌按預期工作?
謝謝 維塔利Belman
呃,怎麼你的程序集的部署搞砸mscorlib程序的用戶的NGEN-ED形象? –
@HansPassant(以Vitaly的同事的身份)問題不在於mscorlib的**正則**正則形式的圖像被調節或以其他方式觸及 - 事實並非如此。問題是僅僅存在一個ngen **/profile **圖像會導致intellitrace停止工作。 –
這仍然不能解釋它,用戶是如何得到*任何像這樣的ngen-ed圖像? Ngen.exe始終在目標機器上運行。我猜想,最好看看安裝程序。 –