Ngen was never self-contained however and ngen-ed binaries were system and runtime specific. You pretty much had to assume you couldn't ship ngen-ed binaries between machines and always ngen in place on the end user's machine.
.NET Core's new AOT systems are much more capable than ngen ever was, including for static, self-contained binaries that you could potentially ship to all systems of a target architecture without shipping the non-AOT IL binaries as well.
(ETA: Which is why the vast majority of .NET software hardly ever bothered with ngen except for very specific per-machine performance needs.)
.NET Core's new AOT systems are much more capable than ngen ever was, including for static, self-contained binaries that you could potentially ship to all systems of a target architecture without shipping the non-AOT IL binaries as well.
(ETA: Which is why the vast majority of .NET software hardly ever bothered with ngen except for very specific per-machine performance needs.)