Visual Studio 2017未能在.NET 4.7项目中安装nuget软件包

Visual Studio 2017未能在.NET 4.7项目中安装nuget软件包,nuget,visual-studio-2017,Nuget,Visual Studio 2017,在尝试将nuget软件包安装到标准.NET framework 4.7项目中时,我遇到以下错误: 指定的路径、文件名或两者都太长。完全限定文件名必须少于260个字符,目录名必须少于248个字符 我正在使用Visual Studio 2017 15.3.3 Enterprise(最新和最棒) 鉴于这是我的软件包,我完全可以控制源代码。有趣的是,我以前使用过这个软件包,但名称没有改变,但这次我重新构建了它,添加了一个功能,现在出现了这个错误 更有趣的是,我有来自同一个库的包,具有相同的名称空间约定,

在尝试将nuget软件包安装到标准.NET framework 4.7项目中时,我遇到以下错误:

指定的路径、文件名或两者都太长。完全限定文件名必须少于260个字符,目录名必须少于248个字符

我正在使用Visual Studio 2017 15.3.3 Enterprise(最新和最棒)

鉴于这是我的软件包,我完全可以控制源代码。有趣的是,我以前使用过这个软件包,但名称没有改变,但这次我重新构建了它,添加了一个功能,现在出现了这个错误

更有趣的是,我有来自同一个库的包,具有相同的名称空间约定,具有更长的名称,这些包工作正常,并且安装到同一个项目中没有任何问题

我已经尝试过压缩包名,压缩包本身内的类名,清理构建目录,清理nuget服务器上的包主目录(这是一个安装了最新nuget.server的本地服务器,否则工作正常),甚至清除有问题的项目的bin目录,清除所有祖先的bin目录到“违规”包,清除包缓存,重新启动计算机,从头开始重建整个nuget包链,所有这些都是徒劳的。一位最有价值球员告诉我,“他们解决了这个问题”。显然不是

这里的任何帮助都将不胜感激,我已经束手无策,没有办法尝试了


谢谢。

好的,非常感谢@danmosemsft,他建议使用SysInternals进程监视器进行深入研究。在对它进行了一点修改之后,我终于想出了如何将结果集缩小到仅包含文件活动的范围。我注意到的是,nuget工程师应该注意到这一点:问题不是项目名称太长,而是nuget试图更新一个不再存在的包。它为什么消失是一个尚未解开的谜。我通常不在packages目录中,也不会处理packages.config文件。我想这可能是因为我不耐烦地等待VS启动,加载所有的好东西,然后允许我执行“管理NuGet包”-全部更新。我记得看到NUnit或FluentAssertions的更新,除了安装下一个版本(我相信是一个脚本)之外,还想执行一些额外的文件活动。我不能肯定地说,我并没有像第三方更新通常“正常工作”那样关注它。我没有看到NuGet的“完成”行,所以我认为这是我问题的根源。我没有等到VS稳定下来,而是稍微按了一下(嘿,按钮响应了,所以不应该有任何问题…)

结果,packages目录中完全塞满了不属于那里的旧东西。所以,我手动清理了所有的积垢,手动清理了packages.config文件,重新启动VS,等待它稳定下来,执行我的NuGet更新和viola!没有问题-没有改变任何祖先的包名称,即使是一个字符

那么,我从中得出什么结论呢?这是我的信念,实际上构建nuget和nuget.server的人应该仔细查看抛出的错误,这样我认为错误不是路径太长的错误,而是“嘿,我没有找到我期望的文件,所以文件名充满了垃圾(现在可能太长了)所以我会抛出一个错误,说它太长,然后退出”。处理丢失的包/包目录似乎是一个失败,它导致了这个特殊的问题

我通过确保所有包目录都没有垃圾并从干净的源代码重建来解决问题。我的问题现在解决了

感谢你们所有的回应

更新:尽管上述因素有助于解决问题,但这并不是答案。以下是导致这一问题的一系列事件及其最终解决方案。 解决方案是在C:\User\Sam\Documents\Visual Studio 2017\Projects目录中创建的,指定名称为AWE.Lib.ADO.MsSqlSvr.ServerEntityHandler。这很好,没有错误。但是,由于命名方案从“高”更改,此项目的根目录从“C:\User\Sam\Documents\Visual Studio 2017\Projects”更改为“C:\User\Sam\Documents\Visual Studio 2017\Projects\DotNet\u 4.7\AWE 8.x”。没问题,我想——考虑到一位恰好也是MS MVP的同事告诉我,VS 2017取消了所有命名长度限制。所以…我将项目从当前的主目录移动到指定的目录。编译很好,带来更新但已经安装的nuget软件包很好,等等

至少我是这么想的。当我需要向混合中添加一个新的(以前不是解决方案的一部分)nuget包时,我收到了上面的错误。事实证明,接收解决方案的新名称比VS可以接受的长度长几个字符——命名长度限制仍然存在

我最终是如何解决这个问题的:在努力解决这个问题后,我举手决定重新开始——一个真正的新文件。因此,我从一个新的解决方案开始,其名称如下: “C:\Users\Sam\Documents\Visual Studio 2017\Projects\DotNet\u 4.7\AWE 8.x\AWE.Lib.ADO.MsSqlSvr.HndlrServerEntity” 这将生成一个错误名称太长。我对Nuget的错误感到惊讶,因为它指定名称的长度应该少于248个字符,或者最多260个字符

根据新的解决方案对话框,我可以使用以下内容:“C:\Users\Sam\Documents\Visual Studio 2017\Projects\DotNet\u 4.7\AWE 8.x\AWE.Lib.ADO.MsSqlSvr.hndlrserver”,总共106个字符。如果目录被缩短,我可以增加长度