0

Я работаю над расширением, которое предназначено для проектов на C++. Он должен получить список IncludePaths для проекта. В VS IDE это меню -> Проект -> Свойства -> Свойства конфигурации -> C++ -> Общие -> Дополнительные каталоги включения. Это то, что мне нужно получить программно в моем расширении.Какой класс предоставляет доступ к так называемым свойствам в среде Visual Studio IDE?

У меня есть соответствующий экземпляр VCProject, у меня также есть экземпляр VCConfiguration. Судя по Automation Model Overview chart, проект и конфигурация имеют набор свойств. Однако они, похоже, не доступны. Ни классы VCConfiguration, ни VCProject не имеют какой-либо коллекции свойств, даже если я проверяю содержимое объектов VCConfiguration и VCProject во время выполнения.

MSDN docs также не содержат никаких сведений. Интерфейс VCConfiguration имеет свойство PropertySheets, но после изучения его во время выполнения с помощью отладчика я решил, что это не то, что мне нужно.

PS Если бы я мог просто получить значение свойства командной строки (Project -> Properties -> Свойства конфигурации -> C++ -> Command Line), список аргументов компилятора будет вызван для данного проекта - это также отлично, я могу проанализировать эту строку, чтобы получить все включенные пути.

ответ

1

Вы, вероятно, хотите, чтобы удалить некоторые из моего дополнительного дерьма ... но это должно сделать трюк:

public string GetCommandLineArguments(Project p) 
    { 
    string returnValue = null; 

    try 
    { 
     if ((Instance != null)) 
     { 
      Properties props = p.ConfigurationManager.ActiveConfiguration.Properties; 
      try 
      { 
       returnValue = props.Item("StartArguments").Value.ToString(); 
      } 
      catch 
      { 
       returnValue = props.Item("CommandArguments").Value.ToString(); 
       // for c++ 
      } 
     } 
    } 
    catch (Exception ex) 
    { 
     Logger.Info(ex.ToString()); 
    } 

    return returnValue; 
    } 

Это, вероятно, поможет, тоже (так что вы можете увидеть, какие свойства у проекта и их значения)

public void ShowProjectProperties(Project p) 
     { 
     try 
     { 
      if ((Instance != null)) 
      { 
       string msg = Path.GetFileNameWithoutExtension(p.FullName) + " has the following properties:" + Environment.NewLine + Environment.NewLine; 

       Properties props = p.ConfigurationManager.ActiveConfiguration.Properties; 
       List<string> values = props.Cast<Property>().Select(prop => SafeGetPropertyValue(prop)).ToList(); 
       msg += string.Join(Environment.NewLine, values); 
       MessageDialog.ShowMessage(msg); 
      } 
     } 
     catch (Exception ex) 
     { 
      Logger.Info(ex.ToString()); 
     } 
     } 

     public string SafeGetPropertyValue(Property prop) 
     { 
     try 
     { 
      return string.Format("{0} = {1}", prop.Name, prop.Value); 
     } 
     catch (Exception ex) 
     { 
      return string.Format("{0} = {1}", prop.Name, ex.GetType()); 
     } 
     } 
+0

Помогла ли вам с вашей проблемой? – Derek

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

  • Нет связанных вопросов^_^