编译时报错csc.exe”已退出,代码为 -1073741819

qq_29387613 2026-03-19 08:45:23

“csc.exe”已退出,代码为 -1073741819。   有没有大哥知道的啊    公司电脑   有奇安信   

...全文
1062 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
AI向善 09-13 11:41
  • 打赏
  • 举报
回复

-1073741819 换成十六进制就是 0xC0000005,STATUS_ACCESS_VIOLATION。这个码不是 C# 编译器自己报的,是 csc.exe 这个进程在运行过程中被系统干掉了,MSBuild 只能把退出码原样抛出来,所以你在输出里看不到任何语法或引用错误。

你说是公司电脑、装了奇安信,我先按「终端安全软件和 Roslyn 编译器冲突」这条线给你排查思路。csc.exe 编译时会频繁申请可写可执行的内存页,EDR 这类软件恰好会在这批页上挂钩子做行为拦截,一边写一边被改,csc 就访问违例退出了,退出码正好是 0xC0000005。

我建议按这个顺序定性,走两步就能分清问题在哪一层。

第一步,脱离 IDE 复现。用 VS 自带的 Developer Command Prompt 跑 msbuild /t:Rebuild /v:diag,把完整的那条 csc 命令行捞出来,再手动执行一次。这一步能拿到真实报错,也能确认是编译器本身挂了,还是项目本身有问题。

第二步,最小对照。在同一个命令行里用 csc 编一个 Hello World。Hello World 也挂,就是环境问题,优先怀疑杀软;只有你的项目挂,就把注意力转到分析器和源生成器上,第三方 Source Generator 崩溃会把 csc 一起带走,表现完全一样,可以用 -p:RunAnalyzers=false 试一次。

定性之后再加信任区。把 VS 安装目录、.NET SDK 目录、%TEMP%,以及 Roslyn 目录下的 csc.exe 一起加进奇安信的信任区,把内存防护、程序防护临时调成观察模式验证一次。企业机器上这一步一般要让 IT 或安全同事来点。

如果一时改不了安全策略,可以装 NuGet 包 Microsoft.Net.Compilers.Toolset,让编译走包里的 Roslyn 而不是 VS 目录里那份。换位置之后就好了,等于反过来证实了上面的判断。

还有两个容易漏的点:机器上装过多个 VS 版本或预览版时,csc.exe 可能被解析到了另一套 SDK,/v:diag 的输出里能看到;另外 %TEMP% 被安全软件接管的情况也别放过,Roslyn 大量使用临时文件,写失败同样可能以这个退出码收场。

顺带说一句,网上那条「装 Microsoft.Net.Compilers.Toolset 就解决」的说法只覆盖了后面那一条,它治的是换了个编译器绕过钩子,不是根因。你这台有奇安信,我还是建议先按前两步定性再动手。

111,128

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