VS Code运行C# Hello World出现MSB4018访问拒绝错误原因咨询
错误根因
你遇到的是.NET 6编译阶段的文件权限错误,核心触发点是CreateAppHost生成可执行宿主环节,无法访问路径C:\Users\insaf\OneDrive\Bureau\csharp\obj\Debug\net6.0\apphost.exe,抛出UnauthorizedAccessException拒绝访问异常。
从项目路径判断,90%以上的概率是项目存放在OneDrive同步目录导致:OneDrive的同步进程会在文件生成后立刻锁定读取上传,导致编译流程无法覆盖、删除已生成的apphost.exe文件。其余可能的触发原因包括:
- 上一次运行的程序进程未正常退出,后台持续占用apphost.exe文件
- 第三方杀毒软件/Windows Defender实时防护拦截了对该exe文件的修改操作
- 当前Windows账号对项目目录没有完整读写权限
修复步骤
按顺序尝试,执行到某一步问题解决即可停止:
- 直接将整个csharp项目文件夹移出OneDrive同步目录,比如放到
C:\code、C:\Users\insaf\source\repos这类纯本地、无同步程序监控的路径,重新用VS Code打开项目后运行即可。这是最彻底的解决方案,所有开发项目都不建议存放在同步盘目录下,同步进程的文件锁会反复触发各类编译、读写异常。 - 如果不想移动项目,先打开任务管理器,结束所有
dotnet.exe、和你项目同名的csharp.exe/apphost.exe进程,再手动删除项目根目录下的bin、obj两个缓存文件夹,重新执行编译运行。 - 临时暂停OneDrive同步、临时关闭杀毒软件实时防护后重试编译。
- 临时跳过exe宿主生成做验证:打开项目下的
csharp.csproj文件,在<PropertyGroup>节点中添加配置<UseAppHost>false</UseAppHost>,保存后重新运行。该配置会让dotnet run直接执行编译生成的dll文件,不会生成独立的apphost.exe,自然不会触发该文件权限问题,配置参考:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net6.0</TargetFramework> <UseAppHost>false</UseAppHost> </PropertyGroup> </Project>
补充说明:
<UseAppHost>false</UseAppHost>仅适合开发阶段临时验证,正式发布编译生成独立exe文件时需要移除该配置,否则不会输出可直接双击运行的exe文件。
内容的提问来源于stack exchange,提问作者ifcheprogrammer
相关产品推荐
相关产品推荐

