Recently, Microsoft published an update which broke .NET 3.5 applications across the globe (April 25, 2022-KB5012159 Cumulative Update Preview for .NET Framework 3.5 and 4.8 for Windows 11). Many Crestron professionals were also affected in their ability to continue supporting the 3-series platform due to a plugin that indirectly has a dependency on the .NET 3.5 framework.

In our efforts to test and troubleshoot this issue to identify a cause, we found that it came down to an issue in the old GAC. The following assembly could not be resolved by some applications because this assembly was no longer in the GAC located at %WINDIR%\assembly:

System.Runtime.Serialization, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

The fix was quite simple… Fixing the .NET 3.5 installation through the “Turn Windows features on or off” feature provided by Microsoft.

  1. Open the “Turn Windows features on or off” dialog by searching for it in the start menu and uncheck the box for “.NET Framework 3.5 (includes .NET 2.0 and 3.0)”
  2. Restart windows to ensure that any pending operations for its removal are complete
  3. Sign into Windows.
  4. Open the “Turn Windows features on or off” dialog again by searching for it in the start menu and check the box for “.NET Framework 3.5 (includes .NET 2.0 and 3.0)” opting in to redownload all the necessary files from Windows Update.
  5. Restart Windows one last time to ensure any pending operations have completed successfully.

After fixing the .NET installation, and verifying through an older version of Visual Studio Developer command prompt via gacutil.exe that the entry for System.Runtime.Serialization once again exists in the old GAC, we were good to go! You can also navigate to the old GAC to verify that the entry exists, instead of using an older version of gacutil.exe.

Note: The GAC exists in two separate locations. One of which, was introduced at the time .NET 4.0 came out and is located at %WINDIR%\Microsoft.NET\assembly. The new GAC location is not relevant and cannot be used to verify that the missing assembly has been added to the GAC.

“A highlights important information, which may or may not be an actual quote. It uses distinct styling to set it apart from other content on the page.