Github Action+Rsync部署ASP.NET Core 7应用时wwwroot文件未同步
解决ASP.NET Core 7 wwwroot文件未复制到Release目录的问题
你遇到的是ASP.NET Core构建过程中静态文件复制的配置问题,以下两种方案可以解决:
方案1:修改项目文件(.csproj)全局配置
直接在你的ASP.NET Core项目的.csproj文件中添加以下配置,让wwwroot下的所有文件在构建时自动复制到输出目录:
<ItemGroup> <!-- 递归包含wwwroot下所有文件,仅复制较新的版本 --> <Content Include="wwwroot/**/*"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> </ItemGroup>
- 如果需要每次构建都强制复制所有文件,把
PreserveNewest改成Always即可。 - 这个配置会覆盖单个文件的属性设置,无需逐个修改文件的“复制到输出目录”属性。
方案2:改用dotnet publish命令(更适合部署场景)
你的GitHub Action目前使用dotnet build,但build命令仅完成编译,不会自动整理部署所需的全部文件(包括静态文件)。改用dotnet publish会生成完整的部署包,自动包含wwwroot文件,修改后的Action步骤如下:
jobs: build-and-deploy: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v1 - name: Setup .NET Core uses: actions/setup-dotnet@v1 with: dotnet-version: 7.x - name: Publish app # 发布到指定目录,--output 指定输出路径 run: dotnet publish --configuration Release --output ./publish - name: Deploy to server id: deploy uses: Pendect/action-rsyncer@v1.1.0 env: DEPLOY_KEY: ${{secrets.SSH_PRIVATE_KEY}} with: flags: '-avzr --delete' options: '' ssh_options: '' src: './publish/' # 同步publish目录的内容 dest: '${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:/var/www/html'
dotnet publish会自动处理静态文件的复制,无需额外配置.csproj,是ASP.NET Core部署的标准做法。
内容的提问来源于stack exchange,提问作者Zippy
相关产品推荐
相关产品推荐

