如何重置.NET Framework的全局访问缓存?

i1icjdpr  于 2023-10-21  发布在  .NET
关注(0)|答案(1)|浏览(136)

我将一些程序集添加到.NET Framework的全局访问缓存中,以便需要它们的应用程序加载它们。我使用了一个not-task命令gacutil.exe。然后一些应用程序停止工作,其中一个显示此错误:

Unhandled Exception: System.TypeLoadException: Could not load type 'System.Diagnostics.Process' from assembly 'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=<<..>>'.
   at Microsoft.CodeAnalysis.CSharp.CommandLine.Program.MainCore(String[] args)
   at Microsoft.CodeAnalysis.CSharp.CommandLine.Program.Main(String[] args)

从GAS中删除添加的内容并没有帮助。
安装最新版本的.NET Framework 4.8后,我开始收到此错误,而不是

error CS7065: Error building Win32 resources -- Could not load type 'System.Numerics.BigInteger' from assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=<<..>>'.

我还抓到了这个

System.TypeLoadException: Could not load type 'System.ComponentModel.DataAnnotations.ValidationResult' from assembly 'System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=<<..>>'.
   at McMaster.Extensions.CommandLineUtils.CommandLineApplication..ctor(CommandLineApplication parent, IHelpTextGenerator helpTextGenerator, CommandLineContext context)

现在由于错误,多个应用程序不能运行,可以请任何人帮我解决这个问题?

qv7cva1a

qv7cva1a1#

解决方案:

  • 我允许访问%windir%\Microsoft.NET\assembly通过改变它的权限.已终止所有Windows的explorer进程。并通过运行move "<<path to folder which will be moved>>" "<<path to folder to move to>>"将文件夹中的所有内容移到%windir%外部的临时文件夹中。
  • 如果项目保持在%windir%\Microsoft.NET范围内,则可以由Explorer拾取。
  • 在提升的命令提示符下运行sfc /SCANNOW,它恢复了GAC_MSIL并修复了1个应用程序。
  • 将其他文件夹复制回assembly,并修复了其他文件夹。
  • #edit:我遇到了其他应用程序的问题,这些也是Windows的,所以无法重新安装,所以我不得不选择损坏的GAC_MSIL的项目,这些项目的名称与我添加到GAS的项目不对应,并将它们复制回来。这一招奏效了。

耶!!
这不会恢复由已安装的应用程序添加的.NET程序集,我没有冒险从损坏的GAC_MSIL添加东西,即使它们有明确的名称。但这些应用程序通常可以处理它们的依赖关系,即使不能,也可以重新安装。

相关问题