15

プロジェクト B に依存するプロジェクト A があります。プロジェクト A には、プロジェクト B から生成されたファイルに依存するビルド前のタスクがいくつかあります。Visual Studio でビルドしても問題ありません。しかし、MSBuild.exe を使用すると、ビルド順序が次のようになるため、問題が発生します。

  • A のビルド前の手順 <- B がコンパイルされていないため失敗しました
  • B がコンパイルされます <- 最初に実行されると予想されます
  • A がコンパイルされます

MSBuild を使用して期待される動作ですか? A のビルド前の手順の前に B を最初に実行するように MSBuild に指示する方法はありますか?

VS2010 C# と C++/CLI を使用しています。追加情報を提供するかどうかはわかりませんが、それがどのように呼び出されるかは次のとおりです。

Running process (C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBUILD.exe "..\..\..\dev\build\MyProj.sln" /t:Clean /p:Configuration=Release;Platform=Win32)
4

4 に答える 4

12

簡潔な答え

ビルド イベントを削除し、次のようなものをプロジェクト (.csproj) に追加します。

<Target Name="AfterResolveReferences">
  <Exec Command="echo helloworld" />
</Target>

より詳しい情報

ビルド プロセスのカスタマイズについては、http: //msdn.microsoft.com/en-us/library/ms366724%28v=vs.110%29.aspxを参照してください。

Before Build イベントは ResolveReferences の前に発生するため、参照するプロジェクトがプロジェクトの BeforeBuild イベントになるまでにビルドされていない場合、BeforeBuild イベントは失敗します。

これを克服するには、別のエントリ ポイントを使用してビルド プロセスをカスタマイズする必要があります。上記の例では、AfterResolveReferences を使用しています。これにより、参照するすべてのプロジェクトが既にビルドされていることが保証されます。

于 2013-05-01T16:59:56.557 に答える
6

ジャックの答えはうまくいっているようですが、私が気に入らなかったのは、.csproj の編集のサポートが VS UI でネイティブにサポートされていないことです。通常どおりにファイルに)、プロジェクトをリロードします」モデル。私が望んでいたのは、ビルド前のイベントが依存プロジェクトのビルド後にトリガーされ、これが VS でも MSBuild と同じように機能することでした。この問題に苦労した後、MSBuild 4.0 でうまくいく解決策を見つけました。

何を試しても、依存プロジェクトのビルドが完了した後にトリガーするように PreBuildEvents ターゲットを変更できませんでした。そこで、代わりに PreBuildEvents ターゲットを無効にし、適切なタイミングで実行される粗悪なカスタム PreBuildEvents ターゲットを作成しました。

<ItemGroup>
  <ProjectReference Include="..\YourProjectPath\YourProject.csproj">
    <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
  </ProjectReference>
</ItemGroup>
<Target Name="PreBuildEvent" AfterTargets="" BeforeTargets="" />
<Target Name="BastardPreBuildEvent" AfterTargets="ResolveReferences" BeforeTargets="CoreResGen">
  <Exec Command="$(PreBuildEvent)" />
</Target>
于 2013-08-16T22:37:38.767 に答える