我正在cordova-windows (https://github.com/apache/cordova-windows)上做一些工作,它使用AppVeyor在Windows上进行测试。缺少的东西之一是用VisualStudio2017进行的测试(以前只使用VS2015进行测试)。所以我把它们加进去,效果就像个魅力--大部分都是。
不幸的是,我们现在有一个非常奇怪的测试失败:https://ci.appveyor.com/project/ApacheSoftwareFoundation/cordova-windows/build/1.0.458
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)有关的部分是:
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调用中,构建实际上就成功了!我的猜测是:因为输出需要时间,所以不管文件夹或文件上的锁是什么,都会释放它。
发布于 2018-02-13 21:05:15
这不是一个确切的答案,而是调查报告。只是没有足够的空间评论来描述它。以下是我所做的:
path以bld\PackageUploadLayout\Properties\Default.rd.xml结尾的对象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版本,这可能会有所帮助。
https://stackoverflow.com/questions/48771047
复制相似问题