问题标签 [ngen]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 如何在安装过程中正确安装 NGen .NET 应用程序
我正在Inno Setup
为我的应用程序生成安装程序,并且我想在安装过程中为我的应用程序的NGen编写一个脚本。我希望代码能够将NGen文件定位x86
为 、x64
或AnyCPU
. 我希望能够在和系统上进行NGen 。我怎样才能做到这一点?32bit
64bit
我找到了几个有用的链接:
获取 .NET Framework 目录路径
http://nsis.sourceforge.net/Get_directory_of_installed_.NET_runtime
我发现这是一个非常复杂的问题 - 最多可以有 4 个不同的版本NGen应用程序:
- 适用于 CLR 2.0 和 32 位系统
- 适用于 CLR 2.0 和 64 位系统
- 适用于 CLR 4.0 和 32 位系统
- 适用于 CLR 4.0 和 64 位系统
更复杂的是应用程序可以针对 32 位 CPU 并在 64 位系统上运行。
所以我想到的是一个看起来像这样的函数:
并在安装成功后在某处调用它[Code]
:
它会像这样工作:
application.exe (tcpu64, tclr20)
在 64 位系统上,它会生成针对 64 位 CPU 和 CLR 2.0 的本机映像,结果:= True
在 32 位系统上它不会做任何事情,结果:= Falselibrary1.dll ( tcpu64 , tclr40)
在 64 位系统上,它会生成针对 64 位 CPU 和 CLR 4.0 的本机映像,结果:= True
在 32 位系统上它不会做任何事情,结果:= Falselibrary2.dll (tcpu32, tclr20)
在 64 位系统上,它将生成针对 32 位 CPU 和 CLR 2.0 的本机映像,结果:= True
在 32 位系统上,它与 64 位系统上的操作相同library3.dll (tcpu32, tclr40)
在 64 位系统上,它将生成针对 32 位 CPU 和 CLR 4.0 的本机映像,结果:= True
在 32 位系统上,它与 64 位系统上的操作相同library4.dll (tcpuAny, tclr20)
在 64 位系统上,它将生成针对 64 位 CPU 和 CLR 2.0 的本机映像,结果:= True
在 32 位系统上,它将生成针对 32 位 CPU 和 CLR 2.0 的本机映像,结果:= Truelibrary5.dll (tcpuAny, tclr40)
在 64 位系统上,它将生成针对 64 位 CPU 和 CLR 4.0 的本机映像,结果:= True
在 32 位系统上,它将生成针对 32 位 CPU 和 CLR 4.0 的本机映像,结果:= True
所以要让它工作,我需要知道 .NET 运行时目录的 4 个不同路径。这是我发现的:
32位系统CLR 2.0
获取“HKLM\Software\Microsoft\.NETFramework”中“InstallRoot”的值,保存到value1
获取“HKLM\Software\Microsoft\.NETFramework\Policy\v2.0”中第一个值的名称,保存到值 2 值
1 + “v2.0” 。+ value2 + "\ngen.exe" => win
示例:"c:\Windows\Microsoft.NET\Framework\v2.0.50727\ngen.exe"
我认为这在 32 位和 64 位系统上同样适用32位系统CLR 4.0
获取“HKLM\Software\Microsoft\.NETFramework”中“InstallRoot”的值,保存到value1
获取“HKLM\Software\Microsoft\.NETFramework\Policy\v4.0”中第一个值的名称,保存到值 2 值
1 + “v4.0” 。+ value2 + "\ngen.exe" => win
示例:"c:\Windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe"
我假设这在 32 位和 64 位系统上同样适用64 位系统 CLR 2.0
如何获取 64 位 .NET Framework 的 InstallRoot?
示例:“c:\Windows\Microsoft.NET\Framework64\v2.0.50727\ngen.exe”64 位系统 CLR 4.0
如何获取 64 位 .NET Framework 的 InstallRoot?
示例:“c:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe”
我实际上不确定 64 位系统上的“InstallRoot”值是否会指向 32 位 .NET 或 64 位 .NET 的 InstallRoot,那么前两种方法对任何系统都可靠吗?第二种方法看起来如何?有没有更简单的方法来实现这一切?
.net - 如何使用 Wix 和项目参考部署本机映像 (NGen)
我正在使用 Wix/Votive 为我的 .NET 解决方案构建安装程序。我使用项目引用(heat.exe
我认为在内部使用)包含来自其他项目(EXE 和 DLL)的二进制文件。
我现在要做的是,ngen.exe
在安装过程中预jit所有程序集。根据 Wix 帮助,这可以通过WiX .NET 扩展库来完成:
现在的问题是,<File />
标签是由创建的heat.exe
,我不知道如何建议在内部heat.exe
生成<NativeImage />
标签或如何引用生成的标签并在外部<File />
附加标签。<NativeImage />
现在,我看到的唯一方法是不使用项目引用,但显然我想保留它们。
有什么建议么?谢谢!
.net - 如何在我的系统上安装 ngen .net dll 以避免为调试进行 JIT 优化?
我安装了 .net 4.0 框架,需要从 3.5 生成 dll 的本机映像而无需优化,以便更轻松地调试它。
我尝试了几种不同的方法:
- 转到我的 C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.0
使用以下命令创建 System.Workflow.Activities.ini:
ngen.exe 卸载 System.Core.dll
[.NET Framework 调试控件] GenerateTrackingInfo=1 AllowOptimize=0
并运行 ngen.exe 卸载 System.Workflow.Activities.dll ngen.exe install System.Workflow.Activities.dll /Debug
现在,当我转到 C:\Windows\Assembly 时,我看到安装的版本是 MSIL,而不是 AMD64。
- 我还尝试去 C:\Windows\assembly\GAC_MSIL 并在那里运行 NGEN。
再一次,不去了。
关于做什么的任何想法?
.net - JIT 与 NGen - 有什么区别?
因此,当 CLR 运行时加载 .NET 程序集时,它会将其编译为机器本机代码。这个过程称为 JITing。NGen 也是将 .NET 程序集编译为本机代码的过程。我不明白两者有什么区别?
wix - 如何以提升的权限从 WiX 运行 ngen?
我正在尝试使用本文ngen
将其包含到我的安装程序中。我想在安装期间同步运行(优先级=0),但它需要管理权限才能运行。所以,现在我在日志中有以下消息:ngen
当 ngen 启动时,此时是否有简单的方法向用户询问管理权限(使用标准 UAC 提示符)?如果用户按“否”,我想在没有 ngen 的情况下继续。如果是 - 运行 ngen 并预编译我的应用程序。有什么想法吗?
谢谢。
c# - 执行 Ngen 后在哪里可以找到生成文件的位置?
我在 C# 可执行文件上做了 Ngen。它是成功的,但我无法弄清楚生成的文件在我的电脑中的位置。MSDN 说它应该在本机图像缓存中,仍然无法弄清楚它在哪里..
编辑:我想在它上面运行 objdump,因此我需要物理文件
EDIT2:我运行 ngen 的输入是:
.net - 测量 .NET 应用程序的 JIT 时间
我知道您可以使用NGen制作 .NET 应用程序的本地预编译映像。
但是您如何衡量您的应用程序在 JIT 中花费了多少时间?哪些分析工具将对此进行测量?有没有免费的工具可以做到这一点?我想知道在这样做之前要节省多少时间。
c# - TargetedPatchingOptOut:“跨 NGen 图像边界内联的性能至关重要”?
使用反射器浏览了一些框架类,并注意到许多方法和属性具有以下属性
我很确定我在其他地方也看到了上述评论,但从未跟进。
有人可以告诉我这在 C# 和任何其他上下文中意味着什么吗?
.net - 如何杀死 mscorsvw.exe
mscorsvw.exe(预编译程序集的 .NET 优化)占用了我的 CPU 的很大一部分 - 50-100%。
这篇文章(和许多其他文章)说
ngen.exe 执行queueditems
从命令行应该杀死它。对我来说,该命令只是挂起。有没有更好的方法来杀死这个过程?
我没有尝试重新启动。在过去的几天里,我不止一次看到我的 CPU 利用率飙升,我怀疑这是我的问题;我想知道如何杀死它。
.net - ngen 和分析
我正在尝试使用 NGen 来查看我的应用程序的本机映像是否比 .NET 运行得更好。但是,我在弄清楚该怎么做时遇到了一些麻烦。
我的应用程序名为MyApp.exe,它有几个依赖 DLL。
我打开 VS 2010 命令提示符并运行:
命令输出未表明遇到任何问题。
然后我去 C:\Windows\assembly 尝试运行 EXE,但在那里找不到它(我在 Windows 7 上)。一点点挖掘告诉我使用命令提示符浏览到 C:\Windows\assembly\NativeImages_v4.0.30319_32。我最终能够在那里找到我的 MyApp.ni.exe,但当然无法在资源管理器中打开包含文件夹。
我试图运行程序,它告诉我:
“C:\Windows\assembly\NativeImages_v4.0.30319_32...\MyApp.ni.exe 不是有效的 Win32 应用程序。”
命令输出说访问被拒绝。
我有两个问题:
- 我怎样才能运行这个程序,以便我可以执行本机版本。
- 我将如何分析它?看起来我无法从 VS2010 分析器中找到该文件夹,因为它在资源管理器中看不到。
谢谢。