VS2015 Cordova MDAVSCLI:错误:EBUSY,资源繁忙或锁定的符号链接 [英] VS2015 Cordova MDAVSCLI : error : EBUSY, resource busy or locked symlink

查看:7221
本文介绍了VS2015 Cordova MDAVSCLI:错误:EBUSY,资源繁忙或锁定的符号链接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个解决方案结构,其中我使用一些项目符号链接,以允许在不同的解决方案之间轻松重用代码。



它完美无缺地工作VS2013 CTP3.1,但在VS2015我不断得到,间歇地,以下:

  MDAVSCLI:错误:EBUSY, locked'F:\Github\softwrench\softwrench.sw4.pae\offline_content\pae'
1> at error(native)
1> at Object.fs.symlinkSync(fs.js:848:18)
1> at cpdirSyncRecursive(C:\Users\rolim\AppData\Roaming\\\
pm\\\
ode_modules\vs-tac\\\
ode_modules\cordova\5.1.1\\\
ode_modules\cordova\\\
ode_modules\ cordova-lib\\\
ode_modules\shelljs\src\cp.js:76:10)
1> at cpdirSyncRecursive(C:\Users\rolim\AppData\Roaming\\\
pm\\\
ode_modules\vs-tac\\\
ode_modules\cordova\5.1.1\\\
ode_modules\cordova\\\
ode_modules\ cordova-lib\\\
ode_modules\shelljs\src\cp.js:73:7)
1>在C:\Users\rolim\AppData\Roaming\\\
pm\\\
ode_modules\vs-tac\\\
ode_modules\cordova\5.1.1\\\
ode_modules\cordova\\\
ode_modules\cordova- lib \\\
ode_modules\shelljs\src\cp.js:180:9
1> at Array.forEach(native)
1>在Object._cp(C:\Users\rolim\AppData\Roaming\\\
pm\\\
ode_modules\vs-tac\\\
ode_modules\cordova\5.1.1\\\
ode_modules\cordova\\\
ode_modules \cordova-lib\\\
ode_modules\shelljs\src\cp.js:157:11)
1>在Object.cp(C:\Users\rolim\AppData\Roaming\\\
pm\\\
ode_modules\vs-tac\\\
ode_modules\cordova\5.1.1\\\
ode_modules\cordova\\\
ode_modules \cordova-lib\\\
ode_modules\shelljs\src\common.js:186:23)
1>在android_parser.update_www(C:\Users\rolim\AppData\Roaming\\\
pm\\\
ode_modules\vs-tac\\\
ode_modules\cordova\5.1.1\\\
ode_modules\cordova\\\
ode_modules \cordova-lib\src\cordova\metadata\android_parser.js:316:11)
1>在C:\Users\rolim\AppData\Roaming\\\
pm\\\
ode_modules\vs-tac\\\
ode_modules\cordova\5.1.1\\\
ode_modules\cordova\\\
ode_modules\cordova- lib \src\cordova\prepare.js:96:20

并且似乎尝试处理符号链接,所以它看起来像一个错误:

  if(srcFileStat.isDirectory b $ b / *递归这个东西就回来了。 * / 
cpdirSyncRecursive(srcFile,destFile,opts);
} else if(srcFileStat.isSymbolicLink()){
var symlinkFull = fs.readlinkSync(srcFile);
76:fs.symlinkSync(symlinkFull,destFile,os.platform()===win32?junction:null);
} else {
/ *在这一点上,我们打了一个文件实际上值得复制...所以复制它。 * /
if(fs.existsSync(destFile)&&!opts.force){
common.log('skipping existing file:'+ files [i]);
} else {
copyFileSync(srcFile,destFile);
}
}

任何人都知道这里发生了什么? / p>

tks

解决方案

用于编辑cordova-lib项目的cp.js文件,对于第71行,使得符号链接具有与普通目录相同的处理:



因此:

  if(srcFileStat.isDirectory()){

成为:

  if(srcFileStat.isDirectory()|| srcFileStat.isSymbolicLink ){

不知道是否有任何影响,不是我迄今为止注意到的。

希望它帮助任何人


I have a solution structure in which I´m using some projects with symbolic links to allow an easy reuse of code among different solutions.

It was working flawlessly on VS2013 CTP3.1, but on VS2015 I keep getting ,intermittently, the following:

MDAVSCLI : error : EBUSY, resource busy or locked 'F:\Github\softwrench\softwrench.sw4.pae\offline_content\pae'
1>      at Error (native)
1>      at Object.fs.symlinkSync (fs.js:848:18)
1>      at cpdirSyncRecursive (C:\Users\rolim\AppData\Roaming\npm\node_modules\vs-tac\node_modules\cordova\5.1.1\node_modules\cordova\node_modules\cordova-lib\node_modules\shelljs\src\cp.js:76:10)
1>      at cpdirSyncRecursive (C:\Users\rolim\AppData\Roaming\npm\node_modules\vs-tac\node_modules\cordova\5.1.1\node_modules\cordova\node_modules\cordova-lib\node_modules\shelljs\src\cp.js:73:7)
1>      at C:\Users\rolim\AppData\Roaming\npm\node_modules\vs-tac\node_modules\cordova\5.1.1\node_modules\cordova\node_modules\cordova-lib\node_modules\shelljs\src\cp.js:180:9
1>      at Array.forEach (native)
1>      at Object._cp (C:\Users\rolim\AppData\Roaming\npm\node_modules\vs-tac\node_modules\cordova\5.1.1\node_modules\cordova\node_modules\cordova-lib\node_modules\shelljs\src\cp.js:157:11)
1>      at Object.cp (C:\Users\rolim\AppData\Roaming\npm\node_modules\vs-tac\node_modules\cordova\5.1.1\node_modules\cordova\node_modules\cordova-lib\node_modules\shelljs\src\common.js:186:23)
1>      at android_parser.update_www (C:\Users\rolim\AppData\Roaming\npm\node_modules\vs-tac\node_modules\cordova\5.1.1\node_modules\cordova\node_modules\cordova-lib\src\cordova\metadata\android_parser.js:316:11)
1>      at C:\Users\rolim\AppData\Roaming\npm\node_modules\vs-tac\node_modules\cordova\5.1.1\node_modules\cordova\node_modules\cordova-lib\src\cordova\prepare.js:96:20

I looked at the code and it seems to try to handle symlinks, so It seems like a bug:

 if (srcFileStat.isDirectory()) {
  /* recursion this thing right on back. */
  cpdirSyncRecursive(srcFile, destFile, opts);
} else if (srcFileStat.isSymbolicLink()) {
  var symlinkFull = fs.readlinkSync(srcFile);
 76: fs.symlinkSync(symlinkFull, destFile, os.platform() === "win32" ? "junction" : null);
} else {
  /* At this point, we've hit a file actually worth copying... so copy it on over. */
  if (fs.existsSync(destFile) && !opts.force) {
    common.log('skipping existing file: ' + files[i]);
  } else {
    copyFileSync(srcFile, destFile);
  }
}

Anyone would know what´s going on here?

tks

解决方案

In the end the only solution I could come up with was to edit the cp.js file of the cordova-lib project, for line 71, so that symlinks got the same handling as ordinary directories:

So:

if (srcFileStat.isDirectory()) {

Became:

if (srcFileStat.isDirectory() || srcFileStat.isSymbolicLink()) {

Not sure if any implications, not that I´ve noticed so far.

Hope it helps anyone else

这篇关于VS2015 Cordova MDAVSCLI:错误:EBUSY,资源繁忙或锁定的符号链接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