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

标签 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恢复(全部重新安装,view和之前一样报错)
  • 确保每个引用设置为Copy Local
  • 关闭解决方案,删除所有 binobj 文件夹,重新启动计算机,清理,重建
  • 确保所有必要的引用都在相关的 web.config 中(在 Views 中或在根目录中)
  • 检查 NuGet 选项以恢复丢失的包(没有出现,所有包都在我本地的 packages 文件夹中)
  • 关于 SO 的其他事情,我确定我忘记在这里列出

我对这些包和引用资料束手无策。每次都是不同的修复,这次我搞不明白。我是否遗漏了一些明显的修复,我忽略了什么?有没有办法在它工作时以某种方式进行备份并在出现问题时恢复它?任何想法,无论是帮助解决当前问题还是解决潜在问题,我们都将不胜感激。

补充说明

问题不仅在于 View —— Controller 也会抛出错误。具体来说:

The type or namespace name 'Controller' could not be found (are you missing a using directive or an assembly reference?)

(字面意思是 Controller,这不是我为了隐私或其他原因而更改的内容。)

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

额外要求的信息

  • 我将 git 与 VS Team Services 结合使用(但是 .gitignore 会忽略包)。
  • 我和另外一个人正在处理这个问题,但另一个人在几个星期内根本没有触及它(甚至没有从远程存储库中拉取数据)。
  • .csproj 文件中的引用格式为 ..\..\..\packages\(相对于 的位置正确。 csproj 文件)。
  • 以 .NET 4.6 为目标(一直都是,这不是新的)
  • 所有引用都解析,引用列表中没有感叹号。

最佳答案

新项目

为了让包在 git 中正常工作,你需要做一件事:

创建存储库时,请确保添加为 Visual Studio 开发量身定制的 .gitignore。你可以谷歌搜索这样的文件或者从here中获取。 .

这将确保您不会提交任何会在以后引起问题的内容。

这应该可以解决很多在将包 checkin 代码存储库时通常会发生的问题。您可以添加/删除包和升级包,还可以将存储库克隆到新机器上,包将自动恢复。

现有项目

这对新项目很有用。如果您的项目已经一团糟,那么修复它就非常困难,因为 Visual Studio 将包版本保存在多个位置 - packages.config 和 app.config(以及相关的 web.config)。

选项 1 - 修复当前项目

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

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

选项 2 - 创建一个新项目

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

关于c# - 一劳永逸地修复 NuGet 包和引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34269976/

相关文章:

c# - 有没有办法在 'publicly readable buckets' 上使用 Amazon .NET AWS SDK 的 AmazonS3 客户端而不指定 AWS 凭证?

c# - 当删除对类实例的所有其他引用时,Action<T> 是否会阻止封闭的类实例被 GC ?

c# - 调度程序如何工作线程?

c# - 我可以通过 C#/Visual Studio 中的预编译器指令检测网络连接吗?例如#if 连接到网络

visual-studio - 如何配置 Visual Studio 以使用 Beyond Compare

c# - 在 C# 窗口中嵌入网页

c# - 无法加载文件或程序集 'xxx.Data' 该进程无法访问该文件,因为它正被另一个进程使用

c# - 我可以使用 MonoTouch 将旧的 C# 桌面应用程序移植到 iPad 上吗?

visual-studio - 停止 Typescript 发出 @class 注释

c++ - 在 Visual Studio 项目目录中找不到头文件