我正在开发一个针对C ++项目的扩展。它需要检索项目的IncludePaths列表。在VS IDE中,它的菜单 - >项目 - >属性 - >配置属性 - > C ++ - >一般 - >附加包含目录。这就是我在扩展程序中以编程方式获取的内容。
我有一个相应的VCProject实例,我也有一个VCConfiguration实例。从Automation Model Overview chart来看,项目和配置都有一组属性。但是,它们似乎不可用。 VCConfiguration和VCProject类都没有任何属性集合,即使在运行时检查VCConfiguration和VCProject对象的内容也是如此。
MSDN docs也不提供任何见解。 VCConfiguration接口有一个属性PropertySheets,但是在运行时在调试器的帮助下检查它后我确定它不是我需要的。
P上。 S.如果我可以获得命令行属性的值(项目 - >属性 - >配置属性 - > C ++ - >命令行),将为给定项目调用编译器参数列表 - 这是我也很好,可以解析该字符串以获取所有包含路径。
答案 0 :(得分: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() );
}
}