2017-05-09 136 views
0

這個問題目前是假設的,但有一個真實的基礎。如何替換第三方nuget軟件包的依賴關係?

供應商X的NuGet軟件包A依賴於供應商Y的NuGet軟件包B和Microsoft的System.Runtime。

我們發現有必要將B(它是開源的)分支到B'來修復B不願修復的錯誤。讓我們說我們在B'後面有幾個版本(這最終肯定會是真的)。

項目Q取決於A和B'。

我該如何讓nuget完全不知所措。我有一個用於構建nuget緩存目錄的腳本,但是如果我們只需運行nuget restore並獲得正確的答案,就會更有意義。

從理論上講,我們可以說我們可以發佈B到nuget.org,但是B在阻止上傳的方式。沒有機會說服X使用我們的B'而不是Y的B,而X是封閉的源,所以我們不能重新編譯它。

+0

您是否更改包ID?如果你沒有,你可以在消費項目中指定確切的版本(例如'2.1.9-internal-fixed')並且存在降級警告。 –

+0

(它需要在內部源或目錄包源中可用) –

+0

@MartinUllrich:我有能力做到這一點。如果你寫完整個事情,我可以接受這樣的答案。現在它缺少部分,但我可以想象需要做些什麼。 – Joshua

回答

0

如果更改軟件包ID,則無法覆蓋軟件包依賴關係(如果可以),則可以創建自定義版本。 NuGet支持SemVer預發佈版本,因此您可以將具有相同ID的軟件包推送到版本爲2.1.9-internally-fixed的私人提要(即使添加[]括號以指示固定的版本依賴性)。如果使所有頂級項目都依賴於此版本,則它們將覆蓋其他依賴項。請注意,如果軟件包取決於2.1.9,則可能會導致降級警告。

+0

原來這個答案不起作用。 – Joshua

+0

因此nuget在編譯時解決了2.1.9-內部固定的問題,但dotnet構建打包了2.1.9。 – Joshua

+0

你使用NuGet來使用該版本嗎?檢查csproj文件中的HintPath元素以查看構建實際使用哪些文件。你可以檢查NuGet是否恢復正確的版本,如果你刪除'packages'目錄。 –