2016-06-14 9 views
1

C++/CLIで書かれたNuGetパッケージを作成しています。 C#とネイティブC++間の相互運用機能を果たします。NuGet interop pacakgeデバッグとリリースビルドに関するガイドライン

生成されたDLLには管理された表面領域とネイティブなインピブ表面領域があります。

Visual Studioは、受信プロジェクトのデバッグまたはリリース構成ごとに異なる参照アセンブリではなく、NuGetパッケージから単一の参照アセンブリのみを消費します。

NuGetパッケージから消費される参照アセンブリを構成に応じて異なるようにして、nupkgにDebug DLLとRelease DLLの両方を埋め込み、Release DLLにバインドしてC#ビルドをリリースDLLにバインドし、C#ビルドをバインドするデバッグDLL。

std C++クラス(std :: stringなど)のネイティブバイナリオブジェクトレイアウトがDebugとReleaseビルドで異なるため、これは私にとっては必要条件です。

DLLのリリースコンパイルは、残りのプログラムのデバッグコンパイルでは機能しません。私は、DLLとプログラムのリリースコンパイルのデバッグコンパイルで同様のエラーが発生します。

ここでできることはありますか?私は、NuGetの.propsまたは.targetsファイルに参照要素を入れて、$(Configuration)プロパティを使って少し調べましたが、まだ動作させていません。

+2

唯一の問題は、ライブラリユーザーのVSバージョンが異なる場合、まったく同じ問題が発生することです。これは、マネージインタフェースだけを公開しているC++/CLIプロジェクトでは決して*問題にならないはずです。あなたのC++コードは、常に実装の詳細でなければならないので、リリースビルドバージョンを配備しても問題はありません。 –

答えて

1

これは実際にはうまくいくかもしれませんが、実際のプロジェクトにどれほどうまく対応できるかはわかりません。

私の相互運用NuGetパッケージ:

  1. は、両方のデバッグを埋め込み、それぞれのネイティブ\デバッグ\とlib \ネイティブ\リリース\ \ libにDLLを解放します。
  2. <HintPath>
  3. $(MSBuildThisFileDirectory)..\lib\native\$(Configuration)\[DLL Name]から

とともに、これが正常にデバッグやビルド構成に依存リリースNuGet DLLに結合することができた、DLLに<ItemGroup><Reference>が含まれている.propsファイルがあります。

関連する問題