3

特定の最上位プロジェクト (多くの依存関係がある) をビルドするときにのみ実行する、1 回限りのコストのかかるターゲットを取得しようとしています。

プレーンなmsbuild/コマンドラインビルドからこれを機能させることに問題はありません。私はこれをプロジェクトの設定と InitialTargets で行うか、代わりに

<ビルド前/>。

注意が必要なのは、Visual Studio の場合です。VSから同じプロジェクトをビルドすると. VS は、.csproj を呼び出す前に依存関係を実行するため、ターゲット (他のプロジェクトのビルド方法に影響を与える) は、ビルドが完了するまで実行されません。

依存関係を呼び出す前にVSにターゲットを強制的に実行させる方法はありますか?

私は現在、次を使用して、最も低レベルのプロジェクト (常にビルドされるプロジェクト) から同じコストのかかるターゲットを実行することで、これを回避しています。

条件=" $(BuildingInsideVisualStudio) "

これを「適切に」行う方法についてのアイデアはありますか? 繰り返しますが、VS から機能するソリューションを探しています。

4

3 に答える 3

3

これを行う唯一の方法は(質問を理解していれば)、VSに最初にビルドするように指示するダミープロジェクトを作成することです。VS は、拡張子 .csproj と Build ターゲットを指定すると、ほぼすべての MSBuild ファイルを受け入れます。

于 2010-04-30T01:13:29.320 に答える
2

Visual Studio は、ビルド プロセスの UX を支援するために、インプロセス コンパイラを使用します。このため、VS と MSBuild の間には多少の違いがある可能性があります。プロジェクト ファイルでプロパティ UseHostCompilerIfAvailable を false に設定してみてください。これにより、VS はビルドに MSBuild を使用するようになります。欠点は、Visual Studio 内のパフォーマンスです。

.csproj (または .vbproj) ファイルで次のフラグメントを使用します。

<PropertyGroup>
    <UseHostCompilerIfAvailable>false</UseHostCompilerIfAvailable>
</PropertyGroup>
于 2009-12-25T03:11:20.240 に答える
1

なぜ<Target Name="BeforeBuild" />ターゲットをオーバーライドしないのですか? これは、プロジェクトの実際のビルドの前に実行されます (Buildターゲットは に依存するためBeforeBuild)。Visual Studio は Build ターゲット (または Rebuild) を呼び出しているため、.csproj でそのターゲットをオーバーライドすると、最初に呼び出されます。

msbuild でそれよりも前に何かをしようとしている場合を除きますか?

于 2009-12-23T19:05:55.530 に答える