Visual Studio 宏或插件中的宏展开

5
我有一个VS项目,其中IntermediateDirectory的格式如下:"....\temp\$(SolutionName)\$(ProjectName)"。
我可以使用宏或插件来读取这个值,但是我需要实际的目录来操作那里的文件。现在,我手动替换"$(SolutionName)"和"$(ProjectName)"为相应的值,这样做虽然有效,但当使用不同的宏甚至是属性表中的用户宏时,可能会变得复杂。
所以我的问题是: Visual Studio API是否有内置函数来展开这些宏?或者是否有其他优雅的解决方案?
2个回答

5
有一个优雅的解决方案!但我只知道适用于C++项目的方案。
假设您在一个C#插件中:

// 从第一个启动项目获取主项目

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

Project mainProj = (Project)_vcMainProject.Object;

// 获取我们将使用的配置

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)");


你还可以查看这个页面: http://msdn.microsoft.com/en-us/library/czt44k0x%28VS.71%29.aspx 如果你不是使用C++,也应该有类似的界面为其他语言提供的项目、配置和解决方案类。

0
据我所知,目前没有可用的API可以扩展这些宏值。虽然编写一个快速而简单的实现来处理您关心的值可能不是太难。
例如,在这种情况下,您只关心2个值(SolutionName和ProjectName)。如果这些是您主要感兴趣的值,请使用最佳值进行简单的搜索和替换。
是的,这是一个次优解。但它可能有助于解除您的阻塞。

是的,我已经有你建议的快而肮脏的解决方案了。目前它能工作。我看到的最大问题是来自VS属性表的“UserMacro”。我不知道如何访问它们... - Dietmar Hauser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接