Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio IntelliTrace不';“一次不能正常工作”;ngen安装/简介;使用_Visual Studio_Visual Studio 2010_Ngen_Intellitrace - Fatal编程技术网

Visual studio IntelliTrace不';“一次不能正常工作”;ngen安装/简介;使用

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

我们正在开发一个应用程序,它可以从.NET framework的本机映像中获得巨大的好处。因此,在安装过程中,我们在几个.NET程序集上运行以下程序:

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安装/配置文件…
    ,因此我在自己的分析器编写实验中不会遇到这种情况。