标签: ngen

如何在安装过程中正确使用 NGen .NET 应用程序

我正在Inno Setup为我的应用程序生成安装程序,我想在安装过程中为我的应用程序编写一个脚本到NGen。我想要的代码能够NGEN文件目标x86x64AnyCPU。我希望能够在和系统上使用NGen。我怎样才能做到这一点?32bit64bit

我找到了几个有用的链接:
获取 .NET Framework 目录路径
http://nsis.sourceforge.net/Get_directory_of_installed_.NET_runtime
我发现这是一个相当复杂的问题 - 最多可以有 4 个不同的版本的NGEN应用:

  1. 用于 CLR 2.0 和 32 位系统
  2. 用于 CLR 2.0 和 64 位系统
  3. 用于 CLR 4.0 和 32 位系统
  4. 用于 CLR 4.0 和 64 位系统

由于该应用程序可以针对 32 位 CPU 并在 64 位系统上运行,因此情况更加复杂。


所以我想到的是一个看起来像这样的函数:

function NGenFile(file: String; targetCPU: TTargetCPU; targetCLR: TTargetCLR): Boolean;
Run Code Online (Sandbox Code Playgroud)

[Code]在成功安装后调用它:

NGenFile(ExpandConstant('{app}\application.exe'), tcpu64, tclr20);
NGenFile(ExpandConstant('{app}\library1.dll'), tcpu64, tclr40); …
Run Code Online (Sandbox Code Playgroud)

.net c# installation inno-setup ngen

5
推荐指数
1
解决办法
4505
查看次数

在缓存外部生成本机映像

我想NGEN.EXE在创建安装程序之前使用以生成程序集的本机映像.我希望这能保持我的二进制文件Reflector.我对此是否正确?

我刚刚了解到所有本机映像现在都存储在本机映像缓存中.有没有办法获得本机二进制文件,然后我可以使用安装程序打包?另一方面,生成本机图像后是否可以摆脱原始组件?

编辑:我正在使用一个应用程序,它与服务器通信时使用硬编码密钥进行加密.使用.NET,人们可以轻松地将钥匙放在钥匙上.

.net gac ngen

4
推荐指数
1
解决办法
2500
查看次数

如何更改 NGen 在 WiX MSI 包中运行时显示的文本

我们在安装过程中使用 NGen 来优化应用程序的启动时间。

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"
     xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">
  ...
  <File Id="File.$(var.ProjectName.TargetName).exe" Source="$(var.ProjectName.TargetPath)" KeyPath="yes">
    <netfx:NativeImage Id="ngen.File.$(var.ProjectName.TargetName)" Platform="$(var.NgenPlatform)" Priority="0" AppBaseDirectory="INSTALLLOCATION"/>
  </File>
  ...
</Wix>
Run Code Online (Sandbox Code Playgroud)

在安装生成的 MSI 时,与其他步骤相比,“删除备份文件”步骤花费了非常长的时间。深入研究,我们发现当时 NGen 正在运行。

我们怎么能在那里写点别的东西,比如“我们现在在你的应用程序每次启动时为你节省了很多时间”?

wix ngen

4
推荐指数
1
解决办法
324
查看次数

分发NGEN之前的程序集是否有意义?

我发现使用NGEN从在安装最后一步了几个有趣的链接这一职位.有没有理由在建立时而不是在构建时NGEN你的程序集?我并不特别关心设置时间,但它似乎是一个不必要的步骤,可以通过我的构建自动化.

.net ngen

3
推荐指数
1
解决办法
749
查看次数

ngen用于将.NET代码编译成二进制文件,在运行代码时不需要安装.NET框架吗?

我在维基百科关于CLR的文章中阅读了以下段落:

或者,可以通过使用本机映像生成器(NGEN)在运行之前在单独的步骤中将CIL代码编译为本机代码.由于不再需要CIL到本机编译,这加速了软件的所有后续运行.

这是否意味着我可以使用任何.NET程序并将其编译为二进制文件,然后该二进制文件将能够在没有安装.NET框架的机器上运行?

.net ngen

3
推荐指数
1
解决办法
999
查看次数

使用ngen.exe编译内核

据我所知,Cosmos和SharpOS已经制作了自己的编译器来构建C#的二进制代码,但是你可以使用Microsoft的.NET AOT来做同样的事情吗?将C#编译为x86,即.我假设您将不得不遗漏使用语句,就像包含语句时的OS开发一样.任何反馈意见.谢谢

编辑:我想在内核开发中使用C#的主要原因是托管代码带来的内存管理,特别是单地址空间属性.是否有必要引导JIT编译器,然后编译C#?或者那时的环境是否仍然过于瘫痪?感谢您的反馈

c# ngen osdev

3
推荐指数
1
解决办法
674
查看次数

使用ngen.exe创建和分发本机映像

