public static string GetPrivateBinPath(string basePath, IList assemblies) { StringBuilder sb = new StringBuilder(200); ArrayList dirList = new ArrayList(); foreach (string assembly in assemblies) { string dir = PathUtils.RelativePath(basePath, Path.GetDirectoryName(assembly)); if (dir != null && dir != "." && !dirList.Contains(dir)) { dirList.Add(dir); if (sb.Length > 0) { sb.Append(Path.PathSeparator); } sb.Append(dir); } } return(sb.Length == 0 ? null : sb.ToString()); }
public void Save() { projectPath = ProjectPathFromFile(projectPath); XmlTextWriter writer = new XmlTextWriter(projectPath, System.Text.Encoding.UTF8); writer.Formatting = Formatting.Indented; writer.WriteStartElement("NUnitProject"); if (configs.Count > 0 || this.BasePath != this.DefaultBasePath) { writer.WriteStartElement("Settings"); if (configs.Count > 0) { writer.WriteAttributeString("activeconfig", ActiveConfigName); } if (this.BasePath != this.DefaultBasePath) { writer.WriteAttributeString("appbase", this.BasePath); } writer.WriteEndElement(); } foreach (ProjectConfig config in Configs) { writer.WriteStartElement("Config"); writer.WriteAttributeString("name", config.Name); string appbase = config.BasePath; if (!PathUtils.SamePathOrUnder(this.BasePath, appbase)) { writer.WriteAttributeString("appbase", appbase); } else if (config.RelativeBasePath != null) { writer.WriteAttributeString("appbase", config.RelativeBasePath); } string configFile = config.ConfigurationFile; if (configFile != null && configFile != this.ConfigurationFile) { writer.WriteAttributeString("configfile", config.ConfigurationFile); } if (config.BinPathType == BinPathType.Manual) { writer.WriteAttributeString("binpath", config.PrivateBinPath); } else { writer.WriteAttributeString("binpathtype", config.BinPathType.ToString()); } foreach (string assembly in config.Assemblies) { writer.WriteStartElement("assembly"); writer.WriteAttributeString("path", PathUtils.RelativePath(config.BasePath, assembly)); writer.WriteEndElement(); } writer.WriteEndElement(); } writer.WriteEndElement(); writer.Close(); this.IsDirty = false; // Once we save a project, it's no longer // loaded as an assembly wrapper on reload. this.isAssemblyWrapper = false; }