簡體   English   中英

Nuget - 對象引用未設置為對象的實例

[英]Nuget - Object reference not set to an instance of an object

我在 vs 2015 中遇到了 nuget 包管理器的問題。像 Unity 這樣的一些包已經安裝沒有問題。 某些軟件包(例如 EF)在安裝時出現問題。 一些像 Automapper 這樣的包也有同樣的問題,但是當我安裝這個包的另一個版本時,它安裝得很好。

這是輸出:

System.NullReferenceException: Object reference not set to an instance of an object.


at NuGet.Protocol.Core.v3.GlobalPackagesFolderUtility.<AddPackageAsync>d__1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at NuGet.Protocol.Core.v3.DownloadResourceV3.<GetDownloadResourceResultAsync>d__4.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at NuGet.PackageManagement.PackageDownloader.<GetDownloadResourceResultAsync>d__1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
   at NuGet.PackageManagement.NuGetPackageManager.<ExecuteNuGetProjectActionsAsync>d__42.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at NuGet.PackageManagement.NuGetPackageManager.<ExecuteNuGetProjectActionsAsync>d__42.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at NuGet.PackageManagement.UI.UIActionEngine.<ExecuteActionsAsync>d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at NuGet.PackageManagement.UI.UIActionEngine.<PerformActionAsync>d__3.MoveNext()
========== Finished ==========

使用 Visual Studio 2015 中使用的新協議(版本 3)nuget 是一個常見問題。它與多個 nuget 包一起使用,例如 Microsoft.Owin 3.0.1。 要解決此問題,請訪問:

C:\Users\<your user name>\AppData\Roaming\NuGet

並編輯 XML 配置文件,注釋協議 3 的行:

<!-- add key = "nuget.org" value = "https://api.nuget.org/v3/index.json" protocolVersion = "3" /-->
<add key = "nuget.org" value = "https://www.nuget.org/api/v2/" /> 

版本 2 的維護設置。保存並重新啟動 Visual Studio 2015。您現在應該毫無問題地恢復 nuget 包。

在 Visual Studio 2022 中仍然存在同樣的問題。解決方法:

  1. 導航到 C:\Users<您的用戶名>\AppData\Roaming\NuGet // 記住 AppData 是一個隱藏文件夾,因此您必須讓 Windows 顯示隱藏文件和文件夾才能看到它
  2. 在記事本中打開 NuGet.Config(或任何可以讓您編輯它的東西)
  3. 在“packageSources”部分中,查找以下行:

添加 key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3"

並刪除 'protocolVersion="3"'

  1. 保存文件並重新啟動 Visual Studio 2022

當我過去遇到 Nuget 問題時,這些是我已經完成的步驟:

1) 使用 Nuget 包管理器從項目中刪除

2) Clean and Build (你會有錯誤,因為你不再有引用 ​​2) 確保從你的 packages.config 中刪除包(如果沒有,刪除並重復步驟 2)

3) 確保 .dll 已從您的 bin 文件夾中刪除(如果沒有,請刪除並重復步驟 2)

4)重新添加包並重建。 確保將包添加到 packages.config(具有適當的版本),並將 .dlls 添加回 bin 文件夾(具有適當的版本)。

我正在運行 VS 2017,但在“dotnet restore”任務期間 TFS 構建服務器出現此錯誤。 問題是我們有一個內部本地文件共享,但 nuget.config 該條目的 protocolVersion="3"。 刪除該屬性后,構建成功。

  1. 我的問題發生在NuGet.Config (他NuGet.Config文件路徑: C:\Users\<UserName>\AppData\Roaming\NuGet

  2. 原因:工具-> NuGet 包管理器->包管理設置->包源->

     nuget.org=https://api.nuget.org/v3/index.json

    默認包源有protocolVersion="3"屬性,但我修改為我的離線包源,同時新建一個包源:

     nuget.ort=https://api.nuget.org/v3/index.json

    新的包源沒有屬性protocolVersion="3" ,所以無論是在線還是離線我總是無法安裝包。

  3. 解決方案:將ProtocalVersion="3"添加到

    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3"/>

    並在我的離線包源中刪除ProtocalVersion="3"

暫無
暫無

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

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