" FullPath无法应用" VS2015 CTP6中嵌套node_modules的错误

时间:2015-03-31 13:30:28

标签: npm visual-studio-2015 asp.net-core-mvc

我正在使用Visual Studio 2015 CTP6中的MVC6 + Aurelia项目,并且遇到了一些有趣的事情。

我的node_modules默认位于项目根目录中,一切正常。但是,我希望保持源树更有条理,并将node_modulesjspm_modules和相关内容移动到子文件夹 - 例如。 MyApp\client\node_modules等。

但是现在Visual Studio停止加载项目。这是“VsProjectFault.failure.txt”中的例外:

(Inner Exception #1) System.InvalidOperationException: The item metadata "%(FullPath)" cannot be applied to the path "client\node_modules\conventional-changelog\node_modules\lodash.assign\node_modules\lodash._basecreatecallback\node_modules\lodash.bind\node_modules\lodash._createwrapper\node_modules\lodash._basecreatewrapper\node_modules\". C:\Work\xxxxxxxxxx\xxxxxxxxxx.xxx\src\client\node_modules\conventional-changelog\node_modules\lodash.assign\node_modules\lodash._basecreatecallback\node_modules\lodash.bind\node_modules\lodash._createwrapper\node_modules\lodash._basecreatewrapper\node_modules\
   at Microsoft.Build.Shared.ErrorUtilities.ThrowInvalidOperation(String resourceName, Object[] args)
   at Microsoft.Build.Shared.ErrorUtilities.VerifyThrowInvalidOperation(Boolean condition, String resourceName, Object arg0, Object arg1, Object arg2)
   at Microsoft.Build.Shared.FileUtilities.ItemSpecModifiers.GetItemSpecModifier(String currentDirectory, String itemSpec, String definingProjectEscaped, String modifier, String& fullPath)
   ...
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.VisualStudio.ProjectSystem.Utilities.DataflowExtensions.<>c__DisplayClass37`2.<<CreateSelfFilteringTransformBlock>b__38>d__0.MoveNext()

显然问题是node_modules递归路径太长 - 节点跟踪器中有bug #6960

  

Node需要一种无限的,递归嵌套的替代方法   Windows上的node_modules文件夹。大多数Windows工具,实用程序和   shell无法处理超过260个字符的文件和文件夹路径   至多。

......对我来说似乎是closed as won't fix

  

Node不会改变,所以这不是一个Node问题。该   问题不在于模块加载语义,而在于模块   安装语义。 (这两者是相关的,但不完全相同。)

但后来我不明白项目首先是如何加载的,因为即使node_modules位于项目根目录下,某些路径肯定超过260个符号!

在配置中是否有一些设置或某些东西可以帮助Visual Studio 2015加载node_modules项目,这是怎么回事?

5 个答案:

答案 0 :(得分:4)

http://bstruthers.com/weblog/2013/02/06/Cannot_evaluate_the_item_metadata_FullPath/

这是因为VS中文件路径中的字符限制已经越过。复制根文件夹中的文件夹并尝试。

答案 1 :(得分:3)

我设法通过使用组策略编辑器启用 Win32长路径策略,在Windows 10开发计算机中修复此问题。以下是必需的步骤(取决于您是否安装了周年纪念更新):

周年纪念日更新

如果您在14352和RTM 1607(又名“周年纪念更新”)之间运行Windows 10版本,则需要执行以下操作:

  • Windows Key并手动输入gpedit.msc,然后点击Enter键,启动组策略编辑器
  • 导航至本地计算机政策&gt; 计算机配置&gt; 管理模板&gt; 系统&gt; 文件系统&gt;的 NTFS
  • 找到启用NTFS长路径选项,然后单击启用它。

作为替代方案,您还可以通过执行以下注册表命令来获得相同的结果:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\FileSystem]
"LongPathsEnabled"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem]
"LongPathsEnabled"=dword:00000001

周年纪念日更新后

如果您正在运行周年纪念日更新Windows 10版本(RTM 1067或更新版本),则需要使用以下内容:

  • Windows Key并手动输入gpedit.msc,然后点击Enter键,启动组策略编辑器
  • 导航至本地计算机政策&gt; 计算机配置&gt; 管理模板&gt; 系统&gt;的文件系统
  • 找到Enable Win32 long paths选项,然后单击启用它。

如果您需要其他详细信息,还可以查看我在该主题上撰写的this blog post

答案 2 :(得分:0)

VS2015 / project.json Build + VS2017 / CSProj build

http://dan.clarke.name/2017/02/including-excluding-files-from-build-with-vs2017-and-net-core/

只需更改为(#34;项目&#34;标记内):

paste0(names(df_noNA)[max.col(df_noNA == 1)], "==1")
#[1] "a==1" "a==1" "b==1" "b==1" "c==1" "c==1"

答案 3 :(得分:0)

我发现它,您可以将解决方案文件移动到项目所在的文件夹中。该错误是由于Windows具有限制执行路径中提供的字符数的路径策略而引起的。

client\node_modules\conventional-changelog\node_modules\lodash.assign\node_modules\lodash._basecreatecallback\node_modules\lodash.bind\node_modules\lodash._createwrapper\node_modules\lodash._basecreatewrapper\node_modules\". C:\Work\xxxxxxxxxx\xxxxxxxxxx.xxx\src\client\node_modules\conventional-changelog\node_modules\lodash.assign\node_modules\lodash._basecreatecallback\node_modules\lodash.bind\node_modules\lodash._createwrapper\node_modules\lodash._basecreatewrapper\node_modules\

只需将项目文件(包含所有包的整个解决方案)移动到Work / xxxx文件夹,这样就可以解决它。

答案 4 :(得分:0)

看起来你的项目超过了MAX_PATH, 您可以尝试将项目移动到更短的路径(例如c:\ src) 有关详细信息,请查看here