ソリューションの構成名をMSBuild Targetのテスト条件として使用する

最終的に私のBeforeBuild Targetが期待どおりに実行されなくなった理由を理解しました。それはプロジェクトの設定名が変更されたためです。しかし、私が本当にしたいのは、プロジェクトのものではなく、ソリューションの設定名をテストすることです。

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

UPDATE: after searching and reading some docs, I haven't been able to find any proof that MSBuild is aware of the solution's configuration name when its individual project files are compiled. I went ahead and build the solution from the command line, passing /v:diag, and dumped the output to a file. I searched through the file to find any signs of it knowing that the solution's configuration name is "Deployment", but the only occurences of that string appear when the BeforeBuild condition is checked.

1
追加された 編集された
ビュー: 1
それは本当に残念ですが、MSBuildはソリューションファイルを引数として受け入れるので、実際は非常に奇妙です。ソリューションには、その内部にすべての構成名が含まれています。
追加された 著者 Dave,
@MichaelPrice私はC#コードをコンパイルしています。 TeamCityのインストーラをビルドするためのMSBuildコミュニティタスクのみを使用しているので、これまでのところ、COMPUTERNAMEアプローチに満足しています。
追加された 著者 Dave,
どのようなタイプのプロジェクトをコンパイルしようとしていますか? C + +、C#、または他の何か?
追加された 著者 Michael Price,
そうです、ソリューションファイルはVisual Studioの概念であり、msbuildのものではありません。
追加された 著者 Ritch Melton,
Msbuildはそのソリューションファイルをmsbuildファイルに変換し、msbuildファイルを処理します。私はそれがうんざりすることに同意しますが、これが出て以来、これはMSBuildの一部であり、私たちのほとんどはそれに慣れています。情報はこちら: pjbelfield。 wordpress.com/2007/11/15/…
追加された 著者 Ritch Melton,
ここには同じコンセプトへのSOのリンクがあります。
追加された 著者 Ritch Melton,

3 答え

他の回答を参照してください。 VS 拡張子を作成して、ソリューション構成名をビルドマクロ( $(可変)の表記)。

1
追加された
この拡張機能は人生の節約になります。ヘッドレスビルド中に動作しない問題はありますか? (devenv.com)私はマクロが評価している問題を抱えています。
追加された 著者 yano,
私はあなたがそれをパッチした男と一緒に働く!再度、感謝します!
追加された 著者 yano,
@yano、拡張機能が更新されました。今それは良い方法でなければなりません。ヘッドレスビルドで問題を解決できるかどうかわからないけど、試してみることができます。マクロ設定はより迅速です。また、VS 2010、2012、2013と互換性のあるバイナリリリースがあります。
追加された 著者 ceztko,

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

EDIT: I couldn't use my own environment variable because it wasn't getting passed to the build runner for some reason. But when I used /v:n in the TeamCity MSBuild settings, I noticed that there is $(COMPUTERNAME), which is exactly what I wanted anyway. I ended up trying this and it totally did the trick.

0
追加された

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

0
追加された