2

2つのプロジェクトを含むVisualStudio2008ソリューションがあります。C++DLLとCsharpアプリケーション。

Csharpアプリケーションは、[DllImport]を使用してDLL内の関数にアクセスし、DLLに依存関係を設定します。

何らかの理由で、依存関係を設定するだけでは、VSがDLLをアプリのビルドパスにコピーするのに十分ではありません。そのため、アプリプロジェクトにはビルド後のイベントがあり、DLLがコピーされます。(誰かがこれを行うためのよりクリーンな方法を知っているなら、私に知らせてください!)

私が抱えている問題は、DLLコードに変更を加えてから、デバッガーでCsharpアプリケーションを実行しようとすると、VS2008がDLLを再構築(および再コピー)する必要があることを認識できないことです。

Csharpアプリケーションの再ビルドを強制する必要があります(つまり、ビルドを明示的に選択するか、.CSファイルに「タッチ」することによって)。

Visual Studioに正しいことをするように指示する方法を知っている人はいますか?

編集:私プロジェクトの依存関係を使用しています。それらは正しく機能していません。

ビルド後のイベントを使用してDLLをコピーしています

問題は、単にアプリケーションをデバッグすることを選択した場合、依存関係があるにもかかわらず、 VisualStudioが変更されたC++プロジェクトの再コンパイルに失敗することです。

(「デバッグ」ではなく)「ビルド」を選択すると、C ++ DLLがビルドされるため、依存関係が機能していることがわかります。

4

5 に答える 5

1

「ビルド」と「デバッグ」は異なることを行います。[ツール] - [オプション] - [プロジェクトとソリューション] - [ビルドと実行] に、[実行時にスタートアップ プロジェクトと依存関係のみをビルドする] チェックボックスがあります。これはデフォルトでチェックされています。そのため、VS が DLL を依存関係として認識していない場合、「デバッグ」を選択してもビルドされません。

手元に VS はありませんが (Express のみ)、C++ DLL を依存関係ではなく参照として追加してみてください。

于 2008-11-06T14:09:48.790 に答える
0

うーん...だから私はこれまで正確なことをしたことはありませんが、同じソリューションでC ++ libプロジェクトとC#winformプロジェクトを一緒に投げました。ソリューションを右クリックし、[プロパティ]を選択してから、[共通のプロパティ]-> [プロジェクトの依存関係]で、C#をC++に依存させるようにしました。

C ++のものにmodを作成すると、C++のものを再構築するかどうかを尋ねられます。「聞かないで」チェックボックスもあります。

たぶん私のテストはあなたの状況とは違うかもしれませんが、私がそれをしたときそれはうまくいったようでした。

それが助けになることを願っています。

于 2008-10-24T17:37:28.033 に答える
0

DLLプロジェクトが別のソリューションで使用されていないと仮定して、ビルド後のイベントをDLLアプリプロジェクトに配置して、常にコピーされるようにしないのはなぜですか?

于 2008-10-24T17:41:43.047 に答える
0

DLL プロジェクトの依存関係を持つアプリケーションで、これと同じ問題が発生しました。問題は、アプリケーションのプロジェクトで何かを再コンパイルする必要がある場合にのみ、Visual Studio がビルド後のイベントを起動することです。そのため、アプリケーションに含まれるヘッダーを変更せずに DLL ソースを変更すると、その観点から見ると DLL は同じであるため、アプリケーションは再コンパイルされません。アプリケーションは再コンパイルされないため、ビルド後のイベントはトリガーされません。そのため、アプリケーションには古い DLL が残っています。私はまだこの問題に対する良い解決策を思い付いていません。

于 2008-11-12T17:32:04.933 に答える
0

試したことはありませんが、ビルドオーダーでこれを行うことはできませんか?

于 2008-11-06T12:38:41.297 に答える