Migrate works great for most things.
If you have a custom C++ class, it’s a headache. Instead of your own C++ classes, plugins are recommended. Your plugins will migrate.
If marketplace assets are already on the map, they will be included as part of the migration (only those assets). Otherwise, you can just add the package/plugin to the new project from your library.