Blazor WebAssembly生产部署后找不到绑定模块程序集如何解决?
Blazor WebAssembly部署后找不到绑定模块/入口类问题
问题描述
我有一个Blazor WebAssembly项目,本地运行一切正常,通过Web Deploy将Release版本部署到生产服务器后,打开页面出现如下报错:
Uncaught (in promise) Can't find bindings module assembly: System.Private.Runtime.InteropServices.JavaScript

Web Deploy配置全部为默认配置,无额外自定义设置,参数如下:
- Configuration: release
- Target framework: net5.0
- Deployment Mode: self-contained
- Target Runtime: browser-wasm

站点根目录文件完整:
wwwroot文件夹下也包含所有所需文件:
使用的web.config为默认配置,内容如下:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <staticContent> <remove fileExtension=".blat" /> <remove fileExtension=".dat" /> <remove fileExtension=".dll" /> <remove fileExtension=".json" /> <remove fileExtension=".wasm" /> <remove fileExtension=".woff" /> <remove fileExtension=".woff2" /> <mimeMap fileExtension=".blat" mimeType="application/octet-stream" /> <mimeMap fileExtension=".dll" mimeType="application/octet-stream" /> <mimeMap fileExtension=".dat" mimeType="application/octet-stream" /> <mimeMap fileExtension=".json" mimeType="application/json" /> <mimeMap fileExtension=".wasm" mimeType="application/wasm" /> <mimeMap fileExtension=".woff" mimeType="application/font-woff" /> <mimeMap fileExtension=".woff2" mimeType="application/font-woff" /> </staticContent> <httpCompression> <dynamicTypes> <add mimeType="application/octet-stream" enabled="true" /> <add mimeType="application/wasm" enabled="true" /> </dynamicTypes> </httpCompression> <rewrite> <rules> <rule name="Serve subdir"> <match url=".*" /> <action type="Rewrite" url="wwwroot\{R:0}" /> </rule> <rule name="SPA fallback routing" stopProcessing="true"> <match url=".*" /> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> </conditions> <action type="Rewrite" url="wwwroot\" /> </rule> </rules> </rewrite> </system.webServer> </configuration>
问题更新
后续将项目升级到了.NET6版本,生产环境又出现类似报错:
Error: Could not find class: Microsoft.AspNetCore.Components.WebAssembly.Hosting:EntrypointInvoker in assembly Microsoft.AspNetCore.Components.WebAssembly

解决方案
针对.NET 5版本报错
- 先检查Web Deploy的发布输出,确认
System.Private.Runtime.InteropServices.JavaScript.dll是否被正确复制到了发布后的wwwroot/_framework目录下,该文件是Blazor WASM的核心JS互操作绑定库,默认会在自包含发布时输出。 - 确认IIS是否开启了
_framework目录的访问权限,部分服务器安全策略会默认拦截隐藏目录(以下划线开头的目录)的访问,需单独配置允许该目录的匿名访问。 - 关闭发布时的裁剪功能:在项目文件
.csproj的PropertyGroup节点中添加配置<BlazorWebAssemblyEnableLinking>false</BlazorWebAssemblyEnableLinking>,重新发布。出现该报错的常见原因是裁剪器错误识别了该绑定库为未使用的依赖,裁剪过程中删除了该文件。
针对.NET 6版本同类报错
- 清理所有本地缓存的发布文件,删除项目下的
bin、obj目录,再重新执行发布操作。该报错大概率是版本升级后,旧版本的缓存文件和新版本的依赖冲突导致的。 - 确认项目引用的所有Blazor相关NuGet包的版本都统一为.NET 6对应的版本,不存在混合引用.NET 5和.NET 6版本包的情况。
- 如果使用了CDN加速静态资源,需清空CDN缓存,避免浏览器加载的是旧版本的Blazor启动脚本。
内容的提问来源于stack exchange,提问作者Enrico
相关产品推荐
相关产品推荐

