2011-01-20 26 views
16

私はVS 2008でうまく構築されていたプロジェクトを持っていて、TFS Buildをインストールして使い始めた後、TFS 2010にアップグレードしましたすべての機能はまだうまく機能していました(私は新しいビルドプロセスを実装した後、リモートVisual Studio 2010クライアントからのワンクリックビルドの開始ですべてがうまく機能しました)。 Visual Studioはビルドエージェントにインストールする必要はありませんでした。ビルドエージェントにVisual Studioをインストールしないように非常に努力しています(非常に)ビルドエージェントにVisual Studioをインストールしないようにしています。私の理解では必要ではないため、非開発マシンにインストールするライセンスはありません。TFSビルドでVS2010 MakeFileプロジェクト(vcxproj)を構築する方法

今、SQL Server CLRプロシージャを対象とするアセンブリであり、SQL Serverがまだ.NET 4.0をサポートしていないため、ソリューションをVS 2010にアップグレードしようとしました。しかし、私はそれをTFS Buildの下でもう構築することはできません。私はTFS BuildとMS Buildコマンドラインから一貫したエラーメッセージを得ることはできないようですが、C:\ Program Files \ MSBuild \にないMicrosoft.Cpp.Targetsと何か関係があると思いますVisual Studioがインストールされていません。 Microsoft Windows SDK 7.1をインストールして、他の.NET 4.0プロジェクト用のsvcutilのような.NET 4.0 SDKツールを実行できるようにしましたが、このビルドに必要なものは何もインストールされていないようです。 TFSのビルドが私を与えるエラーは次のとおりです。

C:\ TFSBld [...] \ GenerateLanguage \ GenerateLanguage.vcxproj(46,3): エラーMSB4019:インポートされたプロジェクト 「C:\ Microsoft.Cpp .Default.props "が ではありませんでした。 のパスが であり、ファイルがディスク上に存在することを確認してください。

そして、私はそのエラーをクリックしたときには、vcxprojファイルのこの行に私を取る:私は本当にこのプロジェクトでやらなければならないことがRESXファイルからリソースファイルを生成するためにresgenを実行している

<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> 

それらを衛星衛星アセンブリにコンパイルします。私はこれを行うためにmakefileビルドを使用していました。手動でresgenを実行していました(私はそれが別の方法でスタンドアロンソリューションとして衛星アセンブリをコンパイルする方法を見つけることができなかったと思います)。それが今どのように働いていたのか覚えていませんが、リソースファイルからDLLファイルをコンパイルするためにAL.exeを手動で実行していたと思います)。だから基本的には、このプロジェクトをビルドするためにコマンドラインを実行するだけです。プロジェクト全体をスローしたり、TFSビルドスクリプトを編集してハードコードされたコマンドラインを実行したりすることなく、代わりに。より良い方法が必要です。

私はこの一日中、標準ファイルの代わりに自分自身の.targetsファイルと.xmlプロパティシートを作成しようとしましたが、それは私の頭の上です。私は単に行を削除しようとしましたが、MSBuildは「ビルド」ターゲットがないと不平を言います。 vcxprojファイルにダミーを追加しようとしましたが、すべての作業が完了したビルド前およびビルド後のステップを実行していないようです。

+0

この質問は既にここで回答されているようです:http://stackoverflow.com/questions/3043294/how-to-build-a-vs2010-c-project-on-a-buildserverこの質問を更新/削除する正しい方法は? – BlueMonkMN

答えて

15

Microsoft Windows SDK 7.1にはいくつかのインストールオプションがあります。 C++コード(ビルド前とビルド後のステップのみ)が含まれていなくても、 ".NET Development"子 "Tools"だけをチェックするだけでは、vcxprojプロジェクトをビルドするのに十分ではないようです。 "Visual C++コンパイラ"オプションを追加し、 "Intellisense and Reference Assemblies"チェックボックスを完全に選択すると、必要なファイルと設定がインストールされます。私は両方が必要であるかどうか分からないが、その組み合わせが私のために働いた。

