VS Code运行C#报Unable to copy obj/file MSB3027错误如何解决
问题描述
我的代码示例如下:
internal class NewBaseType { private static void Main(string[] args) { Console.WriteLine("enter first word"); string v = Console.ReadLine(); Console.WriteLine("enter second word"); string w = Console.ReadLine(); Console.WriteLine("Result: " + v + " " + w); } }
这段代码在各类在线C#运行平台中都可以正常执行。
但在Visual Studio Code中运行时出现如下错误:
Unable to copy obj
Unable to copy file
编译错误详情:
[{ "resource": "/c:/Program Files/dotnet/sdk/6.0.300/Microsoft.Common.CurrentVersion.targets", "owner": "msCompile", "code": "MSB3027", "severity": 8, "message": "Could not copy \"obj", "startLineNumber": 4632, "startColumn": 5, "endLineNumber": 4632, "endColumn": 5 }]
尝试运行代码时还会弹出如下提示:
Errors exists after running preLaunchTask 'build'
Debug Anyway / Show errors / Abort
故障原因与修复方案
MSB3027错误的核心原因是生成过程中无法将obj目录下的中间编译文件复制到输出路径,按优先级尝试以下修复方案即可:
- 残留进程锁文件:上一次调试启动的
dotnet进程没有正常退出,持续占用编译生成的文件。打开任务管理器,找到所有名为dotnet的进程全部结束,重新运行项目即可。 - 目录权限不足:如果项目存放在C盘根目录、
Program Files等系统受保护路径下,dotnet没有足够写入权限会触发该错误。将整个项目文件夹移动到当前用户的桌面、文档等拥有完全读写权限的目录,重新打开后运行。 - 编译缓存损坏:关闭VS Code,手动删除项目根目录下的
bin和obj两个缓存文件夹,重新打开VS Code后会自动重新生成所需的缓存文件。 - 安全软件锁定:部分杀毒软件、系统防护工具会在编译生成exe/dll后立刻扫描文件,短时间内锁定文件导致复制失败,可以将项目目录加入安全软件的信任白名单。
- 扩展版本兼容问题:如果上述方案都无效,检查VS Code的C#扩展是否为最新版本,旧版本OmniSharp组件存在偶发的文件锁兼容bug,更新扩展后重启VS Code即可。
内容的提问来源于stack exchange,提问作者Mykhaylo Petyakh
相关产品推荐
相关产品推荐

