views:

120

answers:

2

I have a VS project with an IntermediateDirectory like this: "....\temp\$(SolutionName)\$(ProjectName)".

I can read this value using a macro or add in, however, I would need the actual directory to manipulate files there. Right now, I manually replace the "$(SolutionName)" and "$(ProjectName)" with the respective values, which works fine but might become complicated when different macros or even user macros from property sheets are used.

So my question is: Does the Visual Studio API have a built in function to expand macros like these? Or is there some other elegant solution?

A: 

As far as i know, there is no API available that will expand those macro values. Although it shouldn't be too hard to write a quick and dirty implementation that deals with only the values that you care about.

For instance, in this case you only care about 2 values (SolutionName and ProjectName). If these are the values you are primarily interested in use a simple search and replace with the best values.

Yes this is a sub-optimal solution. But it may help to unblock your progress.

JaredPar
Dietmar Hauser
+1  A: 

There is an elegant solution! But I only know the one that applies to C++ projects.

Assuming you're in a C# add-in:


// Get the main project from the first startup project

VCProject vcMainProject = (VCProject)(_applicationObject.Solution.SolutionBuild.StartupProjects as IVCCollection).Item(1);

Project mainProj = (Project)_vcMainProject .Object;

// Get the configuration we'll be using

IVCCollection cfgs = (IVCCollection)_vcMainProject .Configurations;

VCConfiguration vcCfg = (VCConfiguration) cfgs.Item(mainProj.ConfigurationManager.ActiveConfiguration.ConfigurationName + "|" + mainProj.ConfigurationManager.ActiveConfiguration.PlatformName);

string finalString = vcCfg.Evaluate("....\temp\$(SolutionName)\$(ProjectName)");


You can also check out this page: http://msdn.microsoft.com/en-us/library/czt44k0x%28VS.71%29.aspx

If you're not using this for C++, there should be a similar interface for the Project, Configuration, and Solution classes provided for other languages (C# and VB).

Lake
That's exactly what I was looking for! Thanks!
Dietmar Hauser