VS2015 C#控制台项目运行IronPython 2.7.7加载类型失败求助
这个问题我之前帮同事排查过好几次,核心原因基本都是IronPython依赖的程序集版本不匹配或者缺失,给你几个实用的解决步骤:
确保完整安装所有匹配版本的IronPython依赖包
你只引用了IronPython.StdLib是不够的,IronPython 2.7.7需要配套的核心包:IronPython(2.7.7)、Microsoft.Scripting(1.2.0.0)和Microsoft.Dynamic(1.2.0.0)。打开NuGet包管理器,搜索这些包并安装完全一致的2.7.7版本(注意Microsoft.Scripting和Microsoft.Dynamic的版本号对应1.2.0.0是正确的)。很多时候漏装核心的IronPython包或者版本不一致就会触发这个加载错误。添加程序集绑定重定向解决版本冲突
如果你的项目里还有其他第三方库引用了不同版本的Microsoft.Scripting,就会出现版本冲突。这时在项目的App.config中添加以下配置,强制使用IronPython需要的版本:<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Microsoft.Scripting" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-1.2.0.0" newVersion="1.2.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Microsoft.Dynamic" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-1.2.0.0" newVersion="1.2.0.0" /> </dependentAssembly> </assemblyBinding> </runtime>清理并重建项目
有时候项目输出目录里会残留旧版本的程序集,导致加载时出错。右键你的项目,先选择清理,然后再点击生成,确保输出目录里的所有依赖都是最新安装的版本。检查项目的目标.NET框架版本
IronPython 2.7.7对.NET框架有最低要求,建议把你的VS2015项目目标框架设置为**.NET Framework 4.5及以上**,过低的版本可能不兼容依赖程序集里的特性,进而引发加载失败。
另外,你可以加一段代码验证当前加载的Microsoft.Scripting版本是否正确:
var scriptingAssembly = typeof(Microsoft.Scripting.Hosting.ScriptRuntime).Assembly; Console.WriteLine($"Loaded Microsoft.Scripting path: {scriptingAssembly.Location}"); Console.WriteLine($"Assembly version: {scriptingAssembly.GetName().Version}");
如果输出的版本不是1.2.0.0,那就说明版本匹配的问题还没解决,需要再检查NuGet包和绑定重定向的配置。
内容的提问来源于stack exchange,提问作者BobbyA

