Microsoft.Build
Microsoft.Build.Engine.dll
Для компиляции и работы с проектами советую использовать Microsoft.Build.Framework из nuget, он понимает синтаксис C# 7, у умеет работать с последними версиями .NET.
Таким способом можно читать проекты из решения:
public static void DbgReadSolution(string solution_file)
{
var wrapperContent = Microsoft.Build.BuildEngine.SolutionWrapperProject.
Generate(solution_file, toolsVersionOverride: null, projectBuildEventContext: null);
byte[] rawWrapperContent = Encoding.Unicode.GetBytes(wrapperContent.ToCharArray());
using (MemoryStream memStream = new MemoryStream(rawWrapperContent))
using (XmlTextReader xmlReader = new XmlTextReader(memStream))
{
var proj = ProjectCollection.GlobalProjectCollection.LoadProject(xmlReader);
int i = 0;
foreach (ProjectItem referencedProjectNode in GetOrderedProjectReferencesFromWrapper(proj))
{
Log.Info(String.Format("{0}{1}: {2}", Environment.NewLine, i++, referencedProjectNode.EvaluatedInclude));
string referencedProjectPath = Path.Combine(Path.GetDirectoryName(solution_file), referencedProjectNode.EvaluatedInclude);
var referencedProject = ProjectCollection.GlobalProjectCollection.LoadProject(referencedProjectPath);
Log.Info("\tReferenced Assemblies:");
foreach (ProjectItem referencedAssembly in GetReferencedAssemblies(referencedProject))
{
Log.Info("\t\t{0}", referencedAssembly.EvaluatedInclude);
}
Log.Info(String.Format("{0}\tSource Files:", Environment.NewLine));
foreach (ProjectItem includedSourceFile in GetSourceFiles(referencedProject))
{
Log.Info("\t\t{0}", includedSourceFile.EvaluatedInclude);
}
}
ProjectCollection.GlobalProjectCollection.UnloadAllProjects();
}
}