У меня есть старый проект, созданный с использованием VS2019 с Entity Framework 6 на .NET 4.5. Сначала мы использовали базу данных для генерации кода. Это сработало очень хорошо.
Однако мы только начали использовать VS2022 V17.6.2, мне нужно обновить приложение с новой таблицей, поэтому я добавил таблицу в model.edmx, запустил файл .tt, к моему удивлению, он показывает ошибку, подобную этой:
Ошибка
Выполнение преобразования: System.NullReferenceException: ссылка на объект не указывает на экземпляр объекта.в Microsoft.VisualStudio.TextTemplatingD21DB4521EFD493FAE41A9CE9DA80C875F3084552987498BD518713BDE91D14AF116D5B591FBF7D992E37AB98D0755C27E1BD3D907AED6618E5F11 743F78068A.GeneratedTextTransformation.DynamicTextTransformation.get_GenerationEnvironment() в C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\Templates\Includes\EF6.Utility.CS .ttinclude: строка 1928 в Microsoft.VisualStudio.TextTemplatingD21DB4521EFD493FAE41A9CE9DA80C875F3084552987498BD518713BDE91D14AF116D5B591FBF7D992E37AB98D0755C27E1BD3D907AED6618E5F11 743F78068A.GeneratedTextTransformation.EntityFrameworkTemplateFileManager..ctor(Object textTransformation) в C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\Templates\Includes\EF6. Utility.CS.ttinclude:строка 1665 в Microsoft.VisualStudio.TextTemplatingD21DB4521EFD493FAE41A9CE9DA80C875F3084552987498BD518713BDE91D14AF116D5B591FBF7D992E37AB98D0755C27E1BD3D907AED6618E5F11 743F78068A.GeneratedTextTransformation.EntityFrameworkTemplateFileManager.VsEntityFrameworkTemplateFileManager..ctor(Object textTemplating) в C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\Templates\Includes\ EF6.Utility.CS.ttinclude:строка 1784 в Microsoft.VisualStudio.TextTemplatingD21DB4521EFD493FAE41A9CE9DA80C875F3084552987498BD518713BDE91D14AF116D5B591FBF7D992E37AB98D0755C27E1BD3D907AED6618E5F11 743F78068A.GeneratedTextTransformation.EntityFrameworkTemplateFileManager.Create(Object textTransformation) в C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\Templates\Includes\EF6.Utility .CS.ttinclude:строка 1629 в Microsoft.VisualStudio.TextTemplatingD21DB4521EFD493FAE41A9CE9DA80C875F3084552987498BD518713BDE91D14AF116D5B591FBF7D992E37AB98D0755C27E1BD3D907AED6618E5F11 743F78068A.GeneratedTextTransformation.TransformText() в C:\test\Code\ConsoleAppTest\TestModel.tt:строка 10 Разные файлы C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\ Microsoft\Entity Framework Tools\Templates\Includes\EF6.Utility.CS.ttinclude 1928
Итак, я сравнил новый файл .tt со старым, обнаружил некоторые изменения, например, это было EF.Utility.CS.ttinclude не EF6.Utility.CS.ttinclude. Итак, я попробовал тот, который у нас был раньше, все та же ошибка в VS2022.
Я попытался применить последнюю версию 6.4.4, измененную на использование .net framework 4.8, все то же самое. Пытался отладить шаблон T4, все та же ошибка.
Теперь мне нужно вручную создать код для вновь добавленной таблицы. Есть ли обходной путь? Означает ли это, что мы больше не можем использовать генерацию кода в VS2022 для Entity Framework 6 для .NET Framework 4.8 (или ниже)?
Да, добавил в базу, потом обновил модель в vs2022
Я подозреваю, что это связано с некоторыми установками. Это новая машина win11, новая установка .Net и vs2022. Прямо сейчас я просто вручную создаю новые файлы сущностей, добавляю их в сгенерированную папку. Это работает, но просто любопытно, почему шаблон t4 больше не работает.
Я вижу это: developercommunity.visualstudio.com/t/… , попробую
Смотрите также stackoverflow.com/q/76353796/861716





Это известная ошибка Visual Studio 2022 v17.6+.
Как написал @urlreader, в настоящее время существует открытая проблема для сообщества разработчиков Microsoft, и доступен обходной путь, ожидающий исправления.
Обходной путь сообщает:
C:\Program Files\Майкрософт Визуал Studio\2022\Professional\Common7\IDE\Extensions\Microsoft\Entity Инструменты платформы\Шаблоны\Включает
частный DynamicTextTransformation (экземпляр объекта)
_generationEnvironment = type.GetProperty("GenerationEnvironment", BindingFlags.Instance | BindingFlags.NonPublic);
_generationEnvironment = type.GetProperty("GenerationEnvironment");
Спасибо! Только что обновился до VS 17.6 и подумал, что схожу с ума.
Спасибо, что разъяснили это. У меня также работал эквивалент VB: редактирование EF6.Utility.VB.ttinclude и замена _generationEnvironment = type.GetProperty("GenerationEnvironment", BindingFlags.Instance Or BindingFlags.NonPublic) на: _generationEnvironment = type.GetProperty("GenerationEnvironment")
@NeilLaslett Я тоже :(
Я добавил таблицу в model.edmx -- Что означает "обновить модель из базы данных"?