Browse Source

add back support for VS 2013 solution format changes

pull/80/head
Siegfried Pammer 12 years ago
parent
commit
b7d181f1f0
  1. 19
      src/Main/SharpDevelop/Project/Solution.cs
  2. 20
      src/Main/SharpDevelop/Project/SolutionLoader.cs
  3. 8
      src/Main/SharpDevelop/Project/SolutionWriter.cs

19
src/Main/SharpDevelop/Project/Solution.cs

@ -20,6 +20,10 @@ namespace ICSharpCode.SharpDevelop.Project @@ -20,6 +20,10 @@ namespace ICSharpCode.SharpDevelop.Project
DirectoryName directory;
readonly IProjectChangeWatcher changeWatcher;
readonly IFileService fileService;
internal Version currVSVersion, minVSVersion;
static readonly Version DefaultVSVersion = new Version(12, 0, 20827, 3);
static readonly Version DefaultMinVSVersion = new Version(10, 0, 40219, 1);
public Solution(FileName fileName, IProjectChangeWatcher changeWatcher, IFileService fileService)
{
@ -280,7 +284,9 @@ namespace ICSharpCode.SharpDevelop.Project @@ -280,7 +284,9 @@ namespace ICSharpCode.SharpDevelop.Project
try {
changeWatcher.Disable();
using (var solutionWriter = new SolutionWriter(fileName)) {
solutionWriter.WriteFormatHeader(ComputeSolutionVersion());
var version = ComputeSolutionVersion();
solutionWriter.WriteFormatHeader(version);
solutionWriter.WriteSolutionVersionProperties(version, currVSVersion ?? DefaultVSVersion, minVSVersion ?? DefaultMinVSVersion);
solutionWriter.WriteSolutionItems(this);
solutionWriter.WriteGlobalSections(this);
}
@ -307,6 +313,9 @@ namespace ICSharpCode.SharpDevelop.Project @@ -307,6 +313,9 @@ namespace ICSharpCode.SharpDevelop.Project
if (project.MinimumSolutionVersion > version)
version = project.MinimumSolutionVersion;
}
if ((minVSVersion != null || currVSVersion != null) && version < SolutionFormatVersion.VS2012)
version = SolutionFormatVersion.VS2012;
return version;
}
#endregion
@ -461,5 +470,13 @@ namespace ICSharpCode.SharpDevelop.Project @@ -461,5 +470,13 @@ namespace ICSharpCode.SharpDevelop.Project
{
return "[Solution " + fileName + " with " + projects.Count + " projects]";
}
public Version VSVersion {
get { return currVSVersion; }
}
public Version MinVSVersion {
get { return minVSVersion; }
}
}
}

20
src/Main/SharpDevelop/Project/SolutionLoader.cs

@ -60,6 +60,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -60,6 +60,7 @@ namespace ICSharpCode.SharpDevelop.Project
public void ReadSolution(Solution solution, IProgressMonitor progress)
{
ReadFormatHeader();
ReadVersionProperties(solution);
// Read solution folder and project entries:
var solutionEntries = new List<ProjectLoadInformation>();
@ -158,6 +159,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -158,6 +159,7 @@ namespace ICSharpCode.SharpDevelop.Project
#region ReadFormatHeader
static Regex versionPattern = new Regex(@"^Microsoft Visual Studio Solution File, Format Version\s+(?<Version>[\d\.]+)\s*$");
static Regex ideVersionPattern = new Regex(@"((Minimum)?VisualStudioVersion)\s+=\s(?<Version>\d+\.\d+\.\d+\.\d+)");
public SolutionFormatVersion ReadFormatHeader()
{
@ -190,6 +192,24 @@ namespace ICSharpCode.SharpDevelop.Project @@ -190,6 +192,24 @@ namespace ICSharpCode.SharpDevelop.Project
NextLine();
return version;
}
void ReadVersionProperties(Solution solution)
{
Match match = ideVersionPattern.Match(currentLine);
while (match.Success) {
Version ideVersion = new Version(match.Result("${Version}"));
switch (match.Groups[1].Value) {
case "VisualStudioVersion":
solution.currVSVersion = ideVersion;
break;
case "MinimumVisualStudioVersion":
solution.minVSVersion = ideVersion;
break;
}
NextLine();
match = ideVersionPattern.Match(currentLine);
}
}
#endregion
#region ReadSection

8
src/Main/SharpDevelop/Project/SolutionWriter.cs

@ -55,6 +55,14 @@ namespace ICSharpCode.SharpDevelop.Project @@ -55,6 +55,14 @@ namespace ICSharpCode.SharpDevelop.Project
}
writer.WriteLine("# SharpDevelop " + RevisionClass.Major + "." + RevisionClass.Minor);
}
public void WriteSolutionVersionProperties(SolutionFormatVersion version, Version currVSVersion, Version minVSVersion)
{
if (version >= SolutionFormatVersion.VS2012) {
writer.WriteLine("VisualStudioVersion = {0}", currVSVersion);
writer.WriteLine("MinimumVisualStudioVersion = {0}", minVSVersion);
}
}
#endregion
#region Sections

Loading…
Cancel
Save