必须在含tauri.conf.json的项目根目录创建cargo.toml并声明[workspace] members=["src-tauri"],再执行rust analyzer: reload workspace,否则rust analyzer无法识别src-tauri为crate,导致代码标红、跳转失效、类型推导中断。

VSCode 打开 Tauri 项目后 Rust 代码一片红、跳转失效、类型推导全断——不是插件没装对,而是 Rust Analyzer 根本没识别到 src-tauri 是一个 crate。必须让 VSCode 在含 tauri.conf.json 的项目根目录下工作,并补上最小 Cargo.toml,否则整个后端开发体验直接崩掉。
为什么 Rust Analyzer 在 Tauri 项目里不工作
Rust Analyzer 只认 Cargo.toml 所在目录为 workspace 根。Tauri 项目默认把 src-tauri/Cargo.toml 当作后端 crate,但 VSCode 打开的是项目根(含 tauri.conf.json),而这个根目录通常没有 Cargo.toml。结果 Analyzer 退化成单文件模式,对 src-tauri 视而不见。
- 检查当前 VSCode 窗口打开的是否是含
tauri.conf.json和src-tauri的**最外层目录**,不是只打开了src-tauri子文件夹 - 在该目录下手动创建一个最小
Cargo.toml,内容仅需:[workspace] members = ["src-tauri"]
- 保存后按
Ctrl+Shift+P→ 输入Rust Analyzer: Reload Workspace,或直接重启 VSCode - 如果仍报错,检查
src-tauri/Cargo.toml是否有语法错误(如注释写在方括号后、空格缩进错位),Rust Analyzer 对格式非常敏感
Windows 下 cargo tauri dev 启动失败报 0xc0000135
这不是编译失败,是运行时找不到 Windows C++ 运行时 DLL,典型症状是命令行一闪而过,或弹窗报“无法启动此程序,因为计算机中丢失 VCRUNTIME140.dll”。Tauri 构建的二进制依赖系统级 MSVC CRT,不是 Rust 自带的。
- 必须安装 Microsoft C++ Build Tools 或完整 Visual Studio(带“使用 C++ 的桌面开发”工作负载)
- 仅装 WebView2 不够;仅装
rustup也不够;MSVC 和 Windows SDK 缺一不可 - 验证方式:在终端执行
cl /?,能输出帮助说明 MSVC 已就位;再运行rustc --version确认 Rust 能调用它 - 若已装但终端仍报错,需手动运行
vcvars64.bat(路径类似C:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools\VC\Auxiliary\Build\vcvars64.bat),或重启终端使环境变量生效
tauri dev 启动后前端改代码不热更新
热更新(HMR)根本不在 Tauri 控制范围内,它只是个壳。真正干活的是 Vite / Webpack,而 Tauri 只负责把 devPath 指向那个开发服务器。
- 检查
tauri.conf.json中build.devPath:Vite 项目应为"http://localhost:5173",不是"http://localhost:1420"或"src" - 确保你已**单独启动了前端服务**:比如
pnpm run dev(Vite)或npm run serve(Vue CLI),且端口与devPath完全一致 - 不要直接双击
target/debug/xxx.exe—— 这绕过所有开发服务器,自然没 HMR,也看不到console.log - 若用 Vite,确认
vite.config.ts中未禁用server.hmr,且server.host设为"localhost"或"0.0.0.0"(避免跨域拦截)
rust-analyzer 提示 “expected struct, found enum”
常见于调用 tauri::api::dialog::ask() 等返回 Result<bool _></bool> 的函数时,rust-analyzer 在宏展开和泛型上下文中误判类型,尤其在 #[tauri::command] 函数体内。
- 避免写
if ask() { }这类隐式解包,先显式绑定:let res: Result<bool _> = ask();</bool>
- 避免在
#[tauri::command]函数内直接解构复杂嵌套的Result或Option,先赋值再判断 - 升级
rust-analyzer插件到 v2024.6.17+,旧版对 Tauri 的 proc-macro 支持较弱,类型提示常断掉
最易被忽略的一点:Tauri 的 Rust 部分和前端部分是两个独立进程,VSCode 调试器默认只连其中一个。想同时断点前后端,必须手动配置 .vscode/launch.json 并启用 DAPv4 协议,否则你改了 Rust 代码却看不到前端响应,或前端断点命中了但后端日志压根没打出来。











