.NET6 Web API部署IIS遇程序集加载失败问题求助
解决方案:.NET6 Web API发布后缺失版本控制程序集问题
1. 确认发布配置与依赖部署
- 检查项目发布模式:要么选自包含部署,把所有依赖打包进去;要么在框架依赖模式下,确认服务器已安装对应版本的ASP.NET Core 6 Runtime。
- 修改项目文件(.csproj)强制复制依赖:添加
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>,确保所有NuGet依赖都被复制到发布目录。示例配置:
<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>net6.0</TargetFramework> <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> </PropertyGroup> <ItemGroup> <!-- 用旧版就保留这个 --> <PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning" Version="5.0.0" /> <!-- 用新版Asp.Versioning的话,要加核心包,ApiExplorer是扩展 --> <PackageReference Include="Asp.Versioning.Mvc" Version="7.0.0" /> <PackageReference Include="Asp.Versioning.Mvc.ApiExplorer" Version="7.0.0" /> </ItemGroup> </Project>
2. 清理后重新发布
- 本地先跑
dotnet clean清缓存,再用dotnet publish -c Release重新生成发布包。 - 去服务器发布目录里找对应dll:比如
Microsoft.AspNetCore.Mvc.Versioning.dll或Asp.Versioning.Mvc.dll,要是没找到,直接从本地发布包的bin文件夹里复制过去。
3. 修正IIS应用池配置
- 把应用池的**.NET CLR版本设为无托管代码**,.NET6属于跨平台核心框架,不需要传统CLR。
- 检查应用池身份权限:确保运行账户对发布目录有读取和执行权限,别因为权限卡了程序集加载。
4. 避免依赖冲突
- 别混合用旧版
Microsoft.AspNetCore.Mvc.Versioning和新版Asp.Versioning系列包,两者命名空间不同,容易搞出依赖问题。 - 用
Asp.Versioning.Mvc.ApiExplorer的时候,必须搭配核心包Asp.Versioning.Mvc,ApiExplorer只是扩展,不能单独用。
5. 放弃GAC注册
.NET Core/.NET5+根本不使用GAC,gacutil命令对这类框架完全没用,别浪费时间在这上面,所有依赖都靠NuGet管理并随发布包部署就行。
内容的提问来源于stack exchange,提问作者oras
相关产品推荐
相关产品推荐

