VS2015 CTP6中嵌套node_modules出现“FullPath无法应用”错误

问题描述 投票:0回答:6

我正在 Visual Studio 2015 CTP6 中尝试 MVC6 + Aurelia 项目,并发现了一些有趣的东西。

我的

node_modules
默认位于项目根目录中,一切正常。但是,我想让源树更有条理,并将
node_modules
jspm_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 个字符的文件和文件夹路径 最多。

...这对我来说似乎已关闭,无法解决

Node 不会改变,所以这并不是真正的 Node 问题。这 问题不在于模块加载语义,而在于模块 安装语义。 (两者有联系,但不相同。)

但是我不明白该项目首先是如何加载的,因为即使

node_modules
位于项目根目录下,某些路径肯定超过260个符号!

配置中是否有一些设置或其他设置可以帮助 Visual Studio 2015 使用

node_modules
加载项目,这是怎么回事?

npm visual-studio-2015 asp.net-core-mvc
6个回答
5
投票

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

周年更新之前

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

  • Windows Key 并手动键入
    gpedit.msc
    ,然后按
    Enter
    键启动
    组策略编辑器
  • 导航到 本地计算机策略 > 计算机配置 > 管理模板 > 系统 > 文件系统 > 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
    键启动
    组策略编辑器
  • 导航到 本地计算机策略 > 计算机配置 > 管理模板 > 系统 > 文件系统
  • 找到
    Enable Win32 long paths
    选项并单击启用它。

如果您需要更多详细信息,您还可以查看这篇博文我就该主题撰写。


4
投票

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

这是因为VS中的文件路径字符数超出了限制。将文件夹复制到根文件夹中并尝试。


0
投票

VS2015/project.json 构建 + VS2017/CSProj 构建

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

只需更改为(在“Project”标签内):

<ItemGroup>
    <Compile Remove="[ClientAppRoot]\node_modules\**" />
    <Content Remove="[ClientAppRoot]\node_modules\**" />
    <EmbeddedResource Remove="[ClientAppRoot]\node_modules\**" />
    <None Remove="[ClientAppRoot]\node_modules\**" />
</ItemGroup>

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 文件夹即可解决问题。


0
投票

看起来你的项目超出了MAX_PATH, 您可以尝试将项目移至较短的路径(例如 c:\src) 欲了解更多详情,请查看这里


0
投票

为了解决此问题,我将解决方案移至 C:\ 驱动器。通过这样做,字符被缩短,并且重建项目后不再出现错误。

© www.soinside.com 2019 - 2024. All rights reserved.