问题标签 [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.

0 投票
0 回答
661 浏览

.net - 为组装生成本机映像,但跳过强名称验证

可能重复: 将 .net exe 转换为本机 win32 exe?

我在 GAC 中安装了一个程序集,该程序集已使用 reflexil 进行了修改,并且使用sn -VR *,<public_token>. 问题是这个程序集已经被生成并且本机映像存在,因此 CLR 仍在加载“旧”版本。当应用程序被复制到另一台电脑并将修改后的程序集放入其本地目录时,它运行得很好(当程序集在本地目录中时,框架不执行强名称验证)。所以我尝试使用ngen uninstall <assembly name>命令并成功卸载,然后使用修改后的程序集再次安装它,但它给出了关于强名称验证的错误。所以现在我在 GAC 中注册了一个修改过的程序集,用于跳过验证,没有 ngen 映像,并且应用程序无法在该机器上启动。你有什么办法解决这个问题。提前致谢。

0 投票
1 回答
972 浏览

entity-framework - 运行“ngen install EntityFramework.dll”失败,出现错误 0x800706BE 和 0x80131F06

根据实体框架团队的建议,我尝试EntityFramework.dll使用以下命令创建本机映像:

这会导致错误0x80131F06(mscorlib.dll 没有本机映像)。当我现在尝试运行时ngen install mscorlib.dll,出现错误0x800706BE(RPC_S_CALL_FAILED - 远程过程调用失败)。

我已经使用过sfc /scannow,它报告没有损坏的文件。

任何想法这里有什么问题?

0 投票
1 回答
299 浏览

c# - 如果在运行时更改当前目录,则不会加载 Ngen 本机映像

所以我已经 NGEN 了一个程序集,但它没有被运行时使用,因为在运行时当前应用程序目录发生了变化, Directory.SetCurrentDirectory(requiredDirectory)所以运行时没有使用 NGEN 程序集。
我们如何加载程序集:

我们正在使用 WPF PRISM IModuleManager 在朗姆酒时间加载程序集。但在此之前必须更改当前应用程序目录,如上图所示。所以我们做了上述所有事情,然后没有使用 Ngen 程序集。知道我们该怎么做吗?

0 投票
0 回答
620 浏览

.net - Ngen 错误 - 找不到 GAC 依赖项

我正在尝试使用 NGen 来加快 .Net 应用程序的启动/响应时间。应用程序编译(在 Visual Studio 中)并在 IDE 内外愉快地运行,但如果我“ngen”主入口程序集,我会得到:

由于以下错误,无法加载程序集 CrystalDecisions.Enterprise.Framework 的依赖项 BusinessObjects.Enterprise.Sdk,Version=12.0.1100.0,Culture=neutral,PublicKeyToken =692fbea5521e1304:系统找不到指定的文件。(来自 HRESULT 的异常:0x80070002)

引用的 Crystal 库来自 GAC。ngen 命令行是:

ngen install "\my_entry_assembly.exe"

Ngen 找到了大部分依赖项并处理了它们,但不是上面的那些,只有 GAC 中的那些。

除了通过 GAC 的显式路径单独生成程序集之外,我能做些什么解释?

0 投票
2 回答
6579 浏览

c# - .NET Native 和 Ngen.exe 有什么区别?

标题说明了一切。我希望有人可以向我解释 .NET Native 带来了我们在 Ngen.exe 中还没有的东西。

0 投票
1 回答
220 浏览

c# - NServiceBus.Host、NGen 和 LoadFrom

我们有一个“小型” NServiceBus 应用程序,它使用十几个 EF 映射表和 RabbitMQ 作为通信媒介。使用 NServiceBus.Host.Exe 启动应用程序需要大约 26 秒(调试和发布版本,带有或不带有调试器)。

添加 EndpointConfigurationType 应用程序设置后,加载时间下降了 2s。

所以我一直在研究这个,大约 8-10 秒在第一个查询中与 EF 一起使用,它是各种生成例程。NGen:ing 库也可以增强 EF 加载性能。

然而,在 NGen:ing 库并启动 NServiceBus.Host.exe 之后,默认情况下会加载原生图像,但也会通过额外的 appdomain(使用 IL dll)加载,因此看起来它使用LoadFrom加载依赖项。

有没有解决的办法?我们想将 NSB.Host.exe 用于它的 Windows 服务功能(我们对重新实现不感兴趣)。其他“IWantTo...”功能也很好,因为我们已经有几个(16 个?)端点使用这些功能。

编辑: http: //blogs.msdn.com/b/abhinaba/archive/2014/02/18/net-ngen-explicit-loads-and-load-context-promotion.aspx 我所有的 dll 都在与 NServiceBus 相同的目录中.Host.exe,因此基于此,Fusion 也应该加载本机 dll。

edit2:这是“最小”的再现,没有 nservicebus.host.exe 的所有黑白,但它似乎在调试情况下工作。它在 Nservicebus.host.exe 的 2 秒和 26 秒内启动

0 投票
1 回答
2749 浏览

asp.net-mvc - 预jit编译MVC Web应用程序

更新后使用我们的 MVC Web 应用程序时,第一次加载主页需要几分钟时间。第一次加载后,它加载得非常快。可能 MSIL 代码被编译为本地机器代码并被缓存。(如我错了请纠正我)。这发生在每一页上。

每次将新版本复制到服务器时,速度都很慢。为了解决这个问题,我尝试使用 ngen 对其进行预jit 编译,这样我们就可以为用户节省大量时间。但是,当为其项目 bin 文件夹中的每个 dll 执行“ngen install mydll.dll”时,它给了我几个错误。这是命令

第一个错误是:

该项目只是调试和构建良好。实现这一目标的正确方法是什么?

0 投票
0 回答
419 浏览

azure - 是否可以在 Azure 网站中使用 NGen dll?

我们目前正在使用 MVC3、.NET4.5、EF6.1、MSSQL2008(dev)、SQL Azure(Test and Live)。我们的应用程序非常复杂,在应用程序池刷新后,我们遇到了明显的预热滞后,大约 30 秒。我们使用外部自动服务来保持网站温暖,这还不错....但是,仅部署本机图像会是一个更好的解决方案,然后每当应用程序池出于任何原因刷新时,我们知道应用程序将加载为尽快。

因此,研究 NGEN 的原因。

但是我不确定这是否适用于 Azure 网站。我有一些问题:

1) NGen 需要管理员权限。据我了解,我需要管理员权限才能将本机图像安装到 Azure 网站,或者我可以在本地“相同 cpu”机器上生成它们并复制它们吗?

