CS-Script引用EntityFramework报CS0012无法识别DbContext如何解决
排查解决思路
- 检查
//css_reference路径有效性
相对路径是相对于脚本执行时的工作目录而非脚本文件存储目录,可先替换为绝对路径测试,例如:
同时确认引用的是EF6而非EF Core的程序集,两者是完全独立的实现,不可混用。//css_reference @"C:\你的项目目录\bin\Release\EntityFramework.dll"; - 补充EF依赖的关联程序集引用
仅引用EntityFramework.dll不足以完整加载EF6运行环境,需要同步引入你场景下的配套程序集,例如:
所有引用的程序集版本要和主项目使用的版本完全一致,避免版本冲突。//css_reference "System.Data.SQLite.dll"; //css_reference "EntityFramework.Sqlite.dll"; - 使用强名称标识引用程序集
直接用报错要求的强名称标识替代文件路径引用,让cs-script自动匹配符合要求的程序集://css_reference "EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; - 验证cs-script宿主配置
若脚本是在你的主应用中宿主执行,默认cs-script不会继承主应用的程序集引用,可调整cs-script全局配置,添加主应用bin目录为程序集搜索路径,或开启宿主程序集引用继承:// 主应用初始化cs-script时添加配置 CSScript.GlobalSettings.AddSearchDir(@"你的主应用bin目录路径"); ScriptOptions.Default.AddReferencesFromHostApp = true; - 检查程序集签名与绑定重定向
用sn -T EntityFramework.dll命令验证你引用的EF程序集公钥Token是否为b77a5c561934e089,如果存在版本差异,在主应用的app.config中添加EF的程序集绑定重定向,将所有版本请求指向你实际使用的EF版本。 - 最小脚本复现定位问题
编写最简测试脚本验证环境有效性,仅保留EF引用、命名空间声明和极简DbContext定义,若测试脚本可正常运行,说明原业务脚本存在其他冲突引用,反之则为cs-script全局环境配置问题。
内容的提问来源于stack exchange,提问作者Tony Vaughan
相关产品推荐
相关产品推荐

