哪个类允许访问Visual Studio IDE中所谓的属性

本文关键字:IDE Studio Visual 所谓 属性 访问 许访问 | 更新日期: 2023-09-27 18:33:32

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

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

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

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

哪个类允许访问Visual Studio IDE中所谓的属性

你可能想删除我的一些额外的废话......但这应该可以解决问题:

  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() );
         }
      }