0

我正在开发一个针对 C++ 项目的扩展。它需要检索项目的 IncludePaths 列表。在 VS IDE 中,它是菜单 -> 项目 -> 属性 -> 配置属性 -> C++ -> 常规 -> 附加包含目录。这就是我需要在我的扩展程序中以编程方式获得的内容。

我有一个对应的 VCProject 实例,我也有一个 VCConfiguration 实例。从自动化模型概览图来看,项目和配置都有一个属性集合。但是,它们似乎不可用。VCConfiguration 和 VCProject 类都没有任何属性集合,即使我在运行时检查 VCConfiguration 和 VCProject 对象的内容也是如此。

MSDN 文档也没有提供任何见解。VCConfiguration 接口有一个属性 PropertySheets,但是在运行时在调试器的帮助下检查它后,我确定它不是我需要的。

PS如果我可以获取命令行属性的值(项目->属性->配置属性-> C++->命令行),将为给定的项目调用编译器的参数列表——这对我来说也很好,可以解析该字符串以获取所有包含路径。

4

1 回答 1

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() );
         }
      }
于 2013-10-02T14:44:43.950 回答