簡體   English   中英

使用相同 NuGet 包的兩個不同版本

[英]Using two different versions of same the NuGet package

我想使用兩個不同版本的相同庫(OpenCVSharp 2.x 和 OpenCVSharp 3.x)。

我將這兩個包都下載到單獨的項目(我們稱之為 OCV2Wrapper 和 OCV3Wrapper)並在我的項目中引用這兩個包裝器。 我不得不從一個包 (2.x) 重命名庫並參考它們手冊,因為: 我們可以在 NuGet 中添加同一包的 2 個不同版本嗎 我閱讀了有關外部別名的信息,並在其中一個包裝器中使用了外部別名(在我的例子中是 2.x)。 但我有一些主要問題:

  • 我重命名的庫沒有復制到啟動項目構建(引用兩個包裝器的那個),而是在 2.x 包裝器的構建中
  • 它不起作用,因為它說即使我從 2.x 包裝器手動復制重命名的庫,它也無法從我的 2.x 包裝器中找到類型。

在 C# 中,這種情況的正確方法是什么?

我想在解決方案中使用這兩個包裝器,因為 2.x 版本包含算法(SIFT 和 SURF),而 3.x 版本包含算法(Kaze 和 AKaze)。

我可以接受來自 NuGet 以外的其他地方的兩個包,但我更喜歡 3.x 來自 NuGet 而 2.x 版本是手動配置的。

如前所述,引用 2 個不同版本的 NuGet 包並沒有錯,只要這些引用是在不同的 Visual Studio 項目中進行的。

但這也是簡單部分結束的地方,但我認為還有一些選擇。 根據您的需要,我看到以下選項。

  1. 創建一個后期構建步驟,將多版本程序集注冊到 GAC 中。 只要每個程序集有不同的程序集版本,CLR 就會在需要時從 GAC 中挑選出正確的程序集。

  2. 創建一個構建后步驟,將不同的程序集復制到應用程序 bin 文件夾的子文件夾中,例如bin/package-v1bin/package-v2 然后,您可以在您的應用程序中覆蓋AssemblyResolve事件,如下所述: https ://msdn.microsoft.com/en-us/library/ff527268(v=vs.110).aspx。 這將使您能夠在需要時加載正確版本的程序集。

  3. 如果您不想玩弄AssemblyResolve ,那么您還可以修改您的web/app.config以執行程序集重定向/探測,如下所述: https ://msdn.microsoft.com/en-us/library/4191fzwb (v=vs.110).aspx

希望這對您有所幫助,這樣您下次就不必修改第三方源代碼了。

好的,我通過下載 2.X 包裝器版本的整個源代碼來解決這個問題。 將其命名空間重命名為 ABCDEF2,其中 ABCDEF 是原始命名空間。 使用我自己的密鑰構建我自己的 nuget 包,然后...將其發布到我們的私有 nuget 服務器。 這是一個如此蹩腳的解決方案,但除了手動下載原始包並使用不同的文件名等直接引用它之外別無他法,你失去了 nuget 的優勢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM