2009-08-21 79 views
4

我有一個像這樣的IntermediateDirectory的VS項目:「.... \ temp \ $(SolutionName)\ $(ProjectName)」。Visual Studio宏中的宏擴展或添加

我可以讀取這個值使用宏或添加,但是,我需要實際的目錄來操縱文件。現在,我用相應的值手動替換「$(SolutionName)」和「$(ProjectName)」,這些值可以正常工作,但在使用不同的宏或屬性表中的用戶宏時可能會變得複雜。

所以我的問題是: Visual Studio API是否有內置函數來擴展這些宏?還是有其他一些優雅的解決方案?

回答

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


您也可以看看這個頁面:如果你不使用此爲C++ http://msdn.microsoft.com/en-us/library/czt44k0x%28VS.71%29.aspx

,應該有項目,配置類似的界面,並提供了其他語言解決方案類(C#和VB)。

+0

這正是我所期待的!謝謝! – 2009-09-14 09:28:16

0

據我所知,沒有可用的API來擴展這些宏值。儘管編寫一個快速而骯髒的實現並不難,它只處理您關心的值。

例如,在這種情況下,您只關心2個值(SolutionName和ProjectName)。如果這些是您主要感興趣的值,請使用簡單搜索並用最佳值替換。

是的,這是次優解決方案。但它可能有助於阻止你的進步。

+0

是的,我有你已經建議的快速和骯髒的解決方案。它現在工作。我看到的最大問題是VS屬性表中的「UserMacro」。我不知道如何訪問這些... – 2009-08-21 14:05:07