/// <summary> /// Saves this NuGet.config file to disk. /// </summary> /// <param name="filepath">The filepath to where this NuGet.config will be saved.</param> public void Save(string filepath) { XDocument configFile = new XDocument(); XElement packageSources = new XElement("packageSources"); XElement disabledPackageSources = new XElement("disabledPackageSources"); XElement packageSourceCredentials = new XElement("packageSourceCredentials"); XElement addElement; // save all enabled and disabled package sources foreach (var source in PackageSources) { addElement = new XElement("add"); addElement.Add(new XAttribute("key", source.Name)); addElement.Add(new XAttribute("value", source.SavedPath)); packageSources.Add(addElement); if (!source.IsEnabled) { addElement = new XElement("add"); addElement.Add(new XAttribute("key", source.Name)); addElement.Add(new XAttribute("value", "true")); disabledPackageSources.Add(addElement); } if (source.HasPassword) { XElement sourceElement = new XElement(source.Name); packageSourceCredentials.Add(sourceElement); addElement = new XElement("add"); addElement.Add(new XAttribute("key", "clearTextPassword")); addElement.Add(new XAttribute("value", source.SavedPassword)); sourceElement.Add(addElement); } } // save the active package source (may be an aggregate) XElement activePackageSource = new XElement("activePackageSource"); addElement = new XElement("add"); addElement.Add(new XAttribute("key", "All")); addElement.Add(new XAttribute("value", "(Aggregate source)")); activePackageSource.Add(addElement); XElement config = new XElement("config"); // save the un-expanded respository path addElement = new XElement("add"); addElement.Add(new XAttribute("key", "repositoryPath")); addElement.Add(new XAttribute("value", savedRepositoryPath)); config.Add(addElement); // save the default push source addElement = new XElement("add"); addElement.Add(new XAttribute("key", "DefaultPushSource")); addElement.Add(new XAttribute("value", DefaultPushSource)); config.Add(addElement); if (Verbose) { addElement = new XElement("add"); addElement.Add(new XAttribute("key", "verbose")); addElement.Add(new XAttribute("value", Verbose.ToString().ToLower())); config.Add(addElement); } if (this.RestoreOnLoad) { addElement = new XElement("add"); addElement.Add(new XAttribute("key", "RestoreOnLoad")); addElement.Add(new XAttribute("value", RestoreOnLoad.ToString().ToLower())); config.Add(addElement); } if (!InstallFromCache) { addElement = new XElement("add"); addElement.Add(new XAttribute("key", "InstallFromCache")); addElement.Add(new XAttribute("value", InstallFromCache.ToString().ToLower())); config.Add(addElement); } if (!ReadOnlyPackageFiles) { addElement = new XElement("add"); addElement.Add(new XAttribute("key", "ReadOnlyPackageFiles")); addElement.Add(new XAttribute("value", ReadOnlyPackageFiles.ToString().ToLower())); config.Add(addElement); } XElement configuration = new XElement("configuration"); configuration.Add(packageSources); configuration.Add(disabledPackageSources); configuration.Add(packageSourceCredentials); configuration.Add(activePackageSource); configuration.Add(config); // saving ignored dependencies XElement ignoredDependencies = new XElement("ignoredDependencies"); foreach (var iDependancyPackageID in IgnoredDependencies) { addElement = new XElement("add"); addElement.Add(new XAttribute("value", iDependancyPackageID)); ignoredDependencies.Add(addElement); } configuration.Add(ignoredDependencies); configFile.Add(configuration); // remove the read only flag on the file, if there is one. if (File.Exists(filepath)) { FileAttributes attributes = File.GetAttributes(filepath); if ((attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly) { attributes &= ~FileAttributes.ReadOnly; File.SetAttributes(filepath, attributes); } } configFile.Save(filepath); }
/// <summary> /// Saves this NuGet.config file to disk. /// </summary> /// <param name="filepath">The filepath to where this NuGet.config will be saved.</param> public void Save(string filepath) { RefreshRepositoryPath(); var configFile = new XDocument(); var packageSources = new XElement("packageSources"); var disabledPackageSources = new XElement("disabledPackageSources"); var packageSourceCredentials = new XElement("packageSourceCredentials"); XElement addElement; // save all enabled and disabled package sources foreach (var source in PackageSources) { addElement = new XElement("add"); addElement.Add(new XAttribute("key", source.Name)); addElement.Add(new XAttribute("value", source.SavedPath)); packageSources.Add(addElement); if (!source.IsEnabled) { addElement = new XElement("add"); addElement.Add(new XAttribute("key", source.Name)); addElement.Add(new XAttribute("value", "true")); disabledPackageSources.Add(addElement); } if (source.HasPassword) { var sourceElement = new XElement(source.Name); packageSourceCredentials.Add(sourceElement); addElement = new XElement("add"); addElement.Add(new XAttribute("key", "userName")); addElement.Add(new XAttribute("value", source.UserName ?? string.Empty)); sourceElement.Add(addElement); addElement = new XElement("add"); addElement.Add(new XAttribute("key", "clearTextPassword")); addElement.Add(new XAttribute("value", source.SavedPassword)); sourceElement.Add(addElement); } } // save the active package source (may be an aggregate) var activePackageSource = new XElement("activePackageSource"); addElement = new XElement("add"); addElement.Add(new XAttribute("key", "All")); addElement.Add(new XAttribute("value", "(Aggregate source)")); activePackageSource.Add(addElement); var config = new XElement("config"); // save the un-expanded respository path addElement = new XElement("add"); addElement.Add(new XAttribute("key", "repositoryPath")); addElement.Add(new XAttribute("value", SavedRepositoryPath)); config.Add(addElement); // save the default push source if (DefaultPushSource != null) { addElement = new XElement("add"); addElement.Add(new XAttribute("key", "DefaultPushSource")); addElement.Add(new XAttribute("value", DefaultPushSource)); config.Add(addElement); } // save the DeleteInitCode setting addElement = new XElement("add"); addElement.Add(new XAttribute("key", "AllowUninstallAll")); addElement.Add(new XAttribute("value", AllowUninstallAll)); config.Add(addElement); if (Verbose) { addElement = new XElement("add"); addElement.Add(new XAttribute("key", "verbose")); addElement.Add(new XAttribute("value", Verbose.ToString().ToLower())); config.Add(addElement); } if (!InstallFromCache) { addElement = new XElement("add"); addElement.Add(new XAttribute("key", "InstallFromCache")); addElement.Add(new XAttribute("value", InstallFromCache.ToString().ToLower())); config.Add(addElement); } if (!ReadOnlyPackageFiles) { addElement = new XElement("add"); addElement.Add(new XAttribute("key", "ReadOnlyPackageFiles")); addElement.Add(new XAttribute("value", ReadOnlyPackageFiles.ToString().ToLower())); config.Add(addElement); } var configuration = new XElement("configuration"); configuration.Add(packageSources); configuration.Add(disabledPackageSources); configuration.Add(packageSourceCredentials); configuration.Add(activePackageSource); configuration.Add(config); configFile.Add(configuration); // remove the read only flag on the file, if there is one. if (File.Exists(filepath)) { var attributes = File.GetAttributes(filepath); if ((attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly) { attributes &= ~FileAttributes.ReadOnly; File.SetAttributes(filepath, attributes); } } configFile.Save(filepath); }