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

如何在.NET Blazor Server发布后保留目录结构删除UserRepository下JSON文件

解决Blazor Server发布时保留目录结构但删除指定文件的问题

问题背景

项目目录结构如下:

\App_Data\Config\
\App_Data\SystemRepository\
\App_Data\UserRepository\

其中UserRepository包含多级子文件夹及JSON文件,需求是发布到文件夹时:

  • 保留UserRepository的完整子目录结构
  • 删除其中所有JSON文件

之前尝试在csproj中添加如下配置,但会直接删除整个UserRepository文件夹:

<Target Name="RemoveJsonFilesAfterPublish" AfterTargets="Publish">
    <ItemGroup>
        <JsonFilesToDelete Include="$(PublishDir)App_Data\UserRepository\**\*.json" />
    </ItemGroup>
    <Delete Files="@(JsonFilesToDelete)" />
</Target>

解决方案

方案1:发布后清理文件并保留目录

在csproj中添加以下Target,先确保目录结构被保留,再删除JSON文件:

<Target Name="CleanUserRepositoryJsonFiles" AfterTargets="Publish">
    <!-- 收集UserRepository下所有非JSON的项,提取目录路径 -->
    <ItemGroup>
        <UserRepoDirs Include="$(PublishDir)App_Data\UserRepository\**\*" 
                      Exclude="$(PublishDir)App_Data\UserRepository\**\*.json" />
    </ItemGroup>
    <!-- 显式创建所有需要保留的子目录,防止空目录被MSBuild自动清理 -->
    <MakeDir Directories="@(UserRepoDirs->'%(RootDir)%(Directory)')" />
    
    <!-- 删除所有JSON文件 -->
    <ItemGroup>
        <JsonFilesToDelete Include="$(PublishDir)App_Data\UserRepository\**\*.json" />
    </ItemGroup>
    <Delete Files="@(JsonFilesToDelete)" />
</Target>

原因说明:之前的配置删除JSON文件后,MSBuild会自动清理空目录,导致整个UserRepository被删除。此方案先通过MakeDir强制创建所有子目录,再删除文件,确保结构完整。

方案2:发布阶段直接排除JSON文件(更高效)

不需要在发布后删除,直接在发布时不复制JSON文件,同时保留目录结构:

<ItemGroup>
    <!-- 排除UserRepository下的所有JSON文件,不参与发布 -->
    <Content Remove="App_Data\UserRepository\**\*.json" />
    <!-- 显式包含所有子目录,确保发布时保留目录结构 -->
    <Content Include="App_Data\UserRepository\**\*" 
             Exclude="App_Data\UserRepository\**\*.json" />
</ItemGroup>

这种方式从根源上避免JSON文件被发布,同时保证目录结构被保留,流程更简洁高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 21:12:33