dotnet pack命令报错MSB1003且未输出到指定nupkgs目录如何解决
问题修复方案
根本原因
CommandUtility.runCommand 每次调用都会启动独立的系统子进程,前一次调用中执行的 cd 目录切换仅对当次进程生效,第二次调用 dotnet pack 时,子进程的工作目录仍为程序的默认启动目录,因此无法找到目标路径下的 .csproj 文件,也不会将生成的包输出到指定的 nupkgs 目录。你看到的 bin/Debug 下的包,是 dotnet pack 找不到指定工作目录时,fallback 到默认编译输出路径的结果。
修复方法
你可以选择以下任意一种方案解决:
- 方案1:合并命令到同一次进程调用
将目录切换、文件夹创建、打包命令合并为同一次runCommand调用,保证路径切换全程生效:// 加入-p参数避免nupkgs目录已存在时mkdir报错 CommandUtility.runCommand($"cd {templateGitPath} && mkdir -p nupkgs && dotnet pack --no-build --output nupkgs"); - 方案2:直接指定命令的工作目录(更稳定,推荐)
绝大多数命令执行工具都支持设置子进程的工作目录参数,不需要手动写cd命令切换,也能避免跨平台路径兼容问题:// 优先用代码API创建目录,比调用命令行更稳定 string nupkgDir = Path.Combine(templateGitPath, "nupkgs"); Directory.CreateDirectory(nupkgDir); // 执行打包时直接指定工作目录为项目根路径 CommandUtility.runCommand("dotnet pack --no-build --output nupkgs", workingDirectory: templateGitPath);
如果调整后仍然有路径歧义,可以直接在打包命令中指定 .csproj 路径和输出目录的绝对路径,彻底规避工作目录识别问题:dotnet pack 你的项目.csproj绝对路径 --no-build --output 你的nupkgs目录绝对路径
内容的提问来源于stack exchange,提问作者Kalpani
相关产品推荐
相关产品推荐

