提问人:Serexx 提问时间:5/29/2023 更新时间:11/14/2023 访问量:2401
Net Framework 4.8 EF6 EDMX T4 错误 _generationEnvironment 为 NULL [duplicate]
Net Framework 4.8 EF6 EDMX T4 Error _generationEnvironment is NULL [duplicate]
问:
这始于 EDMX 突然不生成类文件。.context.cs 文件包含类声明,如
public virtual DbSet<myTable> myTable { get; set; }
但未生成实际的类文件。两个.tt文件都在那里,并且“运行自定义工具”没有帮助。
在调试 Model.tt T4 模板时,此声明:
public StringBuilder GenerationEnvironment { get { return (StringBuilder)_generationEnvironment.GetValue(_instance, null); } }
生产
“System.NullReferenceException:'对象引用未设置为 对象的实例。
_generationEnvironment变量为 NULL。
为了确保数据库更改不会触发这种情况,我重新创建了模型,仅包含一个未修改但未改进的表。
不幸的是,我没有奢侈地将其移动到 Code-First 和 Core,因此任何建议都将不胜感激。
答:
同样的问题在这里。使用 Visual Studio Community 2022 版本 17.6.2
C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\Templates\Includes\EF6。实用程序.CS.ttinclude:line 1928
编辑:回滚到17.5.3后问题已解决
我确实以迂回的方式找到了与答案相同的东西 - 在修复然后重新安装 VS 2022(对不起,可以提到该版本)没有任何效果并且无法找到回滚社区版本的方法后,我重新安装了 VS2019,创建了 .EDMX模型在那里,没有问题。
我现在继续在 VS2022 中。希望它在下一个版本中得到修复。
在最新更新(即 17.6.2)中,属性访问权限似乎已从非公开更改为公开Microsoft.VisualStudio.TextTemplating.GeneratedTextTransformation.GenerationEnvironment
您可以修改 和 文件,通过更改EF.Utility.CS.ttinclude
EF6.Utility.CS.ttinclude
C:\Program Files\Microsoft Visual Studio\2022\Professional\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\Templates\Includes
_generationEnvironment = type.GetProperty("GenerationEnvironment", BindingFlags.Instance | BindingFlags.NonPublic);
自
_generationEnvironment = type.GetProperty("GenerationEnvironment", BindingFlags.Instance | BindingFlags.Public);
编辑: 看起来它将在下一个 VS 版本中修复 https://github.com/dotnet/ef6tools/commit/89cd126fa8ebfd40c3b5e781232be940711cf726
评论