#pragma warning restore 618 public static void PreferencesGUI() { bool preferencesChangedThisFrame = false; EditorGUILayout.LabelField($"Version: {NuGetForUnityVersion}"); if (NugetHelper.NugetConfigFile == null) { NugetHelper.LoadNugetConfigFile(); } Debug.Assert(NugetHelper.NugetConfigFile != null, "NugetHelper.NugetConfigFile != null"); bool installFromCache = EditorGUILayout.Toggle("Install From the Cache", NugetHelper.NugetConfigFile.InstallFromCache); if (installFromCache != NugetHelper.NugetConfigFile.InstallFromCache) { preferencesChangedThisFrame = true; NugetHelper.NugetConfigFile.InstallFromCache = installFromCache; } bool readOnlyPackageFiles = EditorGUILayout.Toggle("Read-Only Package Files", NugetHelper.NugetConfigFile.ReadOnlyPackageFiles); if (readOnlyPackageFiles != NugetHelper.NugetConfigFile.ReadOnlyPackageFiles) { preferencesChangedThisFrame = true; NugetHelper.NugetConfigFile.ReadOnlyPackageFiles = readOnlyPackageFiles; } bool verbose = EditorGUILayout.Toggle("Use Verbose Logging", NugetHelper.NugetConfigFile.Verbose); if (verbose != NugetHelper.NugetConfigFile.Verbose) { preferencesChangedThisFrame = true; NugetHelper.NugetConfigFile.Verbose = verbose; } EditorGUILayout.LabelField("Package Sources:"); _scrollPosition = EditorGUILayout.BeginScrollView(_scrollPosition); NugetPackageSource sourceToMoveUp = null; NugetPackageSource sourceToMoveDown = null; NugetPackageSource sourceToRemove = null; foreach (var source in NugetHelper.NugetConfigFile.PackageSources) { EditorGUILayout.BeginVertical(); { EditorGUILayout.BeginHorizontal(); { EditorGUILayout.BeginVertical(GUILayout.Width(20)); { GUILayout.Space(10); bool isEnabled = EditorGUILayout.Toggle(source.IsEnabled, GUILayout.Width(20)); if (isEnabled != source.IsEnabled) { preferencesChangedThisFrame = true; source.IsEnabled = isEnabled; } } EditorGUILayout.EndVertical(); EditorGUILayout.BeginVertical(); { string name = EditorGUILayout.TextField(source.Name); if (name != source.Name) { preferencesChangedThisFrame = true; source.Name = name; } string savedPath = EditorGUILayout.TextField(source.SavedPath).Trim(); if (savedPath != source.SavedPath) { preferencesChangedThisFrame = true; source.SavedPath = savedPath; } } EditorGUILayout.EndVertical(); } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); { GUILayout.Space(29); EditorGUIUtility.labelWidth = 75; EditorGUILayout.BeginVertical(); bool hasPassword = EditorGUILayout.Toggle("Credentials", source.HasPassword); if (hasPassword != source.HasPassword) { preferencesChangedThisFrame = true; source.HasPassword = hasPassword; } if (source.HasPassword) { string userName = EditorGUILayout.TextField("User Name", source.UserName); if (userName != source.UserName) { preferencesChangedThisFrame = true; source.UserName = userName; } string savedPassword = EditorGUILayout.PasswordField("Password", source.SavedPassword); if (savedPassword != source.SavedPassword) { preferencesChangedThisFrame = true; source.SavedPassword = savedPassword; } } else { source.UserName = null; } EditorGUIUtility.labelWidth = 0; EditorGUILayout.EndVertical(); } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); { if (GUILayout.Button("Move Up")) { sourceToMoveUp = source; } if (GUILayout.Button("Move Down")) { sourceToMoveDown = source; } if (GUILayout.Button("Remove")) { sourceToRemove = source; } } EditorGUILayout.EndHorizontal(); } EditorGUILayout.EndVertical(); } if (sourceToMoveUp != null) { int index = NugetHelper.NugetConfigFile.PackageSources.IndexOf(sourceToMoveUp); if (index > 0) { NugetHelper.NugetConfigFile.PackageSources[index] = NugetHelper.NugetConfigFile.PackageSources[index - 1]; NugetHelper.NugetConfigFile.PackageSources[index - 1] = sourceToMoveUp; } preferencesChangedThisFrame = true; } if (sourceToMoveDown != null) { int index = NugetHelper.NugetConfigFile.PackageSources.IndexOf(sourceToMoveDown); if (index < NugetHelper.NugetConfigFile.PackageSources.Count - 1) { NugetHelper.NugetConfigFile.PackageSources[index] = NugetHelper.NugetConfigFile.PackageSources[index + 1]; NugetHelper.NugetConfigFile.PackageSources[index + 1] = sourceToMoveDown; } preferencesChangedThisFrame = true; } if (sourceToRemove != null) { NugetHelper.NugetConfigFile.PackageSources.Remove(sourceToRemove); preferencesChangedThisFrame = true; } if (GUILayout.Button("Add New Source")) { NugetHelper.NugetConfigFile.PackageSources.Add(new NugetPackageSource("New Source", "source_path")); preferencesChangedThisFrame = true; } EditorGUILayout.EndScrollView(); if (GUILayout.Button("Reset To Default")) { NugetConfigFile.CreateDefaultFile(NugetHelper.NugetConfigFilePath); NugetHelper.LoadNugetConfigFile(); preferencesChangedThisFrame = true; } if (preferencesChangedThisFrame) { NugetHelper.NugetConfigFile.Save(NugetHelper.NugetConfigFilePath); } }
/// <summary> /// Loads a NuGet.config file at the given filepath. /// </summary> /// <param name="filePath">The full filepath to the NuGet.config file to load.</param> /// <returns>The newly loaded <see cref="NugetConfigFile"/>.</returns> public static NugetConfigFile Load(string filePath) { NugetConfigFile configFile = new NugetConfigFile { PackageSources = new List <NugetPackageSource>(), InstallFromCache = true, ReadOnlyPackageFiles = false, }; XDocument file = XDocument.Load(filePath); // Force disable NugetHelper.DisableWSAPExportSetting(filePath, false); // read the full list of package sources (some may be disabled below) Debug.Assert(file.Root != null, "file.Root != null"); XElement packageSources = file.Root.Element("packageSources"); if (packageSources != null) { var adds = packageSources.Elements("add"); foreach (var add in adds) { configFile.PackageSources.Add(new NugetPackageSource(add.Attribute("key")?.Value, add.Attribute("value")?.Value)); } } // read the active package source (may be an aggregate of all enabled sources!) XElement activePackageSource = file.Root.Element("activePackageSource"); if (activePackageSource != null) { var add = activePackageSource.Element("add"); configFile.ActivePackageSource = new NugetPackageSource(add?.Attribute("key")?.Value, add?.Attribute("value")?.Value); } // disable all listed disabled package sources XElement disabledPackageSources = file.Root.Element("disabledPackageSources"); if (disabledPackageSources != null) { var adds = disabledPackageSources.Elements("add"); foreach (var add in adds) { string name = add.Attribute("key")?.Value; string disabled = add.Attribute("value")?.Value; if (String.Equals(disabled, "true", StringComparison.OrdinalIgnoreCase)) { var source = configFile.PackageSources.FirstOrDefault(p => p.Name == name); if (source != null) { source.IsEnabled = false; } } } } // set all listed passwords for package source credentials XElement packageSourceCredentials = file.Root.Element("packageSourceCredentials"); if (packageSourceCredentials != null) { foreach (var sourceElement in packageSourceCredentials.Elements()) { string name = sourceElement.Name.LocalName; var source = configFile.PackageSources.FirstOrDefault(p => p.Name == name); if (source != null) { var adds = sourceElement.Elements("add"); foreach (var add in adds) { if (string.Equals(add.Attribute("key")?.Value, "userName", StringComparison.OrdinalIgnoreCase)) { string userName = add.Attribute("value")?.Value; source.UserName = userName; } if (string.Equals(add.Attribute("key")?.Value, "clearTextPassword", StringComparison.OrdinalIgnoreCase)) { string password = add.Attribute("value")?.Value; source.SavedPassword = password; } } } } } // read the configuration data XElement config = file.Root.Element("config"); if (config != null) { var adds = config.Elements("add"); foreach (var add in adds) { string key = add.Attribute("key")?.Value; string value = add.Attribute("value")?.Value; if (String.Equals(key, "repositoryPath", StringComparison.OrdinalIgnoreCase)) { configFile._savedRepositoryPath = value; configFile.RepositoryPath = Environment.ExpandEnvironmentVariables(value); if (!Path.IsPathRooted(configFile.RepositoryPath)) { string repositoryPath = Path.Combine(UnityEngine.Application.dataPath, configFile.RepositoryPath); repositoryPath = Path.GetFullPath(repositoryPath); configFile.RepositoryPath = repositoryPath; } } else if (String.Equals(key, "DefaultPushSource", StringComparison.OrdinalIgnoreCase)) { configFile.DefaultPushSource = value; } else if (String.Equals(key, "verbose", StringComparison.OrdinalIgnoreCase)) { configFile.Verbose = bool.Parse(value); } else if (String.Equals(key, "InstallFromCache", StringComparison.OrdinalIgnoreCase)) { configFile.InstallFromCache = bool.Parse(value); } else if (String.Equals(key, "ReadOnlyPackageFiles", StringComparison.OrdinalIgnoreCase)) { configFile.ReadOnlyPackageFiles = bool.Parse(value); } } } return(configFile); }