ASP.NET Core 2.1.0:Web Deploy发布IIS时自定义Identity UI Razor页面未部署问题
我之前在部署自定义Identity视图时也踩过类似的坑,结合经验给你几个排查和解决的方向:
确认自定义视图的位置是否正确
ASP.NET Core 2.1的Identity视图必须放在项目根目录下的Areas/Identity/Pages文件夹中,对应功能的视图要放在子文件夹里(比如登录视图是Areas/Identity/Pages/Account/Login.cshtml)。如果你的视图放在其他路径,发布工具会自动忽略它们,这是最常见的错误之一。验证.csproj中的文件包含配置
虽然你提到已经按文档添加了配置,但还是建议确认配置是否准确覆盖了所有自定义视图文件。正确的配置应该包含.cshtml和对应的代码后置文件:<ItemGroup> <Content Update="Areas\Identity\Pages\**\*.cshtml"> <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory> </Content> <Content Update="Areas\Identity\Pages\**\*.cshtml.cs"> <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory> </Content> </ItemGroup>这个配置的作用是告诉发布工具,把
Areas/Identity/Pages下所有的视图文件都复制到发布目录,PreserveNewest会保证最新的文件被覆盖。检查Web Deploy的发布设置
打开Visual Studio的发布配置面板:- 切换到“文件发布选项”,看看是否勾选了保留现有文件——如果勾选了,新添加的自定义视图可能不会被部署到服务器,建议临时取消勾选后重新发布测试。
- 点击“预览”按钮,查看即将发布的文件列表,确认你的自定义.cshtml文件是否在列表中。如果不在,说明项目配置没有包含这些文件,回到第二步修正.csproj。
排查视图预编译问题
ASP.NET Core 2.1默认会在发布时预编译视图,如果自定义视图没有被包含在预编译范围里,也会出现部署后找不到的情况。你可以临时禁用预编译来测试:<PropertyGroup> <MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish> </PropertyGroup>添加到.csproj后重新发布,如果视图能正常部署,说明是预编译配置的问题,你可以进一步调整预编译的包含规则,确保自定义Identity视图被包含进去。
手动验证发布包和服务器文件
- 在发布时选择“创建包”,生成.zip文件后打开,检查
Areas/Identity/Pages下是否有你的自定义视图。如果没有,说明项目本身没有把这些文件纳入发布范围,必须修正.csproj配置。 - 登录IIS服务器,找到站点的物理路径,手动删除
Areas/Identity文件夹,然后重新发布。有时候旧的Identity文件可能被锁定,导致Web Deploy无法替换,手动清理后再部署就能解决。
- 在发布时选择“创建包”,生成.zip文件后打开,检查
如果以上步骤都试过还是不行,可以查看Visual Studio发布时的输出窗口,里面会显示每个文件的处理状态,有没有跳过或错误的提示,这些信息能帮你快速定位问题。
内容的提问来源于stack exchange,提问作者Mudasar Rauf

