簡體   English   中英

NuGet:在項目中明確列出 package 依賴項作為 package 引用,以便可以卸載它們

[英]NuGet: explicitly list package dependencies as package references in project so they can be uninstalled

我正在創建一個 NuGet package (我們稱之為Lib ),它在單獨的 package ( Lib.Analyzers )中也有分析器

默認情況下,我希望在安裝Lib時將Lib.Analyzers安裝到項目中。 我可以通過在Lib的依賴項(在.nuspec文件中)中列出Lib.Analyzers來實現這一點。

但我也希望用戶能夠在不需要時再次卸載Lib.Analyzers

AFAIK package 依賴項未在 package 管理器中列為單獨的包,以下在 package 管理器控制台中不起作用:

PM> Install-Package Lib
...
PM> Uninstall-Package Lib.Analyzers
Uninstall-Package : Package 'Lib.Analyzers' to be uninstalled could not be found in project 'ClassLibrary1'

有沒有辦法做到這一點? 我在文檔中找不到任何東西。

基本原理

我想盡量減少新用戶的摩擦,即他們應該得到Lib.Analyzers提供的幫助,而不必記住每次安裝Lib時都要安裝分析器。

但我也希望Lib.Analyzers不會被強加給可能不再需要它們的有經驗的用戶。

解決方法

我目前的解決方法是將Lib重命名為Lib.Core ,刪除其對Lib.Analyzers的依賴關系,並創建第三個名為Lib的元包,將兩者捆綁在一起,得到以下依賴關系圖:

Lib
|- Lib.Core
'- Lib.Analyzers

新用戶總是會安裝Lib ,而有經驗的用戶只能安裝Lib.Core

然而, Lib實際上是一個相當小的庫,所以這個解決方案感覺有點“過度設計”。

這里有一個關於可選依賴項的 GitHub 問題,已關閉。

所以不幸的是,目前不支持它,而且似乎將來也不支持。

rohit21agrawal給出了以下接近的理由:

有幾個原因 - 我們正在關閉一年多沒有活躍的錯誤,第二,這不符合我們在不久的將來為 NuGet 制定的計划。

如果您對此功能有充分的理由,您可以打開一個新問題,我們會考慮它。

也許您的問題是“強有力的案例”

話雖如此,您的解決方法似乎還不錯。 更多文檔/介紹問題。


如果這是您問題的根源,還有一個選項可以抑制特定分析器

燈泡菜單

暫無
暫無

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

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