gpt4 book ai didi

nuget - Visual Studio 2017无法在.NET 4.7项目中安装nuget包

转载 作者:行者123 更新时间:2023-12-03 14:53:59 27 4
gpt4 key购买 nike

尝试将nuget包安装到标准.NET Framework 4.7项目中时出现以下错误:

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

我正在使用Visual Studio 2017 15.3.3 Enterprise(最新和最好的)。

鉴于这是我的软件包,因此我可以完全控制源代码。有趣的是,我以前使用过该程序包,但名称没有变化,但为此,我重新构建了该程序包以添加功能,现在遇到此错误。

更加有趣的是,我有来自相同库的程序包,具有相同的命名空间约定和更长的名称,它们的工作原理很好,并且完全没有问题地安装到了同一项目中。

我已经尝试过缩小包名称,缩小包本身内的类名称,清理构建目录,从nuget服务器清理软件包主目录(这是安装了最新nuget.server的本地服务器,否则可以正常工作),甚至清除有问题的项目的bin目录,清除所有“祖先”软件包的祖先的所有bin目录,清除软件包缓存,重新启动计算机并从头开始重建整个nuget软件包链,一切无济于事。一位MS MVP告诉我“他们已解决”。显然不是。

任何帮助在这里都将不胜感激,因为我不知所措,并且没有足够的想法尝试。

谢谢。

最佳答案

好,谢谢@danmosemsft,他建议深入研究SysInternals进程监视器。经过一段时间的摆弄后,我终于想出了如何将结果集缩小为仅文件 Activity 。我注意到的是,nuget工程师应该注意这一点:问题不是项目名称太长,而是nuget试图更新不再存在的软件包。为什么它消失了,这是一个未解之谜。我通常不在packages目录中,并且不要在packages.config文件中大惊小怪。我认为这可能与我耐心等待VS启动,加载所有好东西,然后允许我执行“管理NuGet软件包”(全部更新)有关。我记得曾经看到NUnit或FluentAssertions的更新,除了安装下一个版本(我相信该脚本)以外,它还希望执行一些其他文件 Activity 。不能肯定地说出来,因为第三方更新通常“很有效”,所以我没有给予太多关注。我没有看到NuGet的“完成”行,所以我认为这是我问题的根源。我没有等到VS稳定下来,而是将其推了一下(嘿,按钮响应了,所以应该不会有任何问题...)。

结果,packages目录绝对塞满了不属于该目录的旧内容。因此,我手动清理了所有碎片,手动清理了packages.config文件,重新启动了VS,等待它解决下来,执行了NuGet更新和中提琴!没问题-即使单个字符也没有更改任何祖先包名称。

那么,我从中得出什么结论呢?这是我的信念,实际上构建nuget和nuget.server的人员应该仔细研究抛出的错误,以至于我认为该错误不是路径太长的错误,而是“嘿,我找不到我期望的文件,所以文件名到处都是垃圾(现在可能太长了),所以我将抛出一个错误,指出它太长而退出”。似乎无法处理导致此特定问题的缺少的package / package目录

我通过确保所有程序包目录都清除了所有垃圾并从干净的源进行重建来解决了我的问题。我的问题现在解决了。

感谢大家的回应。

更新:尽管以上内容为解决方案做出了贡献,但这并不是答案。这是导致此问题的事件序列,它是最终解决方案。
该解决方案是在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包就好了,等等。

还是我想。当我需要向混合中添加一个新的(以前不是该解决方案的一部分)nuget软件包时,我收到了以上错误。事实证明,接收解决方案的新名称比VS接受的字符长几个字符-命名长度限制为STILL IN PLACE。

我最终是如何解决该问题的:在为此苦苦挣扎之后,我举起双手决定重新开始-真正的文件|新。因此,我从一个新的解决方案开始,其名称如下:
“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会接受它。只要目录加解决方案名称的总长度小于或等于106个字符,就没有问题。

令人讨厌的一点是,在一个位置创建解决方案并使它在各个方面都可以正常工作,将所述解决方案移动到另一个目录,仍然在各个方面都起作用(我还不需要添加任何新的nuget包),然后在移动后尝试将新的nuget包添加到混合中。这就是触发上述nuget错误的原因。

所以...最终的“修复”,使用一个较短的名称,因为尽管错误消息在说什么(以及MS MVP告诉/告诉我的内容),但似乎限制为106个字符。

关于nuget - Visual Studio 2017无法在.NET 4.7项目中安装nuget包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45972266/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com