如何使用.vsprops文件覆盖MS Visual Studio中的VC++目录

met*_*att 6 visual-studio-2005 visual-studio-2008 visual-c++

我想覆盖Visual Studio(devenv.exe)用于编译器和库路径的目录.我知道如何通过工具 - >选项 - > VC++目录以交互方式执行此操作,但我想自动执行此操作.

http://msdn.microsoft.com/en-us/library/t9az1d21(VS.80).aspx对此有一个诱人的说明:"如果你想设置可以共享的目录搜索路径(对于你的项目)通过其他用户或可以跨多台计算机应用,Visual C++提供了通过项目属性表使用此对话框的替代方法.有关更多信息,请参阅属性表(C++).

如果您按照Property Sheets文档的链接,有关于该机制的大量信息,但没有关于您需要设置的实际属性的信息.

我在%LocalAppData%\ Microsoft\VisualStudio\8.0\VCComponents.dat(对于VS 2005,对于VS 2008)中找到了由VC++目录对话框填充的信息; 它似乎在VC\VC_OBJECTS_PLATFORM_INFO\win32 \目录和...\x64 \目录下设置了各种属性.

有没有人以前做过这个,知道映射是从VCComponents.dat中使用的属性名到.vsprops文件中使用的名称是什么?

我希望这能在VS2005,VS2008和VS2010中工作.

在VS2010中,Microsoft完全取消了"视图选项"下的"VC++目录"对话框,按照项目进行了操作,现在您将获得一个交互式UI,用于在"项目属性"中编辑这些目录而不是"视图选项"; 这也意味着在属性管理器中有一个UI; 那么如果你想按照机器而不是像以前那样对每个机器进行更改,你只需按照你想要的方式设置一个属性表,并使你的所有项目继承.这听起来像是对旧方式的重大改进.并且直接做我想做的事情.但仅限于VS2010.

但是,VS2005和VS2008没有UI在项目或属性表中设置这些属性; 我很高兴手工完成,但我不知道它应该是什么样的!

这是一个空的VS 2005 .vsprops文件:

<?xml version="1.0"?>
<VisualStudioPropertySheet
    ProjectType="Visual C++"
    Version="8.00"
    Name="pathSettings"
    >
</VisualStudioPropertySheet>
Run Code Online (Sandbox Code Playgroud)

我安装了VS 2010并使用其整洁的新GUI在搜索目录中进行更改; 它看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ImportGroup Label="PropertySheets" />
  <PropertyGroup>
    <ExecutablePath>C:\Test;$(PATH)</ExecutablePath>
  </PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

但是,这在VS2005中不会逐字逐句 - VS2005拒绝加载它(抱怨没有找到DTD /架构声明).

我把它插入容器中,响应于VS2005根据父元素'VisualStudioPropertySheet'的内容模型告诉我"Element'PropertyGroup'是意料之外的.期待:Tool,UserMacro." 工具和UserMacro是MSDN页面中示例中显示的唯一内容[drat - StackOverflow不会让我作为新用户在这里添加超链接 - 首先是'属性表工具usermacro'的Google搜索结果] - 也许那些VS2005属性表中唯一合法的东西?

sti*_*ijn 8

首先,实际上有一个gui来编辑属性表,就像你谈到的所有VS版本中的项目属性一样.

View->Other Windows->Property Manager
Run Code Online (Sandbox Code Playgroud)

打开一个窗口,您可以在其中查看所有项目配置和属性表层次结构.

属性表可用于覆盖vcproj文件具有的所有属性,还具有用户宏.要覆盖您所谈论的路径,这是VS2008的enample示例属性表,用于设置中间,输出,包含和库目录; 将它放在属性管理器的层次结构顶部,以确保它生效:

<?xml version="1.0" encoding="Windows-1252"?>
<!-- override paths -->
<VisualStudioPropertySheet
  ProjectType="Visual C++"
  Version="8.00"
  Name="PathSettings"
  IntermediateDirectory="$(TEMP)\$(ProjectName)_$(ConfigurationName)"
>
<Tool
  Name="VCCLCompilerTool"
  AdditionalIncludeDirectories="d:\api\include"
/>
<Tool
  Name="VCLibrarianTool"
  OutputFile="c:\mylibs"
/>
<Tool
  Name="VCLinkerTool"
  OutputFile="c:\myoutput"
  AdditionalLibraryDirectories="d:\api\_lib"
/>
Run Code Online (Sandbox Code Playgroud)

这也应该适用于VS2005,但不适用于VS2010:因为你发现它使用不同的格式,所以你必须分别保留它们中的两个.