为什么 `cargo build` 不能在 VS Code 中编译 structopt-derive?

Why can't `cargo build` compile structopt-derive in VS Code?

我正在尝试使用 Rust 和出色的 structopt crate 编写一个小型 CLI 应用程序。

当我使用 Notepad++(编写代码)和 Conemu(运行 Cargo 命令)时,一切正常。

但是,当我将 VS Code 与 Rust plugin(或 E​​clipse Corrosion)一起使用时,cargo build 命令失败并出现此错误

   Compiling atty v0.2.10
   Compiling clap v2.31.2
   Compiling structopt-derive v0.2.10
error: linking with `C:\Program Files (x86)\Microsoft Visual Studio17\BuildTools\VC\Tools\MSVC.14.26428\bin\HostX64\x64\link.exe` failed: exit code: 1104
  |
  = note: "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Tools\MSVC\14.14.26428\bin\HostX64\x64\link.exe" "/NOLOGO" "/NXCOMPAT" "/LIBPATH:C:\Users\nicolas-delsaux\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib" "C:\Users\nicolas-delsaux\Documents\open-source\rrss2imap\target\debug\deps\structopt_derive-406f571196e63046.structopt_derive0.rcgu.o" "C:\Users\nicolas-delsaux\Documents\open-source\rrss2imap\target\debug\deps\structopt_derive-406f571196e63046.structopt_derive1.rcgu.o" "C:\Users\nicolas-delsaux\Documents\open-source\rrss2imap\target\debug\deps\structopt_derive-406f571196e63046.structopt_derive10.rcgu.o" "C:\Users\nicolas-delsaux\Documents\open-source\rrss2imap\target\debug\deps\structopt_derive-406f571196e63046.structopt_derive11.rcgu.o" "C:\Users\nicolas-delsaux\Documents\open-source\rrss2imap\target\debug\deps\structopt_derive-406f571196e63046.structopt_derive12.rcgu.o" "C:\Users\nicolas-delsaux\Documents\open-source\rrss2imap\target\debug\deps\structopt_derive-406f571196e63046.structopt_derive13.rcgu.o" "C:\Users\nicolas-delsaux\Documents\open-source\rrss2imap\target\debug\deps\structopt_derive-406f571196e63046.structopt_derive14.rcgu.o" "C:\Users\nicolas-delsaux\Documents\open-source\rrss2imap\target\debug\deps\structopt_derive-406f571196e63046.structopt_derive15.rcgu.o" "C:\Users\nicolas-delsaux\Documents\open-source\rrss2imap\target\debug\deps\structopt_derive-406f571196e63046.structopt_derive2.rcgu.o" "C:\Users\nicolas-delsaux\Documents\open-source\rrss2imap\target\debug\deps\structopt_derive-406f571196e63046.structopt_derive3.rcgu.o" "C:\Users\nicolas-delsaux\Documents\open-source\rrss2imap\target\debug\deps\structopt_derive-406f571196e63046.structopt_derive4.rcgu.o" "C:\Users\nicolas-delsaux\Documents\open-source\rrss2imap\target\debug\deps\structopt_derive-406f571196e63046.structopt_derive5.rcgu.o" "C:\Users\nicolas-delsaux\Documents\open-source\rrss2imap\target\debug\deps\structopt_derive-406f571196e63046.structopt_derive6.rcgu.o" "C:\Users\nicolas-delsaux\Documents\open-source\rrss2imap\target\debug\deps\structopt_derive-406f571196e63046.structopt_derive7.rcgu.o" "C:\Users\nicolas-delsaux\Documents\open-source\rrss2imap\target\debug\deps\structopt_derive-406f571196e63046.structopt_derive8.rcgu.o" "C:\Users\nicolas-delsaux\Documents\open-source\rrss2imap\target\debug\deps\structopt_derive-406f571196e63046.structopt_derive9.rcgu.o" "/OUT:C:\Users\nicolas-delsaux\Documents\open-source\rrss2imap\target\debug\deps\structopt_derive-406f571196e63046.dll" "/DEF:C:\Users\NICOLA~1\AppData\Local\Temp\rustc.NMAPUPGalI4H\lib.def" "C:\Users\nicolas-delsaux\Documents\open-source\rrss2imap\target\debug\deps\structopt_derive-406f571196e63046.crate.metadata.rcgu.o" "C:\Users\nicolas-delsaux\Documents\open-source\rrss2imap\target\debug\deps\structopt_derive-406f571196e63046.crate.allocator.rcgu.o" "/OPT:REF,NOICF" "/DEBUG" "/NATVIS:C:\Users\nicolas-delsaux\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\etc\intrinsic.natvis" "/NATVIS:C:\Users\nicolas-delsaux\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\etc\liballoc.natvis" "/NATVIS:C:\Users\nicolas-delsaux\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\etc\libcore.natvis" "/LIBPATH:C:\Users\nicolas-delsaux\Documents\open-source\rrss2imap\target\debug\deps" "/LIBPATH:C:\Users\nicolas-delsaux\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib" "C:\Users\nicolas-delsaux\Documents\open-source\rrss2imap\target\debug\deps\libsyn-e2bf8da738ad52ef.rlib" "C:\Users\nicolas-delsaux\Documents\open-source\rrss2imap\target\debug\deps\libquote-90431d93ebae45fd.rlib" "C:\Users\nicolas-delsaux\Documents\open-source\rrss2imap\target\debug\deps\libproc_macro2-f91721dd8e02bb17.rlib" "C:\Users\nicolas-delsaux\Documents\open-source\rrss2imap\target\debug\deps\libunicode_xid-4611d062b1d773c0.rlib" "/LIBPATH:C:\Users\nicolas-delsaux\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib" "proc_macro-1f431d761952eacf.dll.lib" "/LIBPATH:C:\Users\nicolas-delsaux\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib" "syntax-c4a428491fc49b8f.dll.lib" "/LIBPATH:C:\Users\nicolas-delsaux\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib" "rustc_errors-5b01c9a7974f0222.dll.lib" "/LIBPATH:C:\Users\nicolas-delsaux\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib" "syntax_pos-09170bc016e0b11a.dll.lib" "/LIBPATH:C:\Users\nicolas-delsaux\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib" "rustc_data_structures-f974a5ad0e93670e.dll.lib" "/LIBPATH:C:\Users\nicolas-delsaux\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib" "serialize-2eb0aeb35010f869.dll.lib" "/LIBPATH:C:\Users\nicolas-delsaux\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib" "rustc_cratesio_shim-2e9a42f968785601.dll.lib" "/LIBPATH:C:\Users\nicolas-delsaux\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib" "std-81327c94ecbc69b1.dll.lib" "C:\Users\nicolas-delsaux\.rustup\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\libcompiler_builtins-e8d853735a158029.rlib" "opengl32.lib" "kernel32.lib" "setupapi.lib" "msimg32.lib" "credui.lib" "winspool.lib" "user32.lib" "gdi32.lib" "secur32.lib" "dbghelp.lib" "advapi32.lib" "advapi32.lib" "ws2_32.lib" "userenv.lib" "shell32.lib" "msvcrt.lib" "/DLL" "/IMPLIB:C:\Users\nicolas-delsaux\Documents\open-source\rrss2imap\target\debug\deps\structopt_derive-406f571196e63046.dll.lib"
  = note: LINK : fatal error LNK1104: impossible d'ouvrir le fichier 'C:\Users\nicolas-delsaux\Documents\open-source\rrss2imap\target\debug\deps\structopt_derive-406f571196e63046.dll'


error: aborting due to previous error

error: Could not compile `structopt-derive`.
warning: build failed, waiting for other jobs to finish...
error: build failed

似乎某些进程锁定了输出文件,但 LockHunter(我用来检测那种锁)没有检测到任何...

问题是什么?我可以做什么 - 除了使用 Notepad++ 编码 - 能够 运行 VS Code 中的 cargo 命令?

似乎是 RLS 中的错误:Windows: RLS keeping derive plugin DLLs opened prevents cargo build from working #802

Whenever the RLS is running for a crate, I can't do cargo build for that crate. It fails with errors like this:

[...]

Looking in Process Explorer, RLS has the derive plugin DLLs loaded. I assume this is what's causing cargo to fail, since it can't write to those files while they're loaded. Similarly, cargo clean fails:

[...]

If I close VSCode (and thus RLS), building with cargo build works fine again.

I assume this is Windows-specific due to its file exclusivity behavior. I think this started happening with a recent nightly (3/28?). I suppose this could've been caused by some change in cargo or rustc causing it to write to dlls which were already built or something.

因此解决方案应该非常简单:将 RLS 更新到其最新版本并查看已修复的错误!

而要更新 RLS,只需 rustup update