2015-04-27 4 views
2

Я хочу, чтобы иметь возможность читать конфигурации сборки VS программно. Это потому, что я хочу создать свой собственный строитель.Прочитайте конфигурацию сборки программно

Как это сделать? У кого-нибудь есть пример кода?

Что я имею в виду, если у меня есть Debug, Development, Release, я хочу, чтобы они были перечислены в списке в приложении Form. Я пробовал использовать класс «EnvDTE.dll», но я не уверен, что это то, что я ищу. Если у кого-то есть конкретный пример или ссылка на пример, я был бы более чем благодарен.

+0

Откройте свой .sln в текстовом редакторе и ищите свои конфигурации; вы сможете понять, как VS делает все довольно быстро. – adamdc78

+0

В [официальной документации EnvDTE] имеется много образцов (https://msdn.microsoft.com/library/y849h0w1.aspx). Я успешно использовал его для большого рефакторинга решений на C++, но не пытался использовать проекты C#. – Nikerboker

+0

Другая возможность - использовать классы из пространства имен [Microsoft.Build] (https://msdn.microsoft.com/en-us/library/gg145008%28v=vs.110%29.aspx). Не уверен, может ли он работать на уровне решения, хотя – stijn

ответ

3

Вы можете использовать API msbuild. В Visual Studio 2015 в Microsoft.Build.dll есть класс под названием Microsoft.Build.Construction.SolutionFile, который поставляется с VS2015, который можно использовать для загрузки решения.

В VS2013 нет такой вещи, но вы можете сделать следующее: (ссылочный Microsoft.Build.dll, Microsoft.Build.Engine.dll, Microsoft.Build.Framework.dll)

class Program 
{ 
    static void Main(string[] args) 
    { 
     string nameOfSolutionForThisProject = @"MySolutionFile.sln"; 
     string wrapperContent = SolutionWrapperProject.Generate(nameOfSolutionForThisProject, toolsVersionOverride: null, projectBuildEventContext: null); 
     byte[] rawWrapperContent = Encoding.Unicode.GetBytes(wrapperContent.ToCharArray()); 
     using (MemoryStream memStream = new MemoryStream(rawWrapperContent)) 
     using (XmlTextReader xmlReader = new XmlTextReader(memStream)) 
     { 
      Project proj = ProjectCollection.GlobalProjectCollection.LoadProject(xmlReader); 
      foreach (var p in proj.ConditionedProperties) 
      { 
       Console.WriteLine(p.Key); 
       Console.WriteLine(string.Join(", ", p.Value)); 
      } 
     } 

     Console.ReadLine(); 
    } 
} 

ConditionedProperties содержит список платформ и конфигураций, содержащихся в решении. Вы можете использовать это, чтобы заполнить свои формы.

Смежные вопросы