ASP.NET Core 6.0.20部署后RuntimeCompilation找不到Antiforgery.dll问题
解决ASP.NET Core 6.0.20 x86部署后RuntimeCompilation找不到引用程序集的问题
问题核心原因
你的ASP.NET Core 6.0.20 x86应用本地发布运行正常,但部署到服务器后,使用Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation生成邮件HTML的页面报错System.InvalidOperationException,提示找不到Microsoft.AspNetCore.Antiforgery.dll。本质是RuntimeCompilation编译Razor视图时,会从发布目录下的refs文件夹查找依赖程序集,而你未将该目录上传至服务器。你添加的<PreserveCompilationReferences>和<PreserveCompilationContext>配置仅用于保留编译上下文,不会自动将依赖复制到程序根目录,因此无法解决该问题。
可行解决方案
方案1:完整上传发布生成的refs目录
本地发布应用后,发布目录下会自动生成refs文件夹,其中包含RuntimeCompilation编译Razor视图所需的所有引用程序集。只需将该文件夹完整上传到服务器的程序根目录,与主exe文件同级即可。此方法无需修改代码或配置,是最直接的解决方式。
方案2:修改发布配置,合并依赖到单文件
如果不想单独维护refs目录,可以通过修改.csproj配置,将所有依赖程序集合并到单个exe文件中:
<PropertyGroup> <!-- 启用单文件发布 --> <PublishSingleFile>true</PublishSingleFile> <!-- 启用自包含发布,包含.NET运行时 --> <SelfContained>true</SelfContained> <!-- 指定目标运行时为x86 --> <RuntimeIdentifier>win-x86</RuntimeIdentifier> <!-- 允许提取本地原生库 --> <IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract> </PropertyGroup>
重新发布后,所有依赖会打包到单个exe文件中,部署时只需上传该exe即可,无需额外处理refs目录。注意:单文件发布可能会导致应用启动速度略有下降。
内容的提问来源于stack exchange,提问作者Wout
相关产品推荐
相关产品推荐

