我正在使用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个字符的文件和文件夹路径 至多。
......对我来说似乎是closed as won't fix:
Node不会改变,所以这不是一个Node问题。该 问题不在于模块加载语义,而在于模块 安装语义。 (这两者是相关的,但不完全相同。)
但后来我不明白项目首先是如何加载的,因为即使node_modules
位于项目根目录下,某些路径肯定超过260个符号!
在配置中是否有一些设置或某些东西可以帮助Visual Studio 2015加载node_modules
项目,这是怎么回事?
答案 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
键,启动组策略编辑器。作为替代方案,您还可以通过执行以下注册表命令来获得相同的结果:
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
选项,然后单击启用它。如果您需要其他详细信息,还可以查看我在该主题上撰写的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