我有一个像这样的IntermediateDirectory的VS项目:“.... \ temp \ $(SolutionName)\ $(ProjectName)”。
我可以使用宏或添加来读取此值,但是,我需要实际的目录来操作那里的文件。现在,我手动用相应的值替换“$(SolutionName)”和“$(ProjectName)”,这样可以正常工作,但是当使用属性表中的不同宏甚至用户宏时可能会变得复杂。
所以我的问题是: Visual Studio API是否具有内置函数来扩展这些宏?还是有其他优雅的解决方案吗?
答案 0 :(得分: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 ++,那么为其他语言(C#和VB)提供的Project,Configuration和Solution类应该有类似的接口。
答案 1 :(得分:0)
据我所知,没有可用的API可以扩展这些宏值。虽然写一个快速而肮脏的实现只处理你关心的值不应该太难。
例如,在这种情况下,您只关心2个值(SolutionName和ProjectName)。如果这些是您主要感兴趣的值,请使用简单搜索并替换为最佳值。
是的,这是次优解决方案。但它可能有助于解除您的进展。