3

そのため、ソリューション内のすべてのプロジェクトにCommonAssemblyInfo.csがリンクされており、ソース管理にチェックインされていないrake/albacoreスクリプトによって動的に生成されます。

また、主に開発者が使用する、使用可能なルビーがない場合に使用するCommonAssemblyInfo.cs.localもあります。

ソリューションをコンパイルする前に、CommonAssemblyInfo.cs.localをCommonAssemblyInfo.csにコピーする他のプロジェクトコンパイルの前にmsbuildタスクまたは何かを実行することは可能ですか?Visual Studioでソリューションを開いてビルドするために、知って入力する必要のあるコマンドが必要になるのは嫌です。

更新 そこで、ここで説明するように、ソリューション全体の事前ビルドイベントとしてバッチファイルを使用することになりました:ソリューション全体の事前ビルドイベント?、CommonAssemblyInfo.csが存在するかどうかを確認し、存在しない場合は、単純なバッチファイルを使用してCommonAssemblyInfo.cs.localをCommonAssemblyInfo.csにコピーします。

4

2 に答える 2

3

これが私が最終的に得た解決策です。

ソリューションには、ビルドスクリプト(rake + albacore)によって自動的に生成されるCommonAssemblyInfo.csへの各プロジェクトがあります。

CommonAssemblyInfo.csをソース管理にチェックインできないため、CommonAssemblyInfo.cs.localを作成します。

簡単な解決策:CommonAssemblyInfo.cs.localをCommonAssemblyInfo.csにコピーするgo.batを作成します。これは、開発者がVSでソリューションを開く前にプロジェクトを最初にチェックアウトするときに実行する必要があります。

純粋に政治的な理由で、もし私がこれをしたとしたら、人々は私が「非標準的な」ことをしていることにひどい思いをしたでしょう。複雑な解決策は次のとおりです。

ソリューション内のすべてのプロジェクトが依存するPreBuildというソリューションでプロジェクトを作成しました。これにより、このプロジェクトが最初にビルドされるようにビルド順序が強制されます。このプロジェクトには、次のバッチファイルを呼び出すビルド前のイベントが含まれています。

echo verifying CommonVersionInfo.cs exists
cd
IF NOT EXIST ..\..\..\CommonAssemblyInfo.cs COPY ..\..\..\CommonAssemblyInfo.cs.local ..\..\..\CommonAssemblyInfo.cs

そのため、今では、頭を抱えることを選択した開発者は、プロジェクトをチェックアウトして、ビルドスクリプトがまったく存在しないことに気付かずに、VSで幸福にプロジェクトを開くことができます。

于 2010-07-12T23:16:21.263 に答える
0

VS IDEでのコンパイルについて話しているのですか、それともチームビルドによるコンパイルについて話しているのですか?チームビルドについて話している場合は、標準の「コピー」msbuildタスクを使用する場所として「AfterGet」イベントを使用できます。VS IDEについて話している場合でも、「コピー」msbuildタスクを使用できます。

于 2010-05-28T17:17:44.050 に答える