加载含Microsoft.NET.Sdk.Web的ASP.NET Core程序集失败,求解决方案
解决方案
原因分析
.NET Core 3.0及更高版本中,Microsoft.AspNetCore.App是共享框架程序集,这类组件不会以独立dll的形式出现在解决方案目录或传统系统目录中,而是封装在.NET Core运行时的专属共享目录里,由CLR负责统一加载管理。你找不到dll是正常的,因为它们不是独立分发的文件。
具体解决步骤
1. 定位AspNetCore运行时的共享目录
首先找到对应版本的AspNetCore运行时安装路径:
- 默认路径格式:
C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\<目标框架版本号> - 可以通过执行
dotnet --list-runtimes命令,查看已安装的所有AspNetCore运行时版本及对应的路径,比如输出可能包含:Microsoft.AspNetCore.App 6.0.25 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
2. 在AssemblyResolve事件中手动加载(应急方案)
如果你的工具项目无法直接引用AspNetCore框架,可以在AssemblyResolve事件中拼接路径加载缺失的dll:
AppDomain.CurrentDomain.AssemblyResolve += (sender, resolveArgs) => { var targetAssembly = new AssemblyName(resolveArgs.Name); // 替换为你查到的对应版本路径 var runtimeDir = @"C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\6.0.25"; var dllPath = Path.Combine(runtimeDir, $"{targetAssembly.Name}.dll"); return File.Exists(dllPath) ? Assembly.LoadFrom(dllPath) : null; };
3. 利用框架引用自动解析(推荐方案)
这是更规范的做法,让CLR自动处理依赖解析:
- 如果你的工具项目是Web SDK项目(
Microsoft.NET.Sdk.Web),会自动隐式引用Microsoft.AspNetCore.App,无需额外配置。 - 如果你的工具是控制台/类库项目(
Microsoft.NET.Sdk),在项目的.csproj文件中添加以下框架引用:
添加后重新编译工具,加载Web程序集时CLR会自动从共享框架目录中查找并加载所需依赖,无需手动处理<ItemGroup> <FrameworkReference Include="Microsoft.AspNetCore.App" /> </ItemGroup>AssemblyResolve事件。
4. 版本兼容性注意事项
确保工具使用的AspNetCore运行时版本,与待加载的Web程序集的目标框架版本兼容(优先使用完全匹配的版本),否则可能出现版本不兼容的加载错误。
内容的提问来源于stack exchange,提问作者Darren Oakey
相关产品推荐
相关产品推荐

