首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“进程无法访问文件'Default.rd.xml‘,因为它正在被另一个进程使用。”浅谈AppVeyor CI

“进程无法访问文件'Default.rd.xml‘,因为它正在被另一个进程使用。”浅谈AppVeyor CI
EN

Stack Overflow用户
提问于 2018-02-13 16:12:26
回答 1查看 177关注 0票数 1

我正在cordova-windows (https://github.com/apache/cordova-windows)上做一些工作,它使用AppVeyor在Windows上进行测试。缺少的东西之一是用VisualStudio2017进行的测试(以前只使用VS2015进行测试)。所以我把它们加进去,效果就像个魅力--大部分都是。

不幸的是,我们现在有一个非常奇怪的测试失败:https://ci.appveyor.com/project/ApacheSoftwareFoundation/cordova-windows/build/1.0.458

代码语言:javascript
复制
Started
Creating Cordova Windows Project:
    Path: testcreate 応用
    Namespace: com.test.app
    Name: 応用
Windows project created with cordova-windows@5.1.0-dev
Building project: C:\projects\cordova-windows\testcreate 応用\CordovaApp.Windows10.jsproj
    Configuration : release
    Platform      : x64
  Patching 10 in prebuild event...
  Injected base.js reference to the www/index.html
  Removing /( *)(<script\s+(?:type="text\/javascript"\s+)?src="\/\/Microsoft.WinJS.2.0\/js\/base.js">\s*<\/script>)(\s*)/ from www/index.html
  Removing /( *)(<script\s+(?:type="text\/javascript"\s+)?src="\/\/Microsoft.Phone.WinJS.2.1\/js\/base.js">\s*<\/script>)(\s*)/ from www/index.html
  CordovaApp.Windows10 -> C:\projects\cordova-windows\testcreate ??\build\windows\release\x64\win10\CordovaApp.Windows10_1.0.0.0_x64.appx
  CordovaApp.Windows10 -> C:\projects\cordova-windows\testcreate ??\build\windows\release\x64\win10\Upload\CordovaApp.Windows10_1.0.0.0_x64.appx
  CordovaApp.Windows10 -> C:\projects\cordova-windows\testcreate ??\AppPackages\CordovaApp.Windows10_1.0.0.0_Test\CordovaApp.Windows10_1.0.0.0_x64.appxbundle
  CordovaApp.Windows10 -> C:\projects\cordova-windows\testcreate ??\AppPackages\CordovaApp.Windows10_1.0.0.0\CordovaApp.Windows10_1.0.0.0_x64.appxbundle
  CordovaApp.Windows10 -> C:\projects\cordova-windows\testcreate ??\AppPackages\CordovaApp.Windows10_1.0.0.0_x64_bundle.appxupload
  Your package has been successfully created.
Building project: C:\projects\cordova-windows\testcreate 応用\CordovaApp.Windows10.jsproj
    Configuration : release
    Platform      : x86
  Patching 10 in prebuild event...
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\AppxPackage\Microsoft.AppXPackage.Targets(2975,5): error MSB3231: Unable to remove directory "build\windows\bld\PackageUploadLayout\". The process cannot access the file 'Default.rd.xml' because it is being used by another process. [C:\projects\cordova-windows\testcreate ??\CordovaApp.Windows10.jsproj]
C:\projects\cordova-windows\testcreate 応用\cordova\node_modules\q\q.js:155
                throw e;
                ^
Error: C:\Program Files (x86)\MSBuild\14.0\bin\msbuild.exe: Command failed with exit code 1
    at ChildProcess.whenDone (C:\projects\cordova-windows\testcreate 応用\cordova\node_modules\cordova-common\src\superspawn.js:169:23)
    at emitTwo (events.js:106:13)
    at ChildProcess.emit (events.js:191:7)
    at maybeClose (internal/child_process.js:920:16)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:230:5)

有关的部分是:

代码语言:javascript
复制
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\AppxPackage\Microsoft.AppXPackage.Targets(2975,5): error MSB3231: Unable to remove directory "build\windows\bld\PackageUploadLayout\". The process cannot access the file 'Default.rd.xml' because it is being used by another process. [C:\projects\cordova-windows\testcreate ??\CordovaApp.Windows10.jsproj]

当我在本地运行测试时,这种情况不会发生,这意味着我根本无法重现这里发生的事情。

知道什么进程可以阻止这个Default.rd.xml文件或build\windows\bld\PackageUploadLayout\吗?

如何在AppVeyor这样的CI环境中找到答案?

更新:

通过将/clp:Verbosity=normal添加到已执行的msbuild调用中,进行了进一步的研究。

它运行类似的msbuild调用3次(每个体系结构一次)。第一个成功,但在第二个失败发生。这是有意义的,因为在第一次迭代中,文件夹还不存在,它用输出:Directory "build\windows\bld\PackageUploadLayout\" doesn't exist. Skipping.确认了这一点。

那么,在失败之前的最后一个输出是Removing directory "build\windows\bld\PackageUploadLayout\".,它与我们在错误消息中得到的内容相匹配。但是,没有任何迹象表明移除不起作用。

超级奇怪:随着/clp:Verbosity=detailed添加到msbuild调用中,构建实际上就成功了!我的猜测是:因为输出需要时间,所以不管文件夹或文件上的锁是什么,都会释放它。

EN

回答 1

Stack Overflow用户

发布于 2018-02-13 21:05:15

这不是一个确切的答案,而是调查报告。只是没有足够的空间评论来描述它。以下是我所做的:

  • 分叉你的回购
  • 创建AppVeyor项目
  • 添加RDP
  • 与RDP连接
  • 安装普鲁蒙
  • 添加过滤器来监视pathbld\PackageUploadLayout\Properties\Default.rd.xml结尾的对象
  • 从CMD手动运行npm test

当同样的错误发生时,我看到如下:

我不知道为什么msbuild会这样失败。我打开了SHARING VIOLATION事件,切换到进程,并看到了以下内容:

吸引我注意的是msbuild版本是14,在Visual Studio 2017 image上应该是15。我们为特定场景安装了版本14,但默认情况是15 (运行where msbuild,您将看到C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSBuild.exe)。我不知道在您的脚本中设置了这个路径,但是我觉得如果您让它运行正确的msbuild版本,这可能会有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48771047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档