Visual studio IntelliTrace不';“一次不能正常工作”;ngen安装/简介;使用
我们正在开发一个应用程序,它可以从.NET framework的本机映像中获得巨大的好处。因此,在安装过程中,我们在几个.NET程序集上运行以下程序:Visual studio IntelliTrace不';“一次不能正常工作”;ngen安装/简介;使用,visual-studio,visual-studio-2010,ngen,intellitrace,Visual Studio,Visual Studio 2010,Ngen,Intellitrace,我们正在开发一个应用程序,它可以从.NET framework的本机映像中获得巨大的好处。因此,在安装过程中,我们在几个.NET程序集上运行以下程序: ngen安装“程序集名称”/Profile 部署我们的应用程序后不久,我们收到一份投诉,称VisualStudio2010中用户的IntelliTrace功能停止工作。经过短暂的调查后,我们发现只要有mscorlib.dll的评测本机映像,IntelliTrace就会停止工作。此外,当事件发生时,我们会在事件查看器中看到以下消息: TraceLo
ngen安装“程序集名称”/Profile
部署我们的应用程序后不久,我们收到一份投诉,称VisualStudio2010中用户的IntelliTrace功能停止工作。经过短暂的调查后,我们发现只要有mscorlib.dll的评测本机映像,IntelliTrace就会停止工作。此外,当事件发生时,我们会在事件查看器中看到以下消息:
TraceLog探查器检测到加载到进程中的NGEN/配置文件程序集。不支持此类程序集。收集将被禁用
这尤其令人不安,因为mscorlib.dll是任何其他.NET程序集的依赖项,这意味着使用ngen安装/任何程序集上的配置文件都会导致生成mscorlib.dll
以下是本期的简单复制:
创建一个新的控制台应用程序,将其目标框架设置为.NET2。添加图像中显示的代码,并在SomeFunction之后设置断点。
将IntelliTrace设置为“IntelliTrace事件和呼叫信息”
开始调试。命中断点后,应获得以下更正的IntelliTrace:
停止调试并退出Visual Studio
在提升模式下打开新cmd.exe
执行:
%windir%\Microsoft.NET\Framework\v2.0.50727\ngen安装“系统,版本=2.0.0.0,区域性=中性,PublicKeyToken=b77a5c561934e089”/Profile
再次启动Visual Studio并开始调试。将命中相同的断点。但是,这一次IntelliTrace的外观如下所示:
要使IntelliTrace在同一cmd窗口中再次运行,请执行以下操作:
%windir%\Microsoft.NET\Framework\v2.0.50727\n卸载“系统,版本=2.0.0.0,区域性=中性,PublicKeyToken=b77a5c561934e089”/Profile
我们还尝试使用ngen.exe的/NoDependencies标志仅添加特定程序集,而不使用mscorlib,但是,似乎忽略了该标志-即使我们已执行ngen安装/Profile/NoDependencies
,依赖项已安装:运行ngen display | find”“
显示即使使用了/NoDependencies标志,mscorlib仍在安装
问题
即使安装了其他NGEN/profile程序集,是否有办法让NGEN卸载mscorlib/profile
在执行NGen/Profile后,是否有一种变通方法使IntelliTrace正常工作
为什么/nodependences标志不能按预期工作
谢谢,,
维塔利·贝尔曼(Vitaly Belman)好吧,我也有一个类似的问题,解决方法是我被告知
ngen uninstall "assembly details" /Profile
IntelliTrace可能试图检测库以执行跟踪,但它无法这样做,因为除非它们重写事件,否则它将无法获取事件
最好的办法是在开发机器上卸载/Profile场景程序集
我知道我已经重复了你所知道的,但我希望能提供一个关于为什么会发生这种情况的答案,但这可能不是你自己能解决的问题
即使安装了其他NGEN/profile程序集,是否有办法让NGEN卸载mscorlib/profile
通过删除/重命名mscorlib的NIC文件夹,可以直接删除mscorlib的本机映像。例如,对于.NET 4.0 64位,文件夹位置为:
c:\Windows\assembly\NativeImages\u v4.0.30319\u 64\mscorlib
Erm,你的程序集的部署是如何破坏用户的mscorlib的ngen-ed映像的?@HansPassant(以Vitaly的同事的身份发言)问题不在于mscorlib的常规ngen-ed映像受到了调和或以其他方式受到了影响,而不是。问题是,仅仅存在一个ngen/配置文件映像就导致intellitrace停止工作。这仍然不能解释,用户是如何获得这样的ngen ed映像的?Ngen.exe始终在目标计算机上运行。我想最好看看安装程序。@HansPassant我们确实在目标机器上运行了ngen.exe。正如Vitaly在文章开头所说,“在我们的安装过程中,我们在几个.NET程序集上运行以下操作:ngen安装“程序集名称”/Profile
”好的,明白了。最好删除该选项,您的客户似乎对调试比对评测更感兴趣。将反馈发布到connect.microsoft.com以寻求解决方法。在这里发布链接,你可能会得到很多用户的投票。我看到David Broman给了你和他在MSDN论坛上给我一样的建议。谢谢Shaun,我确实学到了一些新东西。关于只是运行卸载-问题是我们的客户是开发人员。卸载/Profile程序集会降低我的用户的运行速度。但是,如果不卸载,他们将无法使用Intellitrace和其他探查器。最后,我从我的应用程序UI中给了用户一个选项,允许他打开“兼容性模式”这会降低性能,但允许Intellitrace通过运行NGen卸载来运行。这是一个很好的方法-作为一名开发人员,我本人从未使用过NGen安装/配置文件…
,因此我在自己的分析器编写实验中不会遇到这种情况。