2017-07-14 162 views
2

我在Git上使用了來自NuGet的庫的C#項目。一切工作正常,但是當我使用新的新機器並在Visual Studio中打開解決方案時,由於參考文件不完整而無法編譯。如果我點擊項目下的參考資料,我可以看到帶有黃色感嘆號的經典警告標誌。nuget無法識別已安裝的軟件包

Nuget恢復不會做任何事情(而且我還沒有發現這個功能的任何用途......),文件的repositories.config沒有問題。如果我右鍵單擊解決方案,然後選擇「管理NuGet軟件包解決方案」,則不會顯示已安裝的軟件包。

爲了這一天,我解決了這種方式:運行

Install-Package package_name 

它說:

'package_name' already installed. 
My_project already has a reference to 'package_name'. 

...之後,它顯示了經理的包,已經分配到正確的項目。


一切都沒有在代碼的任何地方了改變,我可以看到,因爲有上Git的沒有區別。

我必須在新機器上只做一次,但它真的是煩人。任何想法?


的NuGet版本:2.8.60318.667


UPDATE 27/07

我想從頭開始的程序另一臺PC上,使用Windows 10,和一切正常......同一版本Visual Studio,NuGet等...我很困惑

+0

你是否選擇了正確的*包源*? – Rahul

+0

另外,請確保您嘗試清理程序包緩存。我以前曾遇到過這種情況。 – JuanR

+0

是的,如果你進入源碼控制瀏覽器,看到包文件夾被添加 - 刪除它,並重新拉,它應該重建和提供包很好 - 你也可以使用.tfignore或.gitignore文件來強制包文件夾不包含在提交 – confusedandamused

回答

1

我已經解決了這個問題。按照此步驟

  1. 在Visual Studio中,單擊工具>擴展和更新
  2. 導航到在線,搜索 「NuGet包管理器的Visual Studio的 」,然後單擊更新
  3. (如果沒有按鈕更新,導航到更新>視覺 工作室畫廊,找到 「NuGet包管理器的Visual 工作室」,並單擊更新
  4. 然後重新啓動Visual工作室。
+0

我已經做到了,它沒有解決它。正如你可以看到我的nuget版本已經更新到今天最新的版本。 – SOROMEED

+0

「正如你可以看到我的nuget版本已經更新到今天最新的版本」 - 不是真的;你已經顯示2.8。*;這真的很老。你正在運行什麼版本的Visual Studio? –

+0

啊,VS 2012,我現在看到了標籤。你能夠更新到更新版本的Visual Studio嗎?有可能某些工具等依賴於更新版本的NuGet,這可能反過來意味着更新版本的VS. –

0

從我的頭頂我可以想到一些原因,包沒有被下載,理想情況下,你將不得不分享一些更多的細節。

首先,install-package命令不起作用。你的軟件包已經安裝,VS只是無法下載它們,所以你有這個錯誤是有道理的。

  • 首先,這是一個公共包,在nuget.org中託管,如 System.MVC.Web?因爲如果這是在新機器上,使用私人nuget服務器,您需要 在工具>選項> Nuget Package Manager> 套件源中配置該源。 (有關更多詳細信息,請參閱https://docs.microsoft.com/en-us/nuget/tools/package-manager-ui
  • 檢查您是否已將文件夾添加到您的git repo中,但在同一時間爲其內容設置排除內容 。要檢查當您執行清理結帳時,請查看文件夾是否存在但是空的。如果這就是 案件只是刪除文件夾,git忽略應該從 現在開始工作,並且每個新克隆將做適當的檢查。
  • 如果以上兩者中最可能發生的原因是 不起作用。嘗試並從包管理器 控制檯恢復包,並更新您的文章的詳細信息。

您可以打開包管理器控制檯,然後輸入:

Update-Package -reinstall 

Update-Package -reinstall -Project YourProjectName 

FYI有來自微軟全面的文件 - https://docs.microsoft.com/en-us/nuget/consume-packages/package-restore - 在恢復的NuGet包的多種方式

+0

** 1。**是的,僅舉一個例子:'Newtonsoft.Json'。這些源文件已經在默認情況下在www.nuget.org/api/v2/ ** 2中配置**包文件夾爲空,只有repositories.config文件引用其他每個單個項目的repositories.config文件包含在解決方案中。我有一個忽略文件夾並只保存.config文件的gitignore。這部分似乎工作正常。 – SOROMEED

+0

@SOROMEED我認爲這可能是問題。 如果您在解決方案中啓用了包還原,則不需要該存儲庫.config。在理想的情況下,您的軟件包文件不應該包含任何內容,還原將抓取所有項目並恢復其所需的軟件包。所以試試刪除那個文件夾。 FYI https://stackoverflow.com/questions/11207635/what-is-the-nuget-repositories-config-file-for – rjso

+0

有趣的是,我不明白爲什麼這種方法不行,但我會嘗試你的方式,即使我無法忍受nuget恢復 – SOROMEED

2

這可能是因爲.csproj中.dll的路徑不正確。軟件包恢復將軟件包下載到本地目錄。它不會更改.csproj中程序集的引用路徑,這意味着該項目仍會嘗試在本地目錄中查找dll。黃色標記表示項目無法找到組件。

卸載項目,右鍵單擊項目並選擇「編輯.csproj」,並驗證丟失的DLL的路徑。例如 - 如果你有NUnit的,

<Reference Include="nunit.framework"> 
     <HintPath>..\packages\NUnit.3.6.1\lib\net45\nunit.framework.dll</HintPath> 
</Reference> 

驗證如果DLL存在裏面的 「\包\ NUnit.3.6.1 \ LIB \ net45」 目錄。

+0

thx - 至少對我來說是的,這是問題:) – flaZer

+0

這幫助我找出我的問題。我無法重新安裝nuget軟件包,因爲它說它已經安裝好了,所以我從packages.config中移除了軟件包,然後讓我用樹脂安裝它。之後工作。 – Rich