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

发布Asp.Net Core+Angular应用时wwwroot出现多余文件夹的技术问询

解决ASP.NET Core集成Angular发布时wwwroot多余文件夹问题

你的判断完全正确,问题就出在这段csproj配置代码里。Angular构建完成后,产物默认会存放在$(SpaRoot)dist/[你的Angular项目名]目录下,当前配置中使用的%(RecursiveDir)会完整保留这个子目录层级,导致发布后wwwroot下多出一层不必要的文件夹。

要解决这个问题,只需要修改RelativePath的配置,去掉多余的第一层目录即可。下面是两种可行的修改方案:

方案一:移除递归目录的第一层

通过MSBuild的字符串处理函数,删除%(RecursiveDir)中的第一级目录:

<!--Include the newly-built files in the publish output-->
<ItemGroup>
  <DistFiles Include="$(SpaRoot)dist\**; $(SpaRoot)dist-server\**" />
  <ResolvedFileToPublish Include="@(DistFiles->'%(FullPath)')" Exclude="@(ResolvedFileToPublish)">
    <RelativePath>wwwroot\%(DistFiles.RecursiveDir.Remove(0, DistFiles.RecursiveDir.IndexOf('\') + 1))%(FileName)%(Extension)</RelativePath>
    <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
    <ExcludeFromSingleFile>true</ExcludeFromSingleFile>
  </ResolvedFileToPublish>
</ItemGroup>

方案二:直接替换路径前缀

直接移除$(SpaRoot)dist\前缀,保留文件在子目录中的相对路径:

<!--Include the newly-built files in the publish output-->
<ItemGroup>
  <DistFiles Include="$(SpaRoot)dist\**; $(SpaRoot)dist-server\**" />
  <ResolvedFileToPublish Include="@(DistFiles->'%(FullPath)')" Exclude="@(ResolvedFileToPublish)">
    <RelativePath>wwwroot\@(DistFiles->Replace('$(SpaRoot)dist\', ''))</RelativePath>
    <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
    <ExcludeFromSingleFile>true</ExcludeFromSingleFile>
  </ResolvedFileToPublish>
</ItemGroup>

两种方案都能实现将Angular dist子文件夹内的内容直接部署到wwwroot根目录,你可以根据自己的偏好选择其中一种。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 19:31:22