SND\AstrorEnales_cp 18152ade3e Implemented Feature #1010 by replacing the MsBuild sln-Parsing with our own parser which
enables us to run the project converter on linux. Updated all projects via ProjectConverter.
2015-03-15 01:11:14 +01:00

72 lines
2.8 KiB
C#

using System.Collections.Generic;
using System.IO;
// This file is part of the ANX.Framework created by the
// "ANX.Framework developer group" and released under the Ms-PL license.
// For details see: http://anxframework.codeplex.com/license
namespace ProjectConverter
{
public class VsSolution
{
private List<VsSolutionProject> allProjects;
public VsSolutionProject[] Projects
{
get { return allProjects.ToArray(); }
}
private VsSolution(string filepath)
{
allProjects = new List<VsSolutionProject>();
ParseFile(File.ReadAllLines(filepath));
}
private void ParseFile(string[] lines)
{
foreach (string currentLine in lines)
{
string line = currentLine;
// Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ANX.Framework", "ANX.Framework\ANX.Framework.csproj", "{6899F0C9-70B9-4EB0-9DD3-E598D4BE3E35}"
if (line.TrimStart().StartsWith("Project("))
{
int typeGuidStart = line.IndexOf('{');
int typeGuidEnd = line.IndexOf('}', typeGuidStart + 1);
string typeGuid = line.Substring(typeGuidStart + 1, typeGuidEnd - typeGuidStart - 1);
line = line.Remove(0, typeGuidEnd + 2);
int nameStart = line.IndexOf('"');
int nameEnd = line.IndexOf('"', nameStart + 1);
string name = line.Substring(nameStart + 1, nameEnd - nameStart - 1);
line = line.Remove(0, nameEnd + 2);
int pathStart = line.IndexOf('"');
int pathEnd = line.IndexOf('"', pathStart + 1);
string relativePath = line.Substring(pathStart + 1, pathEnd - pathStart - 1);
line = line.Remove(0, pathEnd);
int guidStart = line.IndexOf('{');
int guidEnd = line.IndexOf('}', guidStart + 1);
string guid = line.Substring(guidStart + 1, guidEnd - guidStart - 1);
if (relativePath.ToLower().Contains(".csproj"))
{
allProjects.Add(new VsSolutionProject
{
TypeGuid = typeGuid,
ProjectName = name,
RelativePath = relativePath,
ProjectGuid = guid
});
}
}
}
}
public static VsSolution Load(string filepath)
{
return new VsSolution(filepath);
}
}
}