Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获得VC++;以编程方式包括目录?_C#_Visual Studio Extensions - Fatal编程技术网

C# 如何获得VC++;以编程方式包括目录?

C# 如何获得VC++;以编程方式包括目录?,c#,visual-studio-extensions,C#,Visual Studio Extensions,我正在用C#编写一个Visual Studio扩展,我需要获取项目属性。更具体地说,我正在寻找一个API,该API允许获取“配置属性>VC++目录>包含目录”的扩展值,或者是如何获取扩展值$(VC_IncludePath)或$(WindowsSDK_IncludePath)。更一般地说,如何获取IDE或编译器设置的任何变量的扩展值 我可以找到一些帖子,告诉我如何获取vcxproj文件中的属性(来自IVsSolution和IVsBuildPropertyStorage)。但是,我要查找的这些属性似

我正在用C#编写一个Visual Studio扩展,我需要获取项目属性。更具体地说,我正在寻找一个API,该API允许获取“配置属性>VC++目录>包含目录”的扩展值,或者是如何获取扩展值$(VC_IncludePath)或$(WindowsSDK_IncludePath)。更一般地说,如何获取IDE或编译器设置的任何变量的扩展值

我可以找到一些帖子,告诉我如何获取vcxproj文件中的属性(来自IVsSolution和IVsBuildPropertyStorage)。但是,我要查找的这些属性似乎是由IDE或编译器设置的,并且不在vcxproj文件中。我找不到任何关于这个的帖子

更一般地说,我需要得到以下的扩展值:

  • 配置属性>常规>项目默认值>配置类型
  • 配置属性>VC++目录>包含目录
  • 配置属性>C/C++>常规>其他包含目录
  • 配置属性>C/C++>常规>附加#使用目录
  • 配置属性>C/C++>预处理器>预处理器定义
  • 配置属性>C/C++>预处理器>取消定义预处理器定义
  • 配置属性>C/C++>预处理器>取消定义所有预处理器定义
  • 配置属性>C/C++>预处理器>忽略标准包含路径
  • 配置属性>NMake>智能感知>预处理器定义
  • 配置属性>NMake>智能感知>包含搜索路径
请注意,在我的示例中,Project.ConfigurationManager.ActiveConfiguration.Properties为null。它已成功通过VCProject.ActiveConfiguration

解决方案: 感谢@矛提示,我最终来到了全局C++项目配置文档页面:它提供了访问我正在寻找的不同配置设置的方法。加上兰斯在回答中提到的所有具体链接

如何以编程方式获取VC++包含目录

您可以使用属性来获取所需的内容。(我们需要通过右键单击project=>add reference=>extension reference来手动添加对Microsoft.VisualStudio.VCProjectEngine.dll的引用。)

对于那些属性,比如。。。在
C/C++
选项卡下,您可以使用界面访问它们

对于
NMake
选项卡下的属性,使用和访问它们

此外:您可以从卡洛斯J
和的这两个博客获得帮助。多亏了他

更新1:

来自
VS SDK
的那些api或peroperties用于获取我们在
VS UI
中看到的值:


我们可以在VSUI中看到$(…),我们可以使用上面的属性来使用VSSDK获取它们。这些属性返回宏(如
$(VC\u IncludePath)
..是预期的行为。。。要获得
$(VC_IncludePath)
的扩展值,这不是VS SDK的工作,因为宏是由msbuild目标和道具文件定义和导入的。

您好!很高兴收到你的回音:-)我现在就试试。这些API是否为$(VC_IncludePath)或$(WindowsSDK_IncludePath)(包含目录的默认值)提供扩展值?谢谢我只是试了一下,第一步就成功了。使用VCPlatform时,我会得到完整的对象。不幸的是,内部宏没有展开,我得到IncludeDirectories='$(VC_IncludePath)$(WindowsSDK_IncludePath);”。如何获取这些宏的展开值?谢谢@Stephane我认为使用VSSDK中的api不可能获得宏的扩展值,因为宏来自导入的道具或目标文件,这是不可能的。VS SDK中没有api可以真正为我们扩展价值。我在这里找到了更多文档:它们解释了$(VC\u IncludePath)或$(WindowsSDK\u IncludePath)等令牌是宏。有关如何在GUI中设置新宏或查看值的更多信息,但不包括如何以编程方式获取它们的值:-(