もくじ
https://tera1707.com/entry/2022/02/06/144447
やりたいこと
C#のプロジェクトからC++で作ったDLLを使うときに、ビルドしただけでは自動でコピーされてくれない。 (C#のexeの出力先に、C++のDLLがコピーされてくれないので、ビルドしただけではデバッグできるようにならない)
C#のプロジェクトからC#のDLLを使うときは、使う側のPJの参照設定にC#のDLLのプロジェクトを参照に入れておくだけで、出力先に一緒にコピーされてくれるが、C++のDLLだとそういうわけにはいかない。
そういうときに、ビルド後イベントで、C++のDLLの出力ファイル一式を、使う側のC#のPJの出力先にコピーするようにすると便利だったのでやり方をメモする。
前提
下記のようなソリューション、プロジェクトとその出力物の構成だとする。
図のように、C++DLLをビルドして出来上がったものを、C#の各使う側PJの出力先にコピーしたい。
やったこと
.NET6のPJと.NETFW4.8のPJで試したのだが、微妙に使えるスクリプトが異なったので分けてメモする。
.NET6のC#プロジェクトからC++のDLLを使う場合
下記のスクリプトを、ビルド後イベントに入れた。
xcopy /Y /S /I "$(SolutionDir)$(PlatformName)\$(Configuration)\" "$(ProjectDir)$(OutDir)"
こんな感じ。
.NET6では、下記のスクリプトでも使えた。
(.NET6だと、相対パスが使える??)
xcopy /y /s /d "..\$(PlatformName)\$(Configuration)\" "$(OutDir)"
.NET Framework4.8のC#プロジェクトからC++のDLLを使う場合
下記のスクリプトを、ビルド後イベントに入れた。※.NET6の1個目と同じ。
xcopy /Y /S /I "$(SolutionDir)$(PlatformName)\$(Configuration)\" "$(ProjectDir)$(OutDir)"
※.NET6で使えた相対パスの方は、FW4.8だとうまく動かなかった。.NETFW48だと相対パスが使えない?
参考
ビルド後イベントで使えるマクロの一覧