void WriteProjects (SolutionFolder folder, string baseDirectory, StreamWriter writer, bool saveProjects, IProgressMonitor monitor)
{
monitor.BeginStepTask (GettextCatalog.GetString ("Saving projects"), folder.Items.Count, 1);
foreach (SolutionItem ce in folder.Items)
{
string[] l = null;
if (ce is SolutionEntityItem) {
SolutionEntityItem item = (SolutionEntityItem) ce;
MSBuildHandler handler = MSBuildProjectService.GetItemHandler (item);
if (saveProjects) {
try {
handler.SavingSolution = true;
item.Save (monitor);
} finally {
handler.SavingSolution = false;
}
}
l = handler.SlnProjectContent;
writer.WriteLine (@"Project(""{0}"") = ""{1}"", ""{2}"", ""{3}""",
handler.TypeGuid,
item.Name,
FileService.NormalizeRelativePath (FileService.AbsoluteToRelativePath (
baseDirectory, item.FileName)).Replace ('/', '\\'),
ce.ItemId);
DataItem data = handler.WriteSlnData ();
if (data != null && data.HasItemData) {
writer.WriteLine ("\tProjectSection(MonoDevelopProperties) = preProject");
WriteDataItem (writer, data);
writer.WriteLine ("\tEndProjectSection");
}
if (item.ItemDependencies.Count > 0) {
writer.WriteLine ("\tProjectSection(ProjectDependencies) = postProject");
foreach (var dep in item.ItemDependencies)
writer.WriteLine ("\t\t{0} = {0}", dep.ItemId);
if (handler.UnresolvedProjectDependencies != null) {
foreach (var dep in handler.UnresolvedProjectDependencies)
writer.WriteLine ("\t\t{0} = {0}", dep);
}
writer.WriteLine ("\tEndProjectSection");
}
} else if (ce is SolutionFolder) {
//Solution
SlnData slnData = GetSlnData (ce);
if (slnData == null) {
// Solution folder
slnData = new SlnData ();
ce.ExtendedProperties [typeof (SlnFileFormat)] = slnData;
}
l = slnData.Extra;
writer.WriteLine (@"Project(""{0}"") = ""{1}"", ""{2}"", ""{3}""",
MSBuildProjectService.FolderTypeGuid,
ce.Name,
ce.Name,
ce.ItemId);
// Folder files
WriteFolderFiles (writer, (SolutionFolder) ce);
//Write custom properties
MSBuildSerializer ser = new MSBuildSerializer (folder.ParentSolution.FileName);
DataItem data = (DataItem) ser.Serialize (ce, typeof(SolutionFolder));
if (data.HasItemData) {
writer.WriteLine ("\tProjectSection(MonoDevelopProperties) = preProject");
WriteDataItem (writer, data);
writer.WriteLine ("\tEndProjectSection");
}
}
if (l != null) {
foreach (string s in l)
writer.WriteLine (s);
}
writer.WriteLine ("EndProject");
if (ce is SolutionFolder)
WriteProjects (ce as SolutionFolder, baseDirectory, writer, saveProjects, monitor);
monitor.Step (1);
}
monitor.EndTask ();
}