.NET运行时优化服务丢失

Sco*_*Tan 5 .net ngen

我目前正在开发要在安装该软件的同时开发的软件,它可以在后台为该软件创建本机映像。

我正在考虑使用NGEN,并将进程优先级设置为低,因为我不希望它消耗100%的CPU。但是我发现计算机上的“服务”实际上缺少“ .NET运行时优化服务”。因此,即使计算机处于“空闲”状态,NGEN也不会真正继续我的所有过程。

我只是想知道有什么方法可以重新注册服务,或者有什么解决方案吗?

PPa*_*ann -1

不确定您使用的是哪个版本的 .net,但是 ngen 并不总是在您想要部署到的所有 Maschine 上执行相同的操作。

\n\n

因此,微软改变了编译器和项目结构。我的项目中的一小段摘录显示,请查看PublishReadyToRun,因为PublishTrimmed执行 NGEN 过去所做的操作,通过将PublishSingleFile设置为 true 来制作单个文件会有所帮助,如果您希望轻松部署,因为它会生成 1 个巨大的 exe 并删除所有 dll 的。

\n\n
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">\n\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>netcoreapp3.0</TargetFramework>\n    <UseWindowsForms>true</UseWindowsForms>\n    <PublishTrimmed>true</PublishTrimmed>\n    <PublishReadyToRun>true</PublishReadyToRun>\n    <PublishSingleFile>true</PublishSingleFile>\n    <RuntimeIdentifier>win-x64</RuntimeIdentifier>\n  </PropertyGroup>\n\n  <PropertyGroup Condition="\'$(Configuration)|$(Platform)\'==\'Debug|AnyCPU\'">\n    <PlatformTarget>x64</PlatformTarget>\n  </PropertyGroup>\n  <ItemGroup>\n    <TrimmerRootAssembly Include="mscorlib" />\n    <TrimmerRootAssembly Include="System" />\n    <TrimmerRootAssembly Include="System.IO" />\n    <TrimmerRootAssembly Include="System.Threading.Tasks" />\n  </ItemGroup>\n\xe2\x80\xa6\n</Project>\n
Run Code Online (Sandbox Code Playgroud)\n\n

请查看Hanselman先生的博客。

\n\n

当我使用它时,我注意到的第一件事是,当 exe 加载依赖项时,我遇到了 FileNotFound 异常。您可以通过查看基本上通过优化删除的丢失文件的名称来解决此问题,并将它们添加到 TrimmerRootAssembly,就像我在示例中所做的那样。添加这 4 个之后,我就没有再遇到任何问题了。

\n\n

NGEN \n没有 NGEN 或“错误”的客户端计算机需要安装 .NET Framework SDK(为什么用户要安装 SDK/软件开发工具包...)

\n\n

如果该文件丢失(您可以使用如下所示的路径来测试它:

\n\n
Directory.GetFiles($@"{Environment.GetFolderPath(Environment.SpecialFolder.Windows)}\\Microsoft.NET\\Framework\\","ngen.exe",SearchOption.AllDirectories)\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果没有返回文件,您可以弹出一条消息,让用户下载并安装“正确的 sdk”,然后您可以使用 ngen.exe 的命令行继续执行优化策略

\n\n

低优先级\n以较低线程优先级启动应用程序的一个简单技巧是使用 START 命令启动它。\n在此输入图像描述

\n