簡體   English   中英

Visual Studio 2017 無法在 .NET 4.7 項目中安裝 nuget 包

[英]Visual Studio 2017 failing to install nuget package in .NET 4.7 project

嘗試將 nuget 包安裝到標准 .NET 框架 4.7 項目時出現以下錯誤:

指定的路徑、文件名或兩者都太長。 完全限定的文件名必須少於 260 個字符,目錄名必須少於 248 個字符。

我使用的是 Visual Studio 2017 15.3.3 Enterprise(最新的和最好的)。

鑒於這是我的包,我可以完全控制源代碼。 有趣的是,我過去使用過這個包,名稱沒有改變,但為此,我重建了它以添加一個功能,現在遇到了這個錯誤。

更有趣的是,我有來自同一個庫的包,具有相同的命名空間約定,具有更長的名稱,它們工作得很好,並且安裝到同一個項目中沒有任何問題。

我已經嘗試縮小包名稱,縮小包本身中的類名,清理構建目錄,從 nuget 服務器清理包主頁(它是安裝了最新 nuget.server 的本地服務器,否則工作正常),甚至清除有問題的項目的 bin 目錄,清除所有祖先的所有 bin 目錄到“違規”包,清除包緩存,重新啟動計算機並從頭開始重建整個 nuget 包鏈,都無濟於事。 一位 MS MVP 告訴我“他們解決了這個問題”。 顯然不是。

任何幫助將不勝感激,我已經無計可施並且沒有任何想法可以嘗試。

謝謝。

好的,非常感謝@danmosemsft,他建議使用 SysInternals 進程監視器進行挖掘。 在擺弄了一下之后,我終於想出了如何將結果集縮小到僅文件活動。 我注意到了什么,nuget 工程師應該注意這一點:問題不是太長的項目名稱,而是 nuget 試圖更新不再存在的包。 為什么它消失是一個尚未解開的謎。 我通常不在包目錄中,也不會對packages.config 文件大驚小怪。 認為這可能與我不耐煩等待 VS 啟動、加載所有好東西然后讓我執行“管理 NuGet 包” - 全部更新有關。 我記得看到 NUnit 或 FluentAssertions 的更新,除了只安裝下一個版本之外,還想執行一些額外的文件活動,我相信這是一個腳本。 不能肯定地說,我沒有太多關注,因為第三方更新通常“正常工作”。 我沒有看到 NuGet 的“完成”行,所以我認為這是我問題的根源。 我沒有等到 VS 穩定下來,而是將它推了一下(嘿,按鈕響應了,所以應該沒有任何問題......)。

結果,包目錄絕對塞滿了不屬於那里的舊東西。 所以,我手動清理了所有的 cruft,手動清理了 packages.config 文件,重新啟動了 VS,等待它穩定下來,執行了我的 NuGet 更新和中提琴! 沒問題 - 甚至一個字符都沒有改變任何祖先包的名稱。

那么,我從中得出什么結論? 這是我的信念,實際構建 nuget 和 nuget.server 的人應該仔細查看拋出的錯誤,這樣我就認為錯誤不是路徑太長的錯誤,而是“嘿,我沒有找到我想要的文件,所以文件名全是垃圾(現在可能太長了),所以我會拋出一個錯誤,說它太長並退出”。 處理導致此特定問題的丟失包/包目錄似乎是失敗的

我通過確保所有包目錄都清除所有垃圾並從干凈的源重建來解決我的問題。 我的問題現在解決了。

感謝大家的回應。

更新:雖然上述內容有助於解決方案,但這不是答案。 以下是導致此問題的一系列事件及其最終解決方案。 該解決方案是在 C:\\User\\Sam\\Documents\\Visual Studio 2017\\Projects 目錄中創建的,指定名稱為 AWE.Lib.ADO.MsSqlSvr.ServerEntityHandler。 這工作得很好,沒有錯誤。 但是由於命名方案自上而下的更改,此項目的根目錄從“C:\\User\\Sam\\Documents\\Visual Studio 2017\\Projects”更改為“C:\\User\\Sam\\Documents\\Visual Studio 2017\\Projects\\DotNet_4.7\\AWE 8.x”。 沒問題,我想 - 鑒於一位恰好也是 MS MVP 的同事告訴我,所有命名長度限制都已在 VS 2017 中刪除。所以......我將項目從它當前的家移到了目錄指定。 編譯得很好,引入更新但已經安裝好的 nuget 包,等等。

