尝试将nuget软件包安装到标准.NET Framework 4.7项目中时出现以下错误:
指定的路径,文件名或两者都太长。完全限定的文件名必须少于260个字符,目录名必须少于248个字符。
我正在使用Visual Studio 2017 15.3.3 Enterprise(最新和最好的)。
鉴于这是我的包,我可以完全控制源代码。有趣的是,我过去曾使用过这个软件包而名称没有变化,但为了这个,我重新构建它以添加一个功能,现在我收到了这个错误。
更有意思的是,我有来自同一个库的包,具有相同的命名空间约定,更长的名称,它们工作得很好并且已经安装到同一个项目中而没有任何问题。
我已经尝试缩小软件包名称,缩小软件包本身中的类名,清理构建目录,从nuget服务器清理软件包home(它是一个带有最新nuget.server的本地服务器)安装,否则工作正常),甚至清除有问题的项目的bin目录,清除所有祖先的所有bin目录到"冒犯"包,清理包缓存,重新启动计算机并从头开始重建整个nuget包链,一切都无济于事。一位MS MVP告诉我,他们已经解决了这个问题"。显然不是。
任何帮助都会在这里受到赞赏,我的机智已经结束,并且已经没有想法尝试了。
感谢。
答案 0 :(得分:7)
好的,非常感谢@danmosemsft谁建议挖掘SysInternals进程监视器。在摆弄了一下之后,我终于想出了如何将结果集缩小到只是文件活动。我注意到了,nuget工程师应该注意这个:问题不是一个太长的项目名称,而是,nuget试图更新不再存在的包。为什么它消失是一个尚未解决的谜。我通常不在包目录中,也不要对packages.config文件大惊小怪。我认为这可能与我不耐烦等待VS启动,加载所有好东西然后允许我执行"管理NuGet包" - 全部更新。我记得看到NUnit或FluentAssertions的更新想要执行一些额外的文件活动,除了安装下一个版本,我相信一个脚本。无法保证能够说话,因为第三方更新通常只是工作"我没有那么多关注。我没有看到"完成"来自NuGet的这一行,所以我认为那是我问题的根源。我没有等到VS安定下来,而是推了一下(嘿,按钮响应,所以不应该出现任何问题......)。
结果,包目录中充满了不属于那里的旧东西。所以,我手动清理所有的cruft,手动清理packages.config文件,重新启动VS,等待它安定下来,执行我的NuGet更新和中提琴!没问题 - 即使是单个字符,也没有改变任何ANCESTRAL包名称。
那么,我从中得出什么结论呢?这是我的信念,实际构建nuget和nuget.server的人应该仔细查看被抛出的错误,这样我认为错误不是路径太长错误而不是它"嘿,我没找到我预期的文件,所以文件名充满了垃圾(现在可能太长了)所以我会抛出一个错误说它太长了,退出了#34;它似乎无法处理导致此特定问题的缺失包/包目录
我通过确保所有包目录都清除所有垃圾并从干净的源重建来解决了我的问题。我的问题现在已经解决了。
感谢所有回复的人。
更新:虽然上述内容有助于解决方案,但这不是答案。以下是导致此问题的事件序列及其最终解决方案。 该解决方案是在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_4.7 \ AWE 8.x"。没问题,我想 - 考虑到同时也是MS MVP的同事告诉我,VS 2017中已经删除了所有命名长度限制。所以......我将项目从它的当前移动指定目录的主页。编译得很好,带来更新但已经安装的nuget包就好了等。
或者我想。当我需要添加一个NEW(之前没有成为解决方案的一部分)的nuget包混合时,我收到了上述错误。事实证明,接收解决方案的新名称比VS接受的字符长几个字符 - 命名长度限制仍然存在。
我是如何最终解决问题的:在努力解决这个问题之后,我举起手来决定重新开始 - 一个真正的文件|新。所以,我开始使用一个名为如下的新解决方案: " C:\ Users \ Sam \ Documents \ Visual Studio 2017 \ Projects \ DotNet_4.7 \ AWE 8.x \ AWE.Lib.ADO.MsSqlSvr.HndlrServerEntity" 这产生了一个错误 - 名字太长了。我想知道Nuget的错误,因为它指定名称长度应少于248个字符或最多260个字符。
我允许使用新解决方案对话框是这样的:" C:\ Users \ Sam \ Documents \ Visual Studio 2017 \ Projects \ DotNet_4.7 \ AWE 8.x \ AWE.Lib.ADO .MsSqlSvr.HndlrServerEnt",总长度为106个字符。如果缩短目录,我可以添加名称的长度。如果我缩短实际解决方案名称的长度,VS' ll会接受它。只要目录加解决方案名称的总长度小于或等于106个字符,就不会有问题。
令人讨厌的一点来自于在一个位置创建解决方案并使其在所有方面工作得很好,将所述解决方案移动到另一个目录,仍然使其在所有方面都起作用(我不需要添加任何新的nuget包然后尝试在移动后添加一个新的nuget包。这就是触发上述nuget错误的原因。
所以...终极"修复",使用较短的名称,因为似乎106个字符是限制,尽管错误消息说的是什么(以及MS MVP被告知/告诉我的内容)
答案 1 :(得分:3)
编译器发出此错误消息还有另一个原因。
构建时,请确保源代码放置在长度小于260个字符的文件夹位置。
例如,像C:\Users\User\source\Services\Exp\Sample-web-application-indot-net-displaying-RestAPI\Sample-web-application-indot-net-displaying-RestAPI\SportsStore
这样的路径长约150个字符,但解决方案中有子文件夹,而这些子文件夹又包含源代码文件,依此类推。
有时,某些文件路径的总长度超过260个字符长度。
我认为Visual Studio的未来版本会有更大的长度限制。在此之前,我们可以确保我们的文件名不会太长。
答案 2 :(得分:1)
将项目移到另一个文件夹后,我遇到了同样的问题。以我为例,我关闭了VS,将根目录下的.vs文件夹重命名为1.vs(有效地将其删除),然后重新打开了我的项目。
答案 3 :(得分:0)
根据我的经验,我要做的就是将整个项目移至c:驱动器,删除不必要的文件夹以确保路径更短。完成交易。
答案 4 :(得分:0)
当我尝试将项目文件夹复制到OneDrive时出现此错误,问题是OneDrive没有上传长名称文件。
我已经解决了此问题,只需复制项目文件夹,然后使用USB将其粘贴到新笔记本电脑中即可。
我希望这可以帮助
答案 5 :(得分:0)
将项目的文件夹从根目录移到几个级别的文件夹中。例如桌面和瞧。
答案 6 :(得分:0)
就我而言,我首先尝试使用 Manage Nuget Packages for Solutions
安装软件包,但出现此错误。然后,我尝试使用 Package Manager Console
安装相同的软件包,效果很好。我再次卸载了该软件包,并尝试使用 Manage Nuget Packages for Solutions
进行安装,这一次它也能正常工作。
答案 7 :(得分:0)
尝试从File->Close Solution
关闭解决方案,然后再次打开它。
对于我的情况,卸载,安装甚至更新NuGet软件包,除了重新打开(有时您也可以再次关闭并打开Visual Studio)之外,什么都没有起作用。