2009-08-21 20 views
4

私は、 ".... \ temp \ $(SolutionName)\ $(ProjectName)"のようなIntermediateDirectoryを持つVSプロジェクトを持っています。Visual Studioマクロのマクロ展開または追加

マクロまたはアドインを使用してこの値を読み取ることができますが、そこにファイルを操作するには実際のディレクトリが必要です。今、私は手動で "$(SolutionName)"と "$(ProjectName)"をそれぞれの値に置き換えます。これはうまくいきますが、異なるマクロやプロパティシートからのユーザーマクロを使用すると複雑になります。

私の質問は次のとおりです。 Visual Studio APIには、マクロを展開するための組み込み関数がありますか?または、他にもエレガントなソリューションがありますか?

答えて

5

優雅なソリューションがあります。しかし、私はC++プロジェクトに当てはまるものだけを知っています。


//

VCProject vcMainProject =(VCProject)(_ applicationObject.Solution.SolutionBuild最初のスタートアッププロジェクトからの主なプロジェクトを取得:あなたがC#アドインにしていると仮定すると、

。 IVCCollectionとしてのStartupProjects).Item(1);

プロジェクトmainProj =(プロジェクト)_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)。

+0

それは私が探していたものです!ありがとう! –

0

私の知る限り、これらのマクロ値を拡張するAPIはありません。気になる値だけを扱う、素早く汚い実装を書くのは難しいことではありません。

たとえば、この場合、2つの値(SolutionNameとProjectName)のみが気になります。これらの値が主に興味のある値であれば、単純な検索を使用して最良の値に置き換えます。

はいこれは最適次善策です。しかし、それはあなたの進歩のブロックを解除するのに役立つかもしれません。

+0

ええ、私はあなたがすでに提案したクイック&汚れた解決策を持っています。それは今のところ働きます。私が見る最大の問題は、VSプロパティシートの "UserMacro"です。私はそれらにアクセスする手がかりがありません... –

関連する問題