8

プロジェクトが変更されたときに、Visual Studio 2012にすべての依存プロジェクトを再構築させるにはどうすればよいですか?

C ++ DLLとC#WPFアプリの2つのプロジェクトがあります。C#プロジェクトには、DLLをDebugフォルダーにコピーするためのビルド後のコマンドがあります。

C ++プロジェクトを変更すると、DLLは再構築されますが、C#プロジェクトは再構築されないため、DebugフォルダーでDLLが更新されません。次に、更新された結果を表示する前に、ソリューションをクリーンアップして再構築する必要があります。

C ++プロジェクトを更新するたびに、C#プロジェクトを再構築する(または少なくともビルド後のコマンドを実行する)必要があることをVSに伝えたいと思います。C#プロジェクトはC ++プロジェクトに依存していますが、参照を介しては依存していません。

4

3 に答える 3

5

ピーターの答えを詳しく説明するために、これが私がしたことです。

ソリューション エクスプローラーで C# プロジェクトを右クリックし、[追加] > [既存の項目] を選択します。

C++ 出力フォルダーを参照して DLL ファイルを選択し、[追加] ボタンで開く代わりに、その横にあるドロップダウン ボタンをクリックして、[リンクとして追加] を選択します。

私が最初に行ったのは、C# プロジェクトに追加されたリンクを右クリックして [プロパティ] を選択し、[出力ディレクトリにコピー] を [新しい場合はコピー] に変更することでした。しかし、現在の構成ではなく、デバッグバージョンをコピーすることに気付きました (リンクが指していた場所であるため)。コマンドラインが自動的に適切な構成を選択するため、コピーしないでそのままにしました。

そのため、C# プロジェクトには C++ プロジェクト出力へのリンクがあり、リンクがプロジェクトの出力とは関係なくても、C++ プロジェクトが変更されるたびにリビルドがトリガーされます。

記録として、C# プロジェクトのビルド後のコマンド ラインを次に示します (foobar は C++ DLL です)。

copy "$(SolutionDir)\$(Configuration)\foobar.dll" "$(TargetDir)"
于 2012-09-29T13:18:11.987 に答える
3

ソリューション内でプロジェクトの依存関係を設定しても、C++ プロジェクトの .dll を他のプロジェクトへのリンクとして含めようとするだけでは解決しない場合は、ファイルが変更されたことを認識し、プロジェクトを再構築する必要があります。

于 2012-09-28T13:29:34.730 に答える
0

次のコードを各依存プロジェクトに挿入します。

<ItemGroup>
    <None Include="$(MSBuildProjectDirectory)\Properties\Build\_buildforcer">
        <Visible>true</Visible>
    </None>
</ItemGroup>
<Target Name="ForceNextBuild"
        AfterTargets="PrepareForRun"
        Condition=" '$(BuildingInsideVisualStudio)' == 'true' ">

    <Touch Files="$(MSBuildProjectDirectory)\Properties\Build\_buildforcer"
           AlwaysCreate="true"/>
</Target>

必要に応じて を使用してこれを行うことができますImport。これにより、依存するプロジェクトが変更されたときだけでなく、常にプロジェクトがビルドされます。

しかし、これらの依存プロジェクトはアプリケーション プロジェクトであることが多く、通常はビジネス ライブラリのシン ラッパーです。さらに、コンパイルはこのように強制されません。MSBuildすべてが最新であることを確認するためだけに、すべてのターゲットを実行しているだけです。したがって、F5パフォーマンスが大幅に低下することはありません。

このメカニズムが機能するにはアイテムが表示されている必要があるため、Noneアイテムを明示的に としてマークしました。Visible関連する注意事項として、上記の変更を行った後、ソリューションをリロードする必要がある場合があります。

于 2016-06-30T06:51:07.127 に答える