Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to use .vsprops file to override VC++ Directories in MS Visual Studio

I'd like to override the directories used by Visual Studio (devenv.exe) for the compiler and library paths. I know how to do this interactively via Tools->Options->VC++ Directories, but I'd like to automate this.

http://msdn.microsoft.com/en-us/library/t9az1d21(VS.80).aspx has a tantalizing note on this: "If you want to set up directory search paths (for your projects) that can be shared by other users or that can be applied across multiple computers, Visual C++ provides an alternative to using this dialog, through project property sheets. For more information, see Property Sheets (C++)."

If you follow the link to Property Sheets documentation, there's a bunch of information on the mechanism but none on the actual properties you need to set.

I found the information populated by the VC++ Directories dialog, in %LocalAppData%\Microsoft\VisualStudio\8.0\VCComponents.dat (for VS 2005, and 9.0 for VS 2008); it seems to set various properties under VC\VC_OBJECTS_PLATFORM_INFO\win32\Directories and ...\x64\Directories.

Has anyone done this before and know what the mapping is from the property names used in VCComponents.dat to the names to use in a .vsprops file?

I'd like this to work in VS2005, VS2008 and VS2010, ideally.

In VS2010, Microsoft has completely done away with the VC++ Directories dialog under View Options, made it per project, and so now you get an interactive UI for editing these directories in Project Properties instead of View Options; this also means that there's a UI for it in the properties manager; then if you want to make changes per-machine instead of per-project like it used to be, you just set a property sheet up the way you want, and make all your projects inherit from it. This sounds like a big improvement over the old way. And a direct way to do what I want to do. But only in VS2010.

VS2005 and VS2008 don't have the UI to do set these properties in a project or property sheet, though; I'm happy to do it by hand but I don't know what it's supposed to look like!

Here's an empty VS 2005 .vsprops file:

<?xml version="1.0"?>
<VisualStudioPropertySheet
    ProjectType="Visual C++"
    Version="8.00"
    Name="pathSettings"
    >
</VisualStudioPropertySheet>

I installed VS 2010 and used its neat new GUI to make changes in the search directories; it looks like this:

<?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>

However, that doesn't work verbatim in VS2005 -- VS2005 refuses to load it (complaining no DTD/schema declaration was found).

I plunked that into the container, in response to which VS2005 tells me "Element 'PropertyGroup' is unexpected according to content model of parent element 'VisualStudioPropertySheet'. Expecting: Tool, UserMacro." Tool and UserMacro are the only things shown in the example in the MSDN page [drat - StackOverflow won't let me as a new user put a hyperlink here -- first Google search result for 'property sheets tool usermacro'] -- maybe those are the only things legal in a VS2005 property sheet?

like image 674
metamatt Avatar asked Feb 17 '10 20:02

metamatt


People also ask

How to run VCxproj file in Visual Studio?

vcxproj file by using any text or XML editor. You can view it in Visual Studio by right-clicking on the project in Solution Explorer, choosing Unload project and then choosing Edit Foo. vcxproj.

How do I add a .props file to Visual Studio?

right click on the project that you want to add a . props file for and choose "Add Existing Property Sheet". You can also choose to add a new property sheet. I have my property sheet in the same folder as my solution file so that all my projects can use the same property sheet.

What is a Vcxproj user file?

A file with . vcxproj extension is a Microsoft Visual C++ project file that stores the C++ project information. It contains information that is used by the MSBuild project system to compile and build the final output. VCXPROJ of Visual C++ projects is the same as that of CSPROJ for . NET projects.

How do I add a directory to Visual Studio?

Adding The Include DirectoryGo to the Visual Studio Project Property Pages dialog (From the Project menu, select Properties, or right-click on the project in the Solution Explorer). Select Configuration Properties, C/C++, General, and then add $(PIXELINK_SDK_ROOT)\include to the Additional Include Directories field.


1 Answers

First of all, there actually is a gui to edit property sheets just the same way as project properties under all VS versions you talk about.

View->Other Windows->Property Manager

brings up a window in which you can see all project configurations and the property sheets hierarchy.

A property sheet can be used to override all properties a vcproj file has, and also has User Macros. To override the paths you talk about, this is en axample property sheet for VS2008 that sets the intermediate, output, include and library directories; put it at the top of the hierarchy in the Propert Manager to make sure it takes effect:

<?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"
/>

This should work for VS2005 as well, but not for VS2010: as you figured out it uses a different format, so you'll have to keep the two of them seperately.

like image 190
stijn Avatar answered Sep 17 '22 20:09

stijn