2017-07-14 118 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