或者我是這么想的。 當我需要向混合中添加一個新的(以前不是解決方案的一部分)nuget 包時,我收到了上述錯誤。 事實證明,接收解決方案的新名稱比 VS 接受的字符長幾個字符——命名長度限制仍然存在。

我是如何最終解決問題的:在為此苦苦掙扎后,我舉起了雙手,決定從頭再來——一個真正的文件 | 新的。 所以,我開始使用一個名為如下的新解決方案:“C:\\Users\\Sam\\Documents\\Visual Studio 2017\\Projects\\DotNet_4.7\\AWE 8.x\\AWE.Lib.ADO.MsSqlSvr.HndlrServerEntity”這會產生一個錯誤 - 名稱太長。 我想知道 Nuget 的錯誤,因為它指定名稱的長度應小於 248 個字符或最多 260 個字符。

我被允許使用新的解決方案對話框是這樣的:“C:\\Users\\Sam\\Documents\\Visual Studio 2017\\Projects\\DotNet_4.7\\AWE 8.x\\AWE.Lib.ADO.MsSqlSvr.HndlrServerEnt”,總共 106 個字符的長度。 如果目錄被縮短,我可以增加名稱的長度。 如果我再次縮短實際解決方案名稱的長度,VS 會接受它。 只要目錄加上解決方案名稱的總長度小於或等於106個字符,就沒有問題。

令人討厭的一點來自於在一個位置創建解決方案並讓它在所有方面都正常工作,將所述解決方案移動到不同的目錄,仍然在所有方面都能正常工作(我還不需要添加任何新的 nuget 包),然后嘗試在移動后向組合中添加一個新的 nuget 包。 這就是觸發上述 nuget 錯誤的原因。

所以......最終的“修復”,使用更短的名稱,因為盡管錯誤消息說的是什么(以及MS MVP被告知/告訴我的內容),但似乎106個字符是限制。

編譯器出現此錯誤消息還有另一個原因。 在構建時,請確保將源代碼放置在長度小於 260 個字符的文件夾位置。 例如,像C:\\Users\\User\\source\\Services\\Exp\\Sample-web-application-indot-net-displaying-RestAPI\\Sample-web-application-indot-net-displaying-RestAPI\\SportsStore 150 個字符長,但解決方案中有子文件夾,這些子文件夾又包含源代碼文件等。 有時,某些文件的路徑總長度會超過 260 個字符的長度。

我認為 Visual Studio 的未來版本會有更大的長度限制。 在此之前,我們可以確保我們的文件名不會太長。

將項目移動到另一個文件夾后,我遇到了同樣的問題。 在我的情況下,我關閉了 VS 將根目錄中的 .vs 文件夾重命名為 1.vs(有效地將其刪除)並重新打開我的項目。

就我而言,我首先嘗試使用Manage Nuget Packages for Solutions安裝一個包,但遇到了這個錯誤。 然后我嘗試使用Package Manager Console安裝相同的包,它工作正常。 我再次卸載了該軟件包並嘗試使用Manage Nuget Packages for Solutions安裝,這次它也運行良好。

根據我的經驗,我所要做的就是將整個項目移動到我的 c: 驅動器,刪除不必要的文件夾以確保路徑更短。 成交。

當我嘗試將項目文件夾復制到 OneDrive 時出現此錯誤,問題是 OneDrive 未上傳長名稱文件。

我通過復制項目文件夾然后使用 USB 將其粘貼到新筆記本電腦中來解決此問題。

我希望這可以幫助

將項目的文件夾移動到根目錄幾級內的文件夾中。 例如桌面和瞧。

嘗試從File->Close Solution並再次打開它。

對於我卸載、安裝甚至更新 NuGet 包的情況,除了重新打開(有時您也可以關閉並再次打開 Visual Studio)外,沒有其他任何工作,解決方案發揮了神奇作用。

暫無
暫無

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

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