How to build a stand-alone program that depends on the Engine Module

Hello everyone,

I am trying to create a new stand-alone program that can edit uasset files. In particular, those uasset files that stores only UDataAsset.

The purpose of the program is to enable editing such uasset files without launching the Editor.

I start by copying the BlankProgram project and add Engine to its PrivateDependencyModuleNames, this leads to more and more dependencies to compile the program, and the Build.cs file finally becomes:

	public DataAssetEditor(ReadOnlyTargetRules Target) : base(Target)
	{
		PublicIncludePaths.Add("Runtime/Launch/Public");

		PrivateIncludePaths.Add("Runtime/Launch/Private");		// For LaunchEngineLoop.cpp include

        PrivateDependencyModuleNames.AddRange(
            new string[] {
                "AutomationController",
                "AutomationWorker",
                "Core",
                "CoreUObject",
                "DerivedDataCache",
                "Engine",
                "HeadMountedDisplay",
                "InstallBundleManager",
                "MediaUtils",
                "MoviePlayer",
                "MoviePlayerProxy",
                "PreLoadScreen",
                "ProfilerService",
                "Projects",
                "SessionServices",
                "SlateNullRenderer",
                "SlateRHIRenderer",
                "TaskGraph",
            }
        );
	}


The main function is the same as that of the BlankProgram project:

INT32_MAIN_INT32_ARGC_TCHAR_ARGV()
{
	GEngineLoop.PreInit(ArgC, ArgV);
	UE_LOG(LogDataAssetEditor, Display, TEXT("Hello World"));
	FEngineLoop::AppExit();
	return 0;
}

However, I can not launch the program properly. It triggers a assert and then the program complains:

Game files required to initialize the global shader library are missing from:

Engine/Programs/DataAssetEditor/Content

Please makesure the game is installed correctly.

To solve this problem I create a symbolic link to the Content directory at the described directory, but this does not solve the problem.

I am so confused. There is no documentation or tutorial about how to create a stand-alone program that depends on the Engine module. I need the Engine module because I need the types defined by it, such as UDataAsset and UAnimMontage. I also want to utilize functions such as LoadPackage to load uasset files. However, I do not need any other modules since I am just trying to create a console program, but compiling with the Engine module inevitably requires the other dependencies that make things more complicated.

I have tried use ReplicationSystemTest as another starting point and template, but that does not lead to success neither.

Do I have to depends on the Engine module to achieve my purpose?

Hope I can get some help here.