public override SdkResult Resolve(SdkReference sdkReference, SdkResolverContext resolverContext, SdkResultFactory factory) { if (sdkReference.Name != "Mono.UE4.Sdk") { return(factory.IndicateFailure(new[] { $"Not a UE4 SDK reference" })); } //provide a way to force a specific directory string engineDir = Environment.GetEnvironmentVariable("MONOUE_SDKRESOLVER_OVERRIDE_ENGINE_DIR"); if (string.IsNullOrEmpty(engineDir)) { var uproject = GetUProjectFromMSBuildProject(resolverContext.SolutionFilePath, resolverContext.ProjectFilePath); if (uproject == null) { return(factory.IndicateFailureAndLog(new[] { $"Could not find a uproject file" })); } var engineAssociation = ReadEngineAssociationFromUProject(uproject); engineDir = GetEngineFromID(engineAssociation); if (string.IsNullOrEmpty(engineDir)) { string installedLocationsInfo = ". Found: " + string.Join(", ", EnumerateEngineInstallations().ToList().Select(x => x.ID)); return(factory.IndicateFailureAndLog(new[] { $"Could not find UE4 engine matching '{engineAssociation}' {installedLocationsInfo}" })); } } if (!Directory.Exists(engineDir)) { return(factory.IndicateFailureAndLog(new[] { $"UE4 engine directory '{engineDir}' does not exist" })); } if (!IsValidEngineDirectory(engineDir)) { return(factory.IndicateFailureAndLog(new[] { $"Engine '{engineDir}' is not a valid installation" })); } if (!IsMonoUEEngineDirectory(engineDir)) { return(factory.IndicateFailureAndLog(new[] { $"Engine '{engineDir}' does not contain MonoUE plugin" })); } var sdkDir = Path.Combine(engineDir, "Engine", "Plugins", "MonoUE", "MSBuild", "Sdks", sdkReference.Name, "Sdk"); if (Directory.Exists(sdkDir)) { string engineVersion = GetEngineVersion(engineDir); return(factory.IndicateSuccess(sdkDir, "1.0")); } return(factory.IndicateFailureAndLog(new[] { $"Did not find SDK '{sdkReference.Name}'" })); }