void WriteFileInternal (string file, Solution solution, string baseDir, MSBuildFileFormat format, bool saveProjects, IProgressMonitor monitor)
{
SolutionFolder c = solution.RootFolder;
using (StreamWriter sw = new StreamWriter (file, false, Encoding.UTF8)) {
sw.NewLine = "\r\n";
SlnData slnData = GetSlnData (c);
if (slnData == null) {
// If a non-msbuild project is being converted by just
// changing the fileformat, then create the SlnData for it
slnData = new SlnData ();
c.ExtendedProperties [typeof (SlnFileFormat)] = slnData;
}
slnData.UpdateVersion (format);
sw.WriteLine ();
//Write Header
sw.WriteLine ("Microsoft Visual Studio Solution File, Format Version " + slnData.VersionString);
sw.WriteLine (slnData.HeaderComment);
if (slnData.VisualStudioVersion != null)
sw.WriteLine ("VisualStudioVersion = {0}", slnData.VisualStudioVersion);
if (slnData.MinimumVisualStudioVersion != null)
sw.WriteLine ("MinimumVisualStudioVersion = {0}", slnData.MinimumVisualStudioVersion);
//Write the projects
monitor.BeginTask (GettextCatalog.GetString ("Saving projects"), 1);
WriteProjects (c, baseDir, sw, saveProjects, monitor);
monitor.EndTask ();
//Write the lines for unknownProjects
foreach (string l in slnData.UnknownProjects)
sw.WriteLine (l);
//Write the Globals
sw.WriteLine ("Global");
//Write SolutionConfigurationPlatforms
//FIXME: SolutionConfigurations?
sw.WriteLine ("\tGlobalSection(SolutionConfigurationPlatforms) = preSolution");
foreach (SolutionConfiguration config in solution.Configurations)
sw.WriteLine ("\t\t{0} = {0}", ToSlnConfigurationId (config));
sw.WriteLine ("\tEndGlobalSection");
//Write ProjectConfigurationPlatforms
sw.WriteLine ("\tGlobalSection(ProjectConfigurationPlatforms) = postSolution");
List<string> list = new List<string> ();
WriteProjectConfigurations (solution, list);
list.Sort (StringComparer.Create (CultureInfo.InvariantCulture, true));
foreach (string s in list)
sw.WriteLine (s);
//Write lines for projects we couldn't load
if (slnData.SectionExtras.ContainsKey ("ProjectConfigurationPlatforms")) {
foreach (string s in slnData.SectionExtras ["ProjectConfigurationPlatforms"])
sw.WriteLine ("\t\t{0}", s);
}
sw.WriteLine ("\tEndGlobalSection");
//Write Nested Projects
ICollection<SolutionFolder> folders = solution.RootFolder.GetAllItems<SolutionFolder> ();
if (folders.Count > 1) {
// If folders ==1, that's the root folder
sw.WriteLine ("\tGlobalSection(NestedProjects) = preSolution");
foreach (SolutionFolder folder in folders) {
if (folder.IsRoot)
continue;
WriteNestedProjects (folder, solution.RootFolder, sw);
}
sw.WriteLine ("\tEndGlobalSection");
}
//Write custom properties
MSBuildSerializer ser = new MSBuildSerializer (solution.FileName);
DataItem data = (DataItem) ser.Serialize (solution, typeof(Solution));
if (data.HasItemData) {
sw.WriteLine ("\tGlobalSection(MonoDevelopProperties) = preSolution");
WriteDataItem (sw, data);
sw.WriteLine ("\tEndGlobalSection");
}
// Write custom properties for configurations
foreach (SolutionConfiguration conf in solution.Configurations) {
data = (DataItem) ser.Serialize (conf);
if (data.HasItemData) {
sw.WriteLine ("\tGlobalSection(MonoDevelopProperties." + conf.Id + ") = preSolution");
WriteDataItem (sw, data);
sw.WriteLine ("\tEndGlobalSection");
}
}
//Write 'others'
if (slnData.GlobalExtra != null) {
foreach (string s in slnData.GlobalExtra)
sw.WriteLine (s);
}
sw.WriteLine ("EndGlobal");
}
}