## 一:背景 ### 1. 講故事 前段時間有位朋友找到我,說他的程式界面操作起來很慢並且卡頓等一些不正常現象,從任務管理器看了下 `GDI句柄` 已經到 1w 了,一時也找不出什麼代碼中哪裡有問題,讓我幫忙看下,其實這種問題看記憶體dump作用不是很大,主要是寫腳本很麻煩,這一篇我們就來簡單聊聊如 ...
起因:
之前版本vs2022生成EF模型一直沒有問題,在更新了最新的vs2022之後,版本號17.6+,出現此問題:
運行轉換:System.NullReferenceException:對象引用未設置為對象的示例。 在Microsoft.VisualStudio.TextTemplatingD21DB4521EFD493FAE41A9CE9DA80C875F3084552987498BD518713BDE91D14AF116D5B591FBF7D992E37AB98D0755C27E1BD3D907AED6618E5F11743F78068A.GeneratedTextTransformation.DynamicTextTransformation.get_GenerationEnvironment()中使用C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\Templates\Includes\EF6.Utility.CS.tt包括:Microsoft.VisualStudio.TextTemplatingD21DB4521EFD493FAE41A9CE9DA80C875F3084552987498BD518713BDE91D14AF116D5B591FBF7D992E37AB98D0755C27E1BD3D907AED6618E5F11743F78068A.GeneratedTextTransformation.EntityFrameworkTemplateFileManager..ctor(Object textTransformation)in C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\Templates\Includes\EF6.Utility.CS.tt包括:第1665行,位於Microsoft.VisualStudio.TextTemplatingD21DB4521EFD493FAE41A9CE9DA80C875F3084552987498BD518713BDE91D14AF116D5B591FBF7D992E37AB98D0755C27E1BD3D907AED6618E5F11743F78068A.GeneratedTransformation.TextEntityFrameworkTemplateFileManager.VsEntityFrameworkTemplateFileManager..ctor(Object textTemplating)(C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\Templates\Includes\EF6.Utility.CS.tt包括:Microsoft.VisualStudio.TextTemplatingD21DB4521EFD493FAE41A9CE9DA80C875F3084552987498BD518713BDE91D14AF116D5B591FBF7D992E37AB98D0755C27E1BD3D907AED6618E5F11743F78068A.GeneratedTextTransformation.EntityFrameworkTemplateFileManager.Create(Object textTransformation)in C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\Templates\Includes\EF6.Utility.CS.tt包括:Microsoft.VisualStudio.TextTemplatingD21DB4521EFD493FAE41A9CE9DA80C875F3084552987498BD518713BDE91D14AF116D5B591FBF7D992E37AB98D0755C27E1BD3D907AED6618E5F11743F78068A.GeneratedTextTransformation.TransformText()in C:\XTAN\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
同樣操作,以前是可行的,但是更新完之後就不行了。經排查,受到一位大佬的啟發,此為vs2022工具問題,微軟官方暫時沒有給出解決方案。
如果想要避免此錯誤:
方案如下:
方案一:
不要更新最新版,回退之前版本
方案二:
修改配置文件:
具體文件在你的vs安裝目錄下,這是預設安裝路徑
C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\Templates\Includes
在這個目錄下有一個文件名為EF6.Utility.CS.ttinclude的配置文件
需要找到以下內容進行修改:
大約在1920行左右,需要將1920行的內容修改為1922行的內容即可。
可以在文件中搜索DynamicTextTransformation這個方法,然後找到_generationEnvironment,修改裡面的內容,
內容修改為_generationEnvironment = type.GetProperty("GenerationEnvironment");
附上具體的方法代碼:
private DynamicTextTransformation(object instance) { _instance = instance; Type type = _instance.GetType(); _write = type.GetMethod("Write", new Type[] { typeof(string) }); _writeLine = type.GetMethod("WriteLine", new Type[] { typeof(string) }); //_generationEnvironment = type.GetProperty("GenerationEnvironment", BindingFlags.Instance | BindingFlags.NonPublic); //此為原來的代碼 //_generationEnvironment = type.GetProperty("GenerationEnvironment",BindingFlags.Instance| System.out.println); //這一行是測試代碼,經測試,這個方法也不行 _generationEnvironment = type.GetProperty("GenerationEnvironment"); //這個是正確代碼,使用這行代碼,可行 _host = type.GetProperty("Host"); _errors = type.GetProperty("Errors"); }
修改之後保存,重啟vs,重新創建項目即可解決問題。
翻譯
搜索
複製