2

私は幾分複雑ですが、以下の手順を含む機能的な作業を考案しました。

  1. コピーCからこれらのファイル:\プログラムファイルVS2010がインストールされているシステム上のMSBuild \ Microsoft.Cpp \ v4.0の\(x86の) - ソース管理にチェックイン、彼らはの一部として取得されているので、ワークスペース:
    • Microsoft.Build.CPPTasks.Common.dll
    • Microsoft.BuildSteps.targets
    • Microsoft.Cl.Common。小道具
    • Microsoft.Cpp.Default.props
    • Microsoft.Cpp.props
    • Microsoft.Cpp.targets
    • Microsoft.CppBuild.targets
    • Microsoft.CppCommon.targets
    • Microsoft.Link。
    • Microsoft.MakeFile.targets
    • のWin32 \のMicrosoft.Cpp.Win32.default.props \プラットフォーム
    • プラットフォームをCommon.props S \ Win32の\ Microsoft.Cpp.Win32.props
    • Platfotms \ Win32の\ Microsoft.Cpp.Win32.targets
  2. 変更ワークスペースは$の代わりにそれらのファイルを置く相対パスを参照するようにvcxprojファイル(VCTargetsPath)。
  3. AsssemblyName属性を使用してこれを参照するのではなく、AssemblyFile = "Microsoft.Build.CPPTasks.Common.dll"属性を使用するように行を変更します(すべてのファイル内)。
  4. 存在しないVCTargetsPathマクロを参照しようとするのではなく、新しい場所のルートにあるファイルの "$(VCTargetsPath)\"を削除して、兄弟ファイルを見つけます。 VS2008がインストールされていないコンピュータでMSBuildを使用してコマンドラインビルドを実行し、エラーメッセージを確認することで、見逃したインスタンスを見つけることができます。
  5. 同様に、子ディレクトリファイルの$(VCTargetsPath)を相対パスで置き換えます。
  6. Microsoft.Cpp.Win32.targetsファイルの最後には、 "< VCMessage Code =" MSB8008 ".../>"という行と次のようなコメントがあります。を<にコメントしてください。
  7. 試行錯誤、コマンドラインのビルドを実行し、私が言及したことを忘れたかもしれないものを見てください。私はそれがほとんどだと思う。
1

BlueMonkMNに改善された代替案はvcxprojの上部レベル1子として

<PropertyGroup> 
    <VCTargetsPath Condition="'$(VCTargetsPath)' == ''">[path_to_the_fileset_listed]</VCTargetsPath> 
</PropertyGroup> 

を追加することです。

パスには、環境変数または変数を含むその他の既知のパスが含まれている可能性があります。

これは、多くの行を変更するよりも侵入を少なくし、元に戻すのが簡単です。

+1

これらのMicrosoft。*ファイルをマシンのどこかに置く必要はありませんか? – BlueMonkMN

+0

はい、ファイルはどこかにある必要がありますが、場所は高度に構成可能です。これは、ファイルを完全に制御し、元のファイルを改ざんしていない状態にしておきたい場合に非常に便利です。 – jesper

+0

ファイルはどこにありますか?場所を設定可能にすることは、それらの場所にファイルを取得する手段がなければ役に立たない。 – BlueMonkMN

0

VCTargetsPathの環境変数を追加するとアンもよりシンプルなアプローチ:

  1. はBlueMonkMN
    • 例えば言及CPPのMSBuildフォルダを探しC:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120
  2. オープンWindows環境変数
    • Control Panel > System > Advanced Settings > Advanced > Environment Variables
  3. を持つ新しいユーザー変数を追加します。
    • 名:VCTargetsPath
    • 値:[MSBuildのターゲットへのパスをステップ1から]
  4. Visual Studioを再起動します。
  5. 完了。あなたのプロジェクトは今構築する必要があります。
関連する問題