如何使我的託管 NuGet 包支持 C++/CLI 項目?
當我從 C# 項目中使用它時,我製作了一個執行良好的 NuGet 包。它在目錄中包含一個 DLL
lib/net40,並且該 DLL 被添加為引用。現在 NuGet 支持 C++,我如何實際修改我的包,以便可以將 DLL 作為託管引用添加到 C++/CLI 項目中?我找不到任何解釋這一點的教程。如果我嘗試按原樣添加包,則會收到以下錯誤:
您正在嘗試將此包安裝到以“Native,Version=v0.0”為目標的項目中,但該包不包含任何與該框架兼容的程序集引用或內容文件。
有人會認為解決方案是將文件放在 lib/native 下,但根據<http://docs.nuget.org/docs/reference/support-for-native-projects>,這是不受支持的。此外,簡單地將 DLL 直接放在 lib 下似乎沒有任何作用。
顯然,我應該使用 build/native 下的
.propsor.targets文件來執行此操作,但是我需要在這些文件中添加什麼才能使其正常工作?
正如Patrick O’Hara 所寫,NuGet 不會為您更改 C++/CLI 項目。請參閱GitHub 問題 NuGet/Home#1121 - 無法將託管包安裝到 CLI 項目中。但是,使用 NuGet 命令行實用程序,
NuGet.exe您可以讓 NuGet 下載並解壓縮所需的包。對於一個完整的範例,我採取以下步驟在 Visual Studio 2013 C++/CLI 項目中添加對OptimizedPriorityQueue 1.0.0 的引用:
- 如果尚未打開包管理器控制台(工具 > NuGet 包管理器 > 包管理器控制台),請打開它。
- 在包管理器控制台中,安裝 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>
- 在 Notepad++ 等文本編輯器中,
<package>為所需的包添加一個元素。在這種情況下,我補充說:<package id="OptimizedPriorityQueue" version="1.0.0" />..在
<packages>元素內。 5. 打開命令提示符(我打開了 VS2013 開發人員命令提示符,但應該可以使用正常命令提示符。) 6.cd進入項目文件夾。 7. 執行以下命令,更改 NuGet.CommandLine 的版本號(如果不同):.\packages\NuGet.CommandLine.2.8.6\tools\NuGet.exe 安裝 -NonInteractive -OutputDirectory 包 .nuget\packages.config對我來說,輸出是:
安裝“OptimizedPriorityQueue 1.0.0.0”。 成功安裝“OptimizedPriorityQueue 1.0.0.0”。 packages.config 中列出的所有軟體包都已安裝。
- 右鍵點擊 Visual Studio 中的項目並選擇Properties。在Common Properties > References下,點擊**Add New Reference…**按鈕。
- 選擇左側的**瀏覽。在 Add Reference 對話框的 OK 和 Cancel 按鈕旁邊,有一個Browse…**按鈕。點擊以打開文件選擇對話框。
- 導航到 NuGet 解壓到
packages項目文件夾子目錄的 DLL,然後點擊“添加”按鈕。點擊“確定”關閉“添加引用”對話框。- 您現在應該能夠在您的 C++/CLI 項目中使用該程序集:
using namespace Priority_Queue; //...