public bool ValidateSDK(InstalledSDK sdk) { sdk.Owner = this; string path = sdk.Path; Match mBin = Regex.Match(path, "[/\\\\]bin$", RegexOptions.IgnoreCase); if (mBin.Success) { sdk.Path = path = path.Substring(0, mBin.Index); } IProject project = PluginBase.CurrentProject; if (project != null) { path = PathHelper.ResolvePath(path, Path.GetDirectoryName(project.ProjectPath)); } else { path = PathHelper.ResolvePath(path); } try { if (path == null || !Directory.Exists(path)) { ErrorManager.ShowInfo("Path not found:\n" + sdk.Path); return(false); } } catch (Exception ex) { ErrorManager.ShowInfo("Invalid path (" + ex.Message + "):\n" + sdk.Path); return(false); } string descriptor = Path.Combine(path, "MIN_CLI_VERSION"); if (File.Exists(descriptor)) { string raw = File.ReadAllText(descriptor); Match mVer = Regex.Match(raw, "[0-9.]+"); if (mVer.Success) { sdk.Name = Path.GetFileName(path); sdk.Version = mVer.Value; return(true); } else { ErrorManager.ShowInfo("Invalid SDK descriptor:\n" + descriptor); } } else { ErrorManager.ShowInfo("No SDK descriptor found:\n" + descriptor); } return(false); }
public bool ValidateSDK(InstalledSDK sdk) { sdk.Owner = this; IProject project = PluginBase.CurrentProject; string path = sdk.Path; if (project != null) { path = PathHelper.ResolvePath(path, Path.GetDirectoryName(project.ProjectPath)); } else { path = PathHelper.ResolvePath(path); } try { if (path == null || (!Directory.Exists(path) && !File.Exists(path))) { ErrorManager.ShowInfo("Path not found:\n" + sdk.Path); return(false); } } catch (Exception ex) { ErrorManager.ShowInfo("Invalid path (" + ex.Message + "):\n" + sdk.Path); return(false); } if (!Directory.Exists(path)) { path = Path.GetDirectoryName(path); } string descriptor = Path.Combine(path, "changes.txt"); if (File.Exists(descriptor)) { string raw = File.ReadAllText(descriptor); Match mVer = Regex.Match(raw, "[0-9\\-]+\\s*:\\s*([0-9.]+)"); if (mVer.Success) { sdk.Version = mVer.Groups[1].Value; sdk.Name = "MTASC " + sdk.Version; return(true); } else { ErrorManager.ShowInfo("Invalid changes.txt file:\n" + descriptor); } } else { ErrorManager.ShowInfo("No changes.txt found:\n" + descriptor); } return(false); }
public static Boolean IsUnderSDKPath(String file) { InstalledSDK sdk = PluginBase.CurrentSDK; if (sdk != null && !String.IsNullOrEmpty(sdk.Path) && file.StartsWith(sdk.Path)) { return(true); } return(false); }
/// <summary> /// Fix some settings values when the context has been created /// </summary> private void ValidateSettings() { if (settingObject.InstalledSDKs == null || settingObject.InstalledSDKs.Length == 0 || PluginBase.MainForm.RefreshConfig) { InstalledSDK sdk; List <InstalledSDK> sdks = new List <InstalledSDK>(); string includedSDK; includedSDK = "Tools\\flexsdk"; if (Directory.Exists(PathHelper.ResolvePath(includedSDK))) { InstalledSDKContext.Current = this; sdk = new InstalledSDK(this); sdk.Path = includedSDK; sdks.Add(sdk); } includedSDK = "Tools\\ascsdk"; if (Directory.Exists(PathHelper.ResolvePath(includedSDK))) { InstalledSDKContext.Current = this; sdk = new InstalledSDK(this); sdk.Path = includedSDK; sdks.Add(sdk); } if (settingObject.InstalledSDKs != null) { char[] slashes = new char[] { '/', '\\' }; foreach (InstalledSDK oldSdk in settingObject.InstalledSDKs) { string oldPath = oldSdk.Path.TrimEnd(slashes); foreach (InstalledSDK newSdk in sdks) { string newPath = newSdk.Path.TrimEnd(slashes); if (newPath.Equals(oldPath, StringComparison.OrdinalIgnoreCase)) { sdks.Remove(newSdk); break; } } } sdks.InsertRange(0, settingObject.InstalledSDKs); } settingObject.InstalledSDKs = sdks.ToArray(); } else { foreach (InstalledSDK sdk in settingObject.InstalledSDKs) { ValidateSDK(sdk); } } settingObject.OnClasspathChanged += SettingObjectOnClasspathChanged; settingObject.OnInstalledSDKsChanged += settingObjectOnInstalledSDKsChanged; }
static public string GetCompilerPath(Project project, InstalledSDK sdk) { if (project == null) { return(null); } project.CurrentSDK = PathHelper.ResolvePath(sdk.Path, project.Directory); if (project == PluginBase.CurrentProject) { PluginBase.CurrentSDK = sdk; } return(project.CurrentSDK); }
/// <summary> /// Fix some settings values when the context has been created /// </summary> private void ValidateSettings() { if (settingObject.InstalledSDKs == null || settingObject.InstalledSDKs.Length == 0 || PluginBase.MainForm.RefreshConfig) { string externalSDK; InstalledSDK sdk; List <InstalledSDK> sdks = new List <InstalledSDK>(); externalSDK = Environment.ExpandEnvironmentVariables("%HAXEPATH%"); if (!String.IsNullOrEmpty(externalSDK) && Directory.Exists(PathHelper.ResolvePath(externalSDK))) { InstalledSDKContext.Current = this; sdk = new InstalledSDK(this); sdk.Path = externalSDK; sdks.Add(sdk); } if (settingObject.InstalledSDKs != null) { char[] slashes = new char[] { '/', '\\' }; foreach (InstalledSDK oldSdk in settingObject.InstalledSDKs) { string oldPath = oldSdk.Path.TrimEnd(slashes); foreach (InstalledSDK newSdk in sdks) { string newPath = newSdk.Path.TrimEnd(slashes); if (newPath.Equals(oldPath, StringComparison.OrdinalIgnoreCase)) { sdks.Remove(newSdk); break; } } } sdks.InsertRange(0, settingObject.InstalledSDKs); } settingObject.InstalledSDKs = sdks.ToArray(); } else { foreach (InstalledSDK sdk in settingObject.InstalledSDKs) { sdk.Validate(); } } if (settingObject.CompletionServerPort == 0) { settingObject.CompletionServerPort = 6000; settingObject.CompletionMode = HaxeCompletionModeEnum.CompletionServer; } settingObject.OnClasspathChanged += SettingObjectOnClasspathChanged; }
public bool ValidateSDK(InstalledSDK sdk) { sdk.Owner = this; IProject project = PluginBase.CurrentProject; string path = sdk.Path; if (project != null) { path = PathHelper.ResolvePath(path, Path.GetDirectoryName(project.ProjectPath)); } else { path = PathHelper.ResolvePath(path); } try { if (path == null || (!Directory.Exists(path) && !File.Exists(path))) { ErrorManager.ShowInfo("Path not found:\n" + sdk.Path); return(false); } } catch (Exception ex) { ErrorManager.ShowInfo("Invalid path (" + ex.Message + "):\n" + sdk.Path); return(false); } if (!Directory.Exists(path)) { path = Path.GetDirectoryName(path); } string descriptor = Path.Combine(path, "Unity.exe"); if (File.Exists(descriptor)) { FileVersionInfo info = FileVersionInfo.GetVersionInfo(descriptor); sdk.Version = info.ProductVersion; sdk.Name = info.ProductName; } else { ErrorManager.ShowInfo("Unity.exe found:\n" + descriptor); } return(false); }
/// <summary> /// Fix some settings values when the context has been created /// </summary> private void ValidateSettings() { InstalledSDK sdk; List <InstalledSDK> sdks = new List <InstalledSDK>(); string usersdks = Environment.ExpandEnvironmentVariables("%USERPROFILE%\\.loom\\sdks"); if (Directory.Exists(usersdks)) { foreach (string dir in Directory.GetDirectories(usersdks)) { InstalledSDKContext.Current = this; sdk = new InstalledSDK(this); sdk.Path = dir; sdks.Add(sdk); } } if (settingObject.InstalledSDKs != null) { char[] slashes = new char[] { '/', '\\' }; foreach (InstalledSDK oldSdk in settingObject.InstalledSDKs) { string oldPath = oldSdk.Path.TrimEnd(slashes); foreach (InstalledSDK newSdk in sdks) { string newPath = newSdk.Path.TrimEnd(slashes); if (newPath.Equals(oldPath, StringComparison.OrdinalIgnoreCase)) { sdks.Remove(newSdk); break; } } } sdks.InsertRange(0, settingObject.InstalledSDKs); } settingObject.InstalledSDKs = sdks.ToArray(); settingObject.OnClasspathChanged += SettingObjectOnClasspathChanged; settingObject.OnInstalledSDKsChanged += settingObjectOnInstalledSDKsChanged; }
/// <summary> /// Fix some settings values when the context has been created /// </summary> private void ValidateSettings() { if (settingObject.InstalledSDKs == null || settingObject.InstalledSDKs.Length == 0) { string includedSDK = "Tools\\mtasc"; if (Directory.Exists(PathHelper.ResolvePath(includedSDK))) { InstalledSDK sdk = new InstalledSDK(this); sdk.Path = includedSDK; settingObject.InstalledSDKs = new InstalledSDK[] { sdk }; } } else { foreach (InstalledSDK sdk in settingObject.InstalledSDKs) { ValidateSDK(sdk); } } settingObject.OnClasspathChanged += SettingObjectOnClasspathChanged; }
/// <summary> /// Fix some settings values when the context has been created /// </summary> private void ValidateSettings() { if (settingObject.InstalledSDKs == null || settingObject.InstalledSDKs.Length == 0) { List <InstalledSDK> allSdks = new List <InstalledSDK>(); string includedSDK = "Tools\\mtasc"; if (Directory.Exists(PathHelper.ResolvePath(includedSDK))) { InstalledSDK sdk = new InstalledSDK(this); sdk.Path = includedSDK; allSdks.Add(sdk); } string appManDir = Path.Combine(PathHelper.BaseDir, @"Data\AppMan\Archive\mtasc"); if (Directory.Exists(appManDir)) { string[] versionDirs = Directory.GetDirectories(appManDir); foreach (string versionDir in versionDirs) { if (Directory.Exists(versionDir)) { InstalledSDK sdk = new InstalledSDK(this); sdk.Path = versionDir; allSdks.Add(sdk); } } } settingObject.InstalledSDKs = allSdks.ToArray(); } else { foreach (InstalledSDK sdk in settingObject.InstalledSDKs) { sdk.Validate(); } } settingObject.OnClasspathChanged += SettingObjectOnClasspathChanged; }
public bool ValidateSDK(InstalledSDK sdk) { sdk.Owner = this; string path = sdk.Path; if (path == null) { return(false); } Match mBin = Regex.Match(path, "[/\\\\]bin$", RegexOptions.IgnoreCase); if (mBin.Success) { sdk.Path = path = path.Substring(0, mBin.Index); } IProject project = PluginBase.CurrentProject; if (project != null) { path = PathHelper.ResolvePath(path, Path.GetDirectoryName(project.ProjectPath)); } else { path = PathHelper.ResolvePath(path); } try { if (path == null || !Directory.Exists(path)) { ErrorManager.ShowInfo("Path not found:\n" + sdk.Path); return(false); } } catch (Exception ex) { ErrorManager.ShowInfo("Invalid path (" + ex.Message + "):\n" + sdk.Path); return(false); } string descriptor = Path.Combine(path, "flex-sdk-description.xml"); if (!File.Exists(descriptor)) { descriptor = Path.Combine(path, "air-sdk-description.xml"); } if (File.Exists(descriptor)) { string raw = File.ReadAllText(descriptor); Match mName = Regex.Match(raw, "<name>([^<]+)</name>"); Match mVer = Regex.Match(raw, "<version>([^<]+)</version>"); if (mName.Success && mVer.Success) { sdk.Name = mName.Groups[1].Value; sdk.Version = mVer.Groups[1].Value; descriptor = Path.Combine(path, "AIR SDK Readme.txt"); if (sdk.Name.StartsWith("Flex") && File.Exists(descriptor)) { raw = File.ReadAllText(descriptor); Match mAIR = Regex.Match(raw, "Adobe AIR ([0-9.]+) SDK"); if (mAIR.Success) { sdk.Name += ", AIR " + mAIR.Groups[1].Value; sdk.Version += ", " + mAIR.Groups[1].Value; } } return(true); } else { ErrorManager.ShowInfo("Invalid SDK descriptor:\n" + descriptor); } } else { ErrorManager.ShowInfo("No SDK descriptor found:\n" + descriptor); } return(false); }
public bool ValidateSDK(InstalledSDK sdk) { sdk.Owner = this; IProject project = PluginBase.CurrentProject; string path = sdk.Path; if (project != null) { path = PathHelper.ResolvePath(path, Path.GetDirectoryName(project.ProjectPath)); } else { path = PathHelper.ResolvePath(path); } try { if (path == null || !Directory.Exists(path)) { //ErrorManager.ShowInfo("Path not found:\n" + sdk.Path); return(false); } } catch (Exception ex) { ErrorManager.ShowInfo("Invalid path (" + ex.Message + "):\n" + sdk.Path); return(false); } string[] lookup = new string[] { Path.Combine(path, "CHANGES.txt"), Path.Combine(path, Path.Combine("extra", "CHANGES.txt")), Path.Combine(path, Path.Combine("doc", "CHANGES.txt")) }; string descriptor = null; foreach (string p in lookup) { if (File.Exists(p)) { descriptor = p; break; } } if (descriptor != null) { string raw = File.ReadAllText(descriptor); Match mVer = Regex.Match(raw, "[0-9\\-?]+\\s*:\\s*([0-9.]+)"); if (mVer.Success) { sdk.Version = mVer.Groups[1].Value; sdk.Name = "Haxe " + sdk.Version; return(true); } else { ErrorManager.ShowInfo("Invalid changes.txt file:\n" + descriptor); } } else if (File.Exists(Path.Combine(path, "haxe.exe"))) { sdk.Version = "0.0"; sdk.Name = "Haxe ?"; return(true); } else { ErrorManager.ShowInfo("No change.txt found:\n" + descriptor); } return(false); }
public bool FDBuild(Project project, bool runOutput, bool releaseMode, InstalledSDK sdk) { string directory = Environment.CurrentDirectory; Environment.CurrentDirectory = project.Directory; string fdBuildDir = Path.Combine(PathHelper.ToolDir, "fdbuild"); string fdBuildPath = Path.Combine(fdBuildDir, "fdbuild.exe"); string arguments = " -ipc " + ipcName; if (sdk != null && sdk.Version != null) { arguments += " -version \"" + sdk.Version.Replace(',', ';') + "\""; if (!string.IsNullOrEmpty(project.CurrentSDK)) { arguments += " -compiler \"" + project.CurrentSDK + "\""; } } if (releaseMode) { arguments += " -notrace"; } arguments += " -library \"" + PathHelper.LibraryDir + "\""; foreach (string cp in PluginMain.Settings.GlobalClasspaths) { arguments += " -cp \"" + Environment.ExpandEnvironmentVariables(cp) + "\""; } if (project.TargetBuild != null) { arguments += " -target \"" + project.TargetBuild + "\""; } arguments = arguments.Replace("\\\"", "\""); // c# console args[] bugfix SetStatusBar(TextHelper.GetString("Info.BuildStarted")); menus.DisabledForBuild = true; // Apache Flex compat if (project.Language == "as3") { string playerglobalHome = Environment.ExpandEnvironmentVariables("%PLAYERGLOBAL_HOME%"); if (playerglobalHome.StartsWith("%")) { setPlayerglobalHomeEnv = true; } if (setPlayerglobalHomeEnv) { Environment.SetEnvironmentVariable("PLAYERGLOBAL_HOME", Path.Combine(project.CurrentSDK, "frameworks/libs/player")); } } // run FDBuild fdProcess.StartProcess(fdBuildPath, "\"" + project.ProjectPath + "\"" + arguments, project.Directory, delegate(bool success) { menus.DisabledForBuild = false; if (success) { SetStatusBar(TextHelper.GetString("Info.BuildSucceeded")); AddTrustFile(project); OnBuildComplete(project, runOutput); } else { SetStatusBar(TextHelper.GetString("Info.BuildFailed")); OnBuildFailed(project, runOutput); } Environment.CurrentDirectory = directory; }); return(true); }
/// <summary> /// Fix some settings values when the context has been created /// </summary> private void ValidateSettings() { if (settingObject.InstalledSDKs == null || settingObject.InstalledSDKs.Length == 0 || PluginBase.MainForm.RefreshConfig) { InstalledSDK sdk; List <InstalledSDK> sdks = new List <InstalledSDK>(); string includedSDK; includedSDK = "Tools\\flexsdk"; if (Directory.Exists(PathHelper.ResolvePath(includedSDK))) { InstalledSDKContext.Current = this; sdk = new InstalledSDK(this); sdk.Path = includedSDK; sdks.Add(sdk); } includedSDK = "Tools\\ascsdk"; if (Directory.Exists(PathHelper.ResolvePath(includedSDK))) { InstalledSDKContext.Current = this; sdk = new InstalledSDK(this); sdk.Path = includedSDK; sdks.Add(sdk); } /* Resolve AppMan Flex SDKs */ string appManDir = Path.Combine(PathHelper.BaseDir, @"Apps\flexsdk"); if (Directory.Exists(appManDir)) { string[] versionDirs = Directory.GetDirectories(appManDir); foreach (string versionDir in versionDirs) { if (Directory.Exists(versionDir)) { sdk = new InstalledSDK(this); sdk.Path = versionDir; sdks.Add(sdk); } } } /* Resolve AppMan Flex+AIR SDKs */ appManDir = Path.Combine(PathHelper.BaseDir, @"Apps\flexairsdk"); if (Directory.Exists(appManDir)) { string[] versionDirs = Directory.GetDirectories(appManDir); foreach (string versionDir in versionDirs) { if (Directory.Exists(versionDir)) { sdk = new InstalledSDK(this); sdk.Path = versionDir; sdks.Add(sdk); } } } /* Resolve AppMan AIR SDKs */ appManDir = Path.Combine(PathHelper.BaseDir, @"Apps\ascsdk"); if (Directory.Exists(appManDir)) { string[] versionDirs = Directory.GetDirectories(appManDir); foreach (string versionDir in versionDirs) { if (Directory.Exists(versionDir)) { sdk = new InstalledSDK(this); sdk.Path = versionDir; sdks.Add(sdk); } } } // // TODO: Resolve Apache Flex SDK // if (settingObject.InstalledSDKs != null) { char[] slashes = new char[] { '/', '\\' }; foreach (InstalledSDK oldSdk in settingObject.InstalledSDKs) { string oldPath = oldSdk.Path.TrimEnd(slashes); foreach (InstalledSDK newSdk in sdks) { string newPath = newSdk.Path.TrimEnd(slashes); if (newPath.Equals(oldPath, StringComparison.OrdinalIgnoreCase)) { sdks.Remove(newSdk); break; } } } sdks.InsertRange(0, settingObject.InstalledSDKs); } settingObject.InstalledSDKs = sdks.ToArray(); } else { foreach (InstalledSDK sdk in settingObject.InstalledSDKs) { sdk.Validate(); } } settingObject.OnClasspathChanged += SettingObjectOnClasspathChanged; settingObject.OnInstalledSDKsChanged += settingObjectOnInstalledSDKsChanged; }
static public InstalledSDK MatchSDK(InstalledSDK[] sdks, string preferredSDK) { if (sdks == null) { sdks = new InstalledSDK[] { } } ; // default sdk if (String.IsNullOrEmpty(preferredSDK)) { LatestSDKMatchQuality = -1; foreach (InstalledSDK sdk in sdks) { if (sdk.IsValid) { return(sdk); } } return(InstalledSDK.INVALID_SDK); } string[] parts = (";;" + preferredSDK).Split(';'); // name;version // match name string name = parts[parts.Length - 3]; if (name != "") { foreach (InstalledSDK sdk in sdks) { if (sdk.IsValid && sdk.Name == name) { LatestSDKMatchQuality = 0; return(sdk); } } } // match version string version = parts[parts.Length - 2]; if (version != "") { InstalledSDK bestMatch = null; int bestScore = int.MaxValue; foreach (InstalledSDK sdk in sdks) { if (!sdk.IsValid) { continue; } int score = CompareVersions(sdk.Version ?? "", version); if (score < bestScore) { bestScore = score; bestMatch = sdk; } } if (bestMatch != null) { LatestSDKMatchQuality = bestScore; return(bestMatch); } } // new SDK from path if (sdks.Length > 0) { InstalledSDKContext.Current = sdks[0].Owner; } InstalledSDK newSdk = new InstalledSDK(); InstalledSDKContext.Current = null; newSdk.Path = parts[parts.Length - 1]; LatestSDKMatchQuality = -1; return(newSdk); }
public bool Build(Project project, bool runOutput, bool releaseMode) { // save modified files mainForm.CallCommand("SaveAllModified", null); string compiler = null; InstalledSDK sdk = null; if (project.IsCompilable) { sdk = GetProjectSDK(project); compiler = GetCompilerPath(project, sdk); } project.TraceEnabled = !releaseMode; if (project.OutputType == OutputType.OtherIDE) { // compile using associated IDE string error; string command = project.GetOtherIDE(runOutput, releaseMode, out error); if (error != null) { ErrorManager.ShowInfo(TextHelper.GetString(error)); } else { if (command == "FlashIDE") { RunFlashIDE(project, runOutput, releaseMode); } else { Hashtable data = new Hashtable(); data["command"] = command; data["project"] = project; data["runOutput"] = runOutput; data["releaseMode"] = releaseMode; DataEvent de = new DataEvent(EventType.Command, "ProjectManager.RunWithAssociatedIDE", data); EventManager.DispatchEvent(project, de); if (de.Handled) { return(true); } } } return(false); } else if (project.OutputType == OutputType.CustomBuild) { // validate commands not empty if (project.PreBuildEvent.Trim().Length == 0 && project.PostBuildEvent.Trim().Length == 0) { String info = TextHelper.GetString("Info.NoOutputAndNoBuild"); TraceManager.Add(info); } } else if (project.IsCompilable) { // ask the project to validate itself string error; project.ValidateBuild(out error); if (error != null) { ErrorManager.ShowInfo(TextHelper.GetString(error)); return(false); } if (project.OutputPath.Length < 1) { String info = TextHelper.GetString("Info.SpecifyValidOutputSWF"); ErrorManager.ShowInfo(info); return(false); } if (compiler == null || (!Directory.Exists(compiler) && !File.Exists(compiler))) { string info = TextHelper.GetString("Info.CheckSDKSettings"); MessageBox.Show(info, TextHelper.GetString("Title.ConfigurationRequired"), MessageBoxButtons.OK); return(false); } } // close running AIR projector if (project.MovieOptions.Platform == AS3MovieOptions.AIR_PLATFORM || project.MovieOptions.Platform == AS3MovieOptions.AIR_MOBILE_PLATFORM) { foreach (Process proc in Process.GetProcessesByName("adl")) { try { proc.Kill(); proc.WaitForExit(10 * 1000); } catch { } } } return(FDBuild(project, runOutput, releaseMode, sdk)); }
public static Boolean IsUnderSDKPath(String file) { InstalledSDK sdk = PluginBase.CurrentSDK; return(sdk != null && !String.IsNullOrEmpty(sdk.Path) && file.StartsWithOrdinal(sdk.Path)); }
public bool ValidateSDK(InstalledSDK sdk) { return(true); }
static public InstalledSDK MatchSDK(InstalledSDK[] sdks, string preferredSDK) { if (sdks == null) { sdks = new InstalledSDK[] { } } ; // default sdk if (String.IsNullOrEmpty(preferredSDK)) { LatestSDKMatchQuality = -1; foreach (InstalledSDK sdk in sdks) { if (sdk.IsValid) { return(sdk); } } return(InstalledSDK.INVALID_SDK); } string[] parts = (";;" + preferredSDK).Split(';'); // name;version // match name string name = parts[parts.Length - 3]; if (name != "") { foreach (InstalledSDK sdk in sdks) { if (sdk.IsValid && sdk.Name == name) { LatestSDKMatchQuality = 0; return(sdk); } } } // match version string version = parts[parts.Length - 2]; if (version != "") { InstalledSDK bestMatch = null; int bestScore = int.MaxValue; foreach (InstalledSDK sdk in sdks) { if (!sdk.IsValid) { continue; } int score = CompareVersions(sdk.Version ?? "", version); if (score < bestScore) { bestScore = score; bestMatch = sdk; } } if (bestMatch != null) { LatestSDKMatchQuality = bestScore; return(bestMatch); } } // new SDK from path string sdkPath = parts[parts.Length - 1]; if (sdks.Length > 0) { InstalledSDKContext.Current = sdks[0].Owner; } else { TraceManager.AddAsync("Warning: compilation may fail if you do not have any (non-custom) SDK configured for the language", -3); } InstalledSDK newSdk = new InstalledSDK(); InstalledSDKContext.Current = null; newSdk.Path = sdkPath; LatestSDKMatchQuality = -1; return(newSdk); }