2) 现在要求完全信任。我相信这不是 WAWS 的问题。

3) NGen 是否只安装在缓存中而不生成某种文件以复制到不同的位置?

提前致谢。

0 投票
2 回答
3821 浏览

c# - 如何获取 mscorlib.ni.lib (.Net Framework 3.5) 的 PDB 文件

经过大量搜索,我仍然无法找到问题的解决方案。

我有一个 mdmp 文件。调用堆栈显示它正在使用 mscorlib.ni.dll。所以要获取函数信息,我需要获取它的 pdb 文件。

mscorlib.ni.dll 的版本是 2.0.50727.3655。我相信它来自.Net Framework 3.5。

由于 mscorlib.ni.dll 是 ngen.exe 生成的原生优化 dll,所以我需要使用 ngen.exe createpdb 为这个 dll 生成 pdf。

结果如下:

  1. 我在文件夹“C:\Windows\Microsoft.NET\Framework64\v3.5”中找不到 ngen.exe
  2. 我可以在文件夹“C:\Windows\Microsoft.NET\Framework64\v2”中找到 ngen.exe,但它没有 createpdb 选项。
  3. 我可以在文件夹“C:\Windows\Microsoft.NET\Framework64\v4.0.30319”中找到 ngen.exe,它确实支持 createpdb 选项,但它会报告错误。

Microsoft (R) CLR Native Image Generator - 版本 4.0.30319.18408 版权所有 (c) Microsoft Corporation。版权所有。在本机映像“C:\Windows\assembly\NativeImages_v2.0.507 7_64\mscorlib\5cd1c2848ff40eb0a8c149706ee394fa\mscorlib.ni.dll”中发现无效标头。未指定的错误(来自 HRESULT 的异常:0x80004005 (E_FAIL))

所以我不知道如何获取 Net Framework 3.5 的这个 mscorlib.ni.dll 的 pdb。

任何想法?

0 投票
1 回答
985 浏览

c# - 如何在 Windows Phone 8.1 上禁用本机图像生成?

我有一个适用于 Windows Phone 8.1 的 c++ 应用程序,它使用 C# 模块进行 xml 处理。该模块的 NGEN 版本从 System.StubHelpers.InterfaceMarshaler.ConvertToNative 抛出和 InvalidCastException,但非 NGEN 版本工作正常(更多详细信息:http: //social.msdn.microsoft.com/Forums/en -US/16fa4316-d0ae-4aca-ac70-9946c6cc4dfb/ngend-dll-throws-exception-but-winmd-does-not?forum=wpdevelop )。

无论如何,在我解决潜在问题之前,作为一种解决方法,我想简单地为我的应用程序禁用本机图像生成。但是,在 msdn 上建议的在 appx 的根目录中包含 nongen.txt 文件的方法似乎不起作用......该文件在那里,但 C# 模块似乎仍在进行 NGEN 处理。有没有其他人遇到过这个/有没有人知道如何为 Windows Phone 8.1 上的应用禁用 NGEN?