1. ホーム
  2. .net

[解決済み] 管理するNuGetパッケージでC++/CLIプロジェクトをサポートするにはどうすればよいですか?

2023-07-15 19:33:15

質問

NuGet パッケージを作成し、C# プロジェクトから使用するとうまく動作するようになりました。このパッケージには、DLL が lib/net40 ディレクトリにあり、DLLは参照として追加されます。

NuGet が C++ をサポートするようになった今、C++/CLI プロジェクトで DLL を管理された参照として追加できるように、私のパッケージを実際にどのように変更すればよいでしょうか。これを説明するチュートリアルを見つけることができません。パッケージをそのまま追加しようとすると、次のエラーが表示されます。

このパッケージを 'Native,Version=v0.0' をターゲットとするプロジェクトにインストールしようとしていますが、このパッケージにはそのフレームワークと互換性のあるアセンブリ参照またはコンテンツ ファイルが含まれていません。

解決策は lib/native の下にファイルを置くことだと思うかもしれませんが、次のようになります。 http://docs.nuget.org/docs/reference/support-for-native-projects によると、それはサポートされていません。また、単に DLL を直接 lib の下に置いても、何も起こらないようです。

どうやら、私はこれを .props または .targets のようなファイルを作成する必要がありますが、これらのファイルには何を書けばよいのでしょうか?

どのように解決するのですか?

として Patrick O'Hara さんが書きました。 として、NuGetはあなたのためにC++/CLIプロジェクトに変更を加えることはありません。 参照 GitHub Issue NuGet/Home#1121 - マネージドパッケージを CLI プロジェクトへインストールできない . しかし、NuGet コマンドライン ユーティリティを使用すると NuGet.exe を使用すると、NuGet に必要なパッケージをダウンロードおよび解凍させることができます。

完全な例として、以下の手順で OptimizedPriorityQueue 1.0.0 への参照を Visual Studio 2013 C++/CLI プロジェクト内に追加する手順です。

  1. パッケージ マネージャー コンソールを開いていない場合は、開きます ( TOOLS > NuGet パッケージマネージャ > パッケージマネージャコンソール ).
  2. パッケージ・マネージャー・コンソールで、NuGet.CommandLineパッケージをインストールします。

    インストール-パッケージ NuGet.CommandLine
    
    

    (注意: この記事を書いている時点では、NuGet.CommandLineの最新バージョンは2.8.6です。 あなたにとっては違うかもしれません)。

  3. プロジェクトフォルダ内に、現在では .nuget\packages.config XML ファイルが作成され、次のような内容になっています。

    <?xml version="1.0" encoding="utf-8"?>
    <packages>
      <package id="NuGet.CommandLine" version="2.8.6" />
    </packages>
    
    
  4. メモ帳++などのテキストエディタに <package> 要素を追加します。 今回は、追加しました。

    <package id="OptimizedPriorityQueue" version="1.0.0" />
    
    

    ... 内に <packages> 要素の中にあります。

  5. コマンドプロンプトを開く (私は VS2013 Developer Command Prompt を開きましたが、通常のコマンドプロンプトでも問題ありません)。

  6. cd をプロジェクトフォルダにコピーします。
  7. 以下のコマンドを実行し、NuGet.CommandLineのバージョン番号が異なる場合は、変更します。

    .\packages.CommandLine.2.8.6tools .nugetpackages.exe Install -NonInteractive -OutputDirectory packages .nugetpackages.config
    
    

    私の場合、出力されたのは

    OptimizedPriorityQueue 1.0.0.0'をインストール中です。
    OptimizedPriorityQueue 1.0.0.0'のインストールに成功しました。
    packages.configに記載されているすべてのパッケージが既にインストールされています。
    
    
  8. Visual Studioでプロジェクトを右クリックし プロパティ . その下に 共通プロパティ > リファレンス をクリックします。 新しい参照の追加... ボタンをクリックします。
  9. 選択 閲覧 を左側で選択します。 参照の追加]ダイアログの[OK]ボタンと[キャンセル]ボタンの横にある 参照... ボタンがあります。 これをクリックすると、ファイル選択ダイアログが表示されます。
  10. NuGetが解凍したDLLを移動して packages サブディレクトリに移動し、プロジェクトフォルダーの を追加します。 ボタンをクリックします。 クリック OK をクリックして、[参照の追加]ダイアログを閉じます。
  11. これで、C++/CLI プロジェクトでアセンブリを使用することができるようになるはずです。

    using namespace Priority_Queue;
    
    //...