我试图使用ngen.exe从CIL二进制文件中获取本机映像. 这个网站解释说我可以在%WINDIR%\assembly执行ngen命令时获取本机图像ngen install abc.exe,但是我在计算机中找不到.我使用Windows 7 64bit和VS2010.

  • 在运行ngen后我在哪里/如何找到原生图像?
  • 我可以分发本机映像而不是CIL二进制文件吗?

c# ngen

3
推荐指数
1
解决办法
1445
查看次数

Ngen可以用于代码安全吗?

Ngen可以用作完美的代码混淆器,保护您的.NET CIL不会到达客户端吗?

我可以在我的开发PC上运行Ngen并将exe发送给具有兼容的.NET框架版本的每个客户端吗?(假设两者都是x86或x64)Ngen'd exe跨机器有什么区别?

我知道最新的Ngen生成一个包含IL + Native代码的exe,可以使用Reflector之类的东西将其提取并"转换"回源代码.但是,.NET Framework 1.1ngen 删除了生成的exe中的IL,如果使用.NET framework 1.1,它可以作为代码安全性的可能选择.

.net c# security obfuscation ngen

3
推荐指数
1
解决办法
986
查看次数

首次运行时自动运行Ngen.exe

我的应用没有安装程序.它是可移植的,但我需要运行ngen.exe它,因为它在启动时运行.

是否建议ngen.exe首次运行应用程序时自动运行?以后会引起任何问题吗?有内置的方法吗?

.net c# vb.net build ngen

3
推荐指数
1
解决办法
1566
查看次数

你可以使用Phoenix编译器作为更强大的NGEN吗?

如果您不了解Phoenix,它是Microsoft的编译器框架,它可以成为所有新编译器的基础.它可以从CIL,x86,x64和IA64读取代码; 并在x86,x64,IA64或CIL中发出代码.

我可以使用它将纯.Net应用程序转换为纯本机应用程序吗?我的意思是,它不必加载任何.Net .dll(甚至不是mscoree),并且将具有相同的语义?当然,这不包括反思.

.net compiler-construction native ngen

2
推荐指数
1
解决办法
617
查看次数

如何减少.net应用程序中的启动和运行时间?

我用C#用.NET框架编写windows应用程序.如何减少这些应用程序的启动时间?我的应用程序在启动和初始化期间感觉非常慢,特别是在显示初始表单时.

我的应用程序使用Access(MDB)数据库来保存数据.在某些形式中,它会加载数据,但是第一次应用程序显示任何给定的表单时,显示需要很长时间.

我已经尝试使用NGen来减少启动时间,但它并没有像我预期的那样帮助我.

c# performance ngen startup

2
推荐指数
1
解决办法
1833
查看次数

pre-jit-compiling MVC Web应用程序

在更新后使用我们的MVC Web应用程序时,首次加载主页需要几分钟时间.第一次加载后,加载速度非常快.可能MSIL代码被编译为Native Machine代码并被缓存.(如我错了请纠正我).每个页面都会出现这种情况.

每次将新版本复制到服务器时都会非常慢.为了解决这个问题,我试图用ngen进行pre-jit编译,这样我们就可以为用户节省大量时间.但是当对它的项目bin文件夹中的每个dll执行"ngen install mydll.dll"时,它会给我带来一些错误.这是命令

cd "C:\Windows\Microsoft.NET\Framework64\v4.0.30319"
for %%i in (C:\inetpub\wwwroot\myproject\bin\*.dll) do ngen install "%%i"
Run Code Online (Sandbox Code Playgroud)

第一个错误是:

Failed to load dependency System.Web.Mvc of assembly DotNetOpenAuth.Core, 
Version=4.3.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246 because of the following error : The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
Failed to load dependency log4net of assembly DotNetOpenAuth.Core, Version=4.3.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246 because of the following error : The system cannot find the file specified. (Exception from  HRESULT: 0x80070002)
Run Code Online (Sandbox Code Playgroud)

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

asp.net-mvc jit compilation ngen asp-classic

2
推荐指数
1
解决办法
2580
查看次数

NGen和通用集合.如何摆脱Jitting?

我正在努力研究ngen和泛型集合.我已经在解决方案中使用了所有程序集,但是每当我的应用程序执行该代码时,仍会以某种方式进行jitting:

private Dictionary<int, bool> VerifyedFunc; 

public SecurityProvider()
{
    ...
    VerifyedFunc = new Dictionary<int, bool>();
    ...       
}
Run Code Online (Sandbox Code Playgroud)

MDA消息:

Managed Debugging Assistant 'JitCompilationStart' has detected a problem in '*.exe'.
Additional Information: 
<mda:msg xmlns:mda="http://schemas.microsoft.com/CLR/2004/10/mda">
<mda:jitCompilationStartMsg break="true">
<method name="mscorlib!System.Collections.Generic.Dictionary`2::.ctor"/>
</mda:jitCompilationStartMsg>
</mda:msg>
Run Code Online (Sandbox Code Playgroud)

NGen和泛型集合是否存在一些问题?

.net clr optimization ngen winforms

1
推荐指数
1
解决办法
319
查看次数