2011-11-12 7 views
1

私のBeforeBuild Targetが期待どおりに実行されなくなった理由を最後に認識しました。それはプロジェクトの設定名が変更されたためです。しかし、私が本当にやりたいことは、プロジェクトのものではなく、という構成名のをテストすることです。MSBuild Targetのテスト条件としてソリューションのコンフィグレーション名を使用

私は、プロジェクトの構成名が$(構成)に格納されていることを知っています。ソリューションの構成名の1つがありますか?または、おそらくソリューション名が構成マネージャーにしか分かっていないため、これは単純に不可能ですか?もしそうなら、誰もが設定を管理するための良い方法を勧められますか?私はどこでも重複プロジェクト構成名を追加する必要があることを憎む...

UPDATE:いくつかのドキュメントを検索して読んだ後、私はMSBuildのは、ソリューションの設定名を認識していることをすべての証拠を見つけることができませんでした個々のプロジェクトファイルがコンパイルされるときに発生します。私は先に進み、コマンドラインから解決策を構築して/v:diagを渡し、出力をファイルにダンプしました。このファイルを検索して、ソリューションの構成名が「展開」であることを知っている兆候を見つけましたが、BeforeBuild条件がチェックされたときにその文字列の唯一の出現が表示されます。

+0

さて、ソリューションファイルはVisual Studioの概念であり、msbuildのものではありません。 –

+0

これは本当に残念ですが、MSBuildはソリューションファイルを引数として受け入れるので、実際には非常に奇妙です。ソリューションには、その内部にすべての構成名が含まれています。 – Dave

+0

Msbuildはそのソリューションファイルをmsbuildファイルに変換し、msbuildファイルを処理します。私はそれがうんざりすることに同意しますが、これが出て以来、これはMSBuildの一部であり、私たちのほとんどはそれに慣れています。ここに情報:http://pjbelfield.wordpress.com/2007/11/15/the-solution-file-is-not-an-msbuild-file/ –

答えて

0

私が今までに思い付いた唯一の解決策は、TeamCityサーバーで自分自身の環境変数を作成し、MSBuildにBeforeBuildターゲットでその存在をチェックさせることです。

EDIT:それは何らかの理由でビルドランナーに渡されていませんでしたので、私は私自身の環境変数を使用できませんでした。しかし、TeamCity MSBuildの設定で/ v:nを使用したとき、$(COMPUTERNAME)があることに気付きました。これはまさに私が望んでいたものです。私はこれを試して終わったし、それは完全にトリックでした。

1

私の他のanswerを参照してください。 VS extensionを作成して、ソリューション構成名をビルドマクロ($(variable)表記)にすることができました。

+0

この拡張機能は救命救助者です。ヘッドレスビルド中に動作しない問題はありますか? (devenv.com)マクロが「 – yano

+0

@yano」と評価されているという問題が発生しました。拡張機能が更新されました。今それは良い方法でなければなりません。ヘッドレスビルドで問題を解決できるかどうかわからないけど、試してみることができます:マクロ設定がより迅速です。また、VS 2010、2012、2013と互換性のあるバイナリリリースがあります。 – ceztko

+0

私はあなたがそれをパッチした人と一緒に働きます!再度、感謝します! – yano

0

解決策SolutionConfigurationContentsはsolutonファイル処理中にMsbulidによって作成され、ソリューション構成が含まれています。 VSからビルドするときには、プロジェクト(ソリューションではない)構成が含まれます。

関連する問題