一劳永逸地修复NuGet包和引用

时间:2015-12-14 14:52:30

标签: c# visual-studio visual-studio-2015 nuget azure-devops

Windows 8.1 Enterprise x64,Visual Studio 2015,MVC 5,EF 6,使用git的VS Online

我是Visual Studio的一个相对较新的开发人员(大约九个月),自从我开始以来,我在使用引用和NuGet包时遇到了非常困难的时期。我周五关闭计算机时,所有参考文献都在正常工作。我整个周末都没有触摸电脑,现在我已经启动了,我有很多参考错误:

list of errors

(共有6,262个错误,但我显然无法截取整个内容。)

就像我说的那样,这种问题经常发生,令人非常沮丧。我尝试过的事情:

  • 确保所有引用错误的引用都被引用
  • 取消/重新安装在NuGet中抛出错误的软件包
  • 完全删除packages文件夹的内容,让NuGet恢复它们(全部重新安装,视图与之前的错误相同)
  • 确保每个参考设置为Copy Local
  • 关闭解决方案,删除所有binobj文件夹,重新启动计算机,清理,重建
  • 确保所有必要的引用都在相关的web.config中(在Views内或在根目录中)
  • 检查NuGet选项以恢复丢失的包(未显示,所有包都在我的本地packages文件夹中)
  • 其他事情,我确定我忘了在这里列出

我对这些软件包和参考资料的态度非常敏捷。每次都是一个不同的修复,这次我无法弄明白。我错过了一些明显的修复,我忽略了什么?有没有办法以某种方式在这个工作时进行备份,并在事情发生时恢复它?任何想法,无论是帮助解决当前问题还是解决潜在问题,都将非常感激。

附加说明

问题不仅在于视图 - 控制器也在抛出错误。具体做法是:

  

找不到类型或命名空间名称'Controller'(您是否缺少using指令或程序集引用?)

(字面意思是Controller,这不是我因隐私或其他原因而改变的。)

尽管我对所有必需的命名空间都有using个语句,但仍抛出这些。 using语句本身可以正常工作,但代码中会抛出错误。建议的自动修复是手动引用所有内容:例如,var sb = new StringBuilder();要我将行更改为var sb = new System.Text.StringBuilder();。测试该修复程序无法解决问题,但会在System而不是StringBuilder上抛出相同的错误。

其他要求的信息

  • 我在VS Team Services中使用git(但.gitignore)会忽略包。
  • 我和另外一个人在这方面工作,但是其他人在几周内根本没有碰过它(甚至没有从遥控器回来)。
  • .csproj文件中的引用格式为..\..\..\packages\(相对于.csproj文件的位置更正)。
  • 定位.NET 4.6(一直都是,这不是新的)
  • 所有引用解析,引用列表中没有感叹号。

2 个答案:

答案 0 :(得分:5)

新项目

要使软件包与git一起正常工作,您需要做一件事:

创建存储库时,请确保添加为Visual Studio开发定制的.gitignore。您可以在Google上搜索此类文件,也可以从here获取该文件。

这将确保您不会提交任何会导致以后出现问题的内容。

这可以解决当您将包签入代码存储库时通常会发生的许多问题。您可以添加/删除包和升级包,也可以将存储库克隆到新计算机,并自动恢复包。

现有项目

这对新项目有利。如果你已经有一个非常大的混乱的项目,那么很难修复它,因为Visual Studio将包版本保存在几个地方 - packages.config和app.config(以及相关的web.config)。

选项1 - 修复当前项目

您可以删除所有包(删除所有项目中的所有引用并删除包内容)。

确保程序包不再出现在任何文件中(例如packages.config或app.config)。现在添加.gitignore,然后开始添加包。

选项2 - 创建新项目

如果它不起作用,启动一个新项目,添加.gitignore,传输所有代码(仅代码)并安装软件包。

答案 1 :(得分:2)

我不太熟悉Git在VS中的工作方式,但我记得最近一次使用TFS从源代码控制解除解决方案,修复所有软件包,清理和重新构建之前再绑定它解决了一堆有关NuGet参考的问题。

如果Git在VS中的表现方式不同,我道歉。