我们有几个运行 Windows 10 的计算机,在打开之前可以正常工作的 dotnet 应用程序时突然开始显示错误。其中包括 MSTeams,但同一台计算机上的几个应用程序同时停止工作,因此这是 Windows 的问题,而不是应用程序本身的问题。当您打开应用程序时,它会显示一条消息,指示
此应用程序需要以下 .NET 框架版本之一:V4.0.30319
Windows 10 已安装 .net4,因此您显然不能重新安装它。在 c:\windows\Microsoft.NET\Framework64\ 中,我有一个 v4.0.30319 文件夹,其中似乎有一个有效的 .net 安装。我已将该文件夹与其他机器进行了比较,看起来没问题。
如果我执行以下 Powershell
Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -Recurse | Get-ItemProperty -Name version -EA 0 | Where { $_.PSChildName -Match '^(?!S)\p{L}'} | Select PSChildName, version
它返回这个:
PSChildName Version
----------- -------
v2.0.50727 2.0.50727.4927
v3.0 3.0.30729.4926
Windows Communication Foundation 3.0.4506.4926
Windows Presentation Foundation 3.0.6920.4902
v3.5 3.5.30729.4926
Client 4.8.09037
Full 4.8.09037
Client 4.0.0.0
这似乎又没问题。4.8 版本号在其他机器上有所不同
因此,看起来好像有些东西已经被修改了,从而阻止了.net 版本检测正常工作。
我尝试通过 dism 进行修复。KB5033910 是 .net 和 win10 的 CU,我认为它可能会重置一些东西,但显然 windows10.0-kb5033910-x64-ndp48_b1a3e722dbcd8d88b845314b8e9bf5e8fd9b6904.msu 不适用于 windows 10。自己想想吧。
有人见过这个问题或者知道针对.net 编译的应用程序如何检测.net 吗?
编辑:MS 工具 CLRVER.exe 返回以下输出:
Microsoft (R) .NET CLR Version Tool Version 4.8.9032.0
Copyright (c) Microsoft Corporation. All rights reserved.
Versions installed on the machine:
v2.0.50727
v4.0.30319
如果我通过以下方式启用 .net 激活日志记录
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\CLRLoadLogDir
然后,当我运行 dfsvc.exe 工具时,结果日志显示
13904,209391.187,Parsing config file: c:\windows\Microsoft.NET\Framework64\v4.0.30319\dfsvc.exe.config
13904,209391.187,Config File (Open). Result:00000000
13904,209391.187,Config File (Read). Result:00000000
13904,209391.187,Found config file: c:\windows\Microsoft.NET\Framework64\v4.0.30319\dfsvc.exe.config
13904,209391.187,UseLegacyV2RuntimeActivationPolicy is set to 0
13904,209391.187,Config file includes SupportedRuntime entry. Version: v4.0, SKU: client
13904,209391.187,Found a supportedRuntime tag in the config file
13904,209391.187,ERROR: None of the listed supported runtimes are installed on the machine or can be used to satisfy this request.
答案1
我自己解决了这个问题,但方法并不令人满意。我修复 .net 4 的方法都没有任何效果。作为最后的手段,我尝试在一台正常运行的机器上导出 hklm\software\Microsoft.netframework 和 hklm\software\wow6432node\microsoft.netframework。在有问题的机器上,我导入了这两个文件中的第一个,一切恢复正常。
我还没有尝试调查到底是哪个注册表设置搞砸了这个问题,但没有必要导入 wow6432node 分支。这只影响了几台机器,所以我没有更多的实验。如果其他人看到这个并弄清楚确切的设置是什么,我会很感兴趣。
我还应该提到,我使用了 Roger Zanders Reg2CI 工具将注册表设置导出到 Powershell 脚本。直接使用 .reg 文件可能就足够了。