You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core迁移后多Exe/WinExe项目配置文件异常删除问题咨询

问题分析与根本解决方案

核心原因定位

这个问题的本质大概率是GUI项目与CLI项目的输出目录(OutputPath)设置为同一路径,触发了MSBuild Rebuild目标的默认行为:

  • 执行解决方案级Rebuild时,每个项目会依次执行自身的Clean目标,再执行Build目标。如果两个项目输出到同一目录,CLI项目执行Clean时会清空该目录下的所有文件(包括GUI项目刚生成的*.deps.json和*.runtimeconfig.json)。
  • 而先执行解决方案级Clean再执行Build时,Clean会一次性清空所有项目输出目录,之后Build按依赖顺序执行(GUI先构建生成文件,CLI构建仅生成自身文件,不会再触发Clean),因此不会出现文件被删除的情况。

根本解决方案

方案1:分离两个入口项目的输出目录

这是最直接且推荐的方案,彻底避免输出路径冲突:

  • 右键GUI项目 → 属性 → 生成 → 输出 → 修改“输出路径”,例如从默认的bin\$(Configuration)\$(TargetFramework)\改为bin\$(Configuration)\$(TargetFramework)\GUI\
  • 右键CLI项目 → 属性 → 生成 → 输出 → 修改“输出路径”,例如改为bin\$(Configuration)\$(TargetFramework)\CLI\
  • 保存设置后,重新执行Rebuild验证。

方案2:自定义MSBuild Clean目标,避免删除非自身文件

如果因需求必须共用输出目录,可以修改CLI项目的MSBuild配置,让Clean仅删除自身生成的文件:

  1. 在CLI项目的.csproj文件中添加以下配置:
<Target Name="CustomClean" BeforeTargets="Clean">
  <!-- 仅删除CLI项目自身的输出文件 -->
  <Delete Files="$(OutputPath)$(AssemblyName).*" />
  <Delete Files="$(OutputPath)dotnet-$(AssemblyName).*" Condition="$(UseAppHost) == true" />
</Target>
<!-- 禁用默认的目录级Clean -->
<PropertyGroup>
  <SkipDefaultClean>true</SkipDefaultClean>
</PropertyGroup>
  1. 保存后重新Rebuild解决方案,CLI项目的Clean步骤只会删除自身的输出文件,不会影响GUI项目的文件。

验证方法

  • 执行解决方案级Rebuild,检查GUI项目的*.deps.json和*.runtimeconfig.json是否保留
  • 运行GUI和CLI项目,确认功能正常,依赖加载无异常

内容的提问来源于stack exchange,提问作者tlivaja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 08:56:04