Macro expansion in Visual Studio macro or add in

你说的曾经没有我的故事 提交于 2019-12-23 12:36:47

问题


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?


回答1:


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).




回答2:


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.



来源:https://stackoverflow.com/questions/1311013/macro-expansion-in-visual-studio-macro-or-add-in

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!