ASP.NET Core 2.0加载.NET 3.5混合模式程序集运行时错误求解
解决ASP.NET Core 2.0中加载.NET 3.5混合模式程序集的问题
这个错误我之前处理过,本质是因为AForge.Video.FFMPEG这类混合模式程序集(同时包含托管和非托管代码)是基于.NET 2.0 runtime编译的,而.NET 4.x+的CLR默认不会以兼容模式加载它们。不过在你这种目标为.NET Framework 4.7的ASP.NET Core项目里,依然可以通过配置useLegacyV2RuntimeActivationPolicy来解决,只是配置位置和传统.NET项目略有不同,具体步骤如下:
核心解决方案:添加Runtime配置
因为你的ASP.NET Core项目基于.NET Framework 4.7,我们可以通过修改配置文件启用旧版runtime激活策略:
找到/创建项目的配置文件
如果是部署到IIS的ASP.NET Core项目,根目录下应该已经有web.config;如果是自托管的控制台型ASP.NET Core项目,可以在项目根目录添加一个app.config文件。插入runtime配置节
在配置文件的<configuration>节点内,添加以下代码:<runtime> <useLegacyV2RuntimeActivationPolicy enabled="true" /> <!-- 如果需要程序集版本重定向,可在此添加assemblyBinding节点 --> </runtime>这个配置会让CLR采用.NET 2.0时代的程序集激活策略,从而允许加载基于v2.0.50727编译的混合模式程序集。
额外注意事项
- 确保依赖文件复制到位:AForge.Video.FFMPEG依赖一些非托管DLL文件,要确保这些文件被复制到ASP.NET Core项目的输出目录(可以在引用的类库或程序集属性里设置“复制本地”为
true)。 - 验证项目目标框架:确认你的ASP.NET Core项目确实是目标.NET Framework 4.7,而非跨平台的.NET Core/.NET 5+,因为
useLegacyV2RuntimeActivationPolicy仅对基于.NET Framework的应用生效。
内容的提问来源于stack exchange,提问作者macfly
相关产品推荐
相关产品推荐

