SSMS SQL Server 2014 CU4 Issue: The type initializer for ‘PropertyMetadataProvider’ threw an exception

 

When I installed CU4 for SQL Server 2014, I started to receive an error in SSMS (SQL Server Management Studio) every time I connected to a database server:

clip_image002

It was interesting that it was a type that wasn’t being found in Microsoft.SqlServer.SqlEnum. I presumed it was a problem with a type being missing in that DLL and that I must have had an older one.

Turns out that the problem was with the Microsoft.SqlServer.Smo.dll.

The product team told me that “bad” DLL versions were pushed out by the first released version of SSDT-BI for VS2013. All was working fine though until I applied CU4; then the errors started.

While the correct file version was 12.0.2430.0, and that was the one I had in the folder, the issue seems to actually relate to the Microsoft.SqlServer.Smo.dll, not to the SqlEnum dll. For some reason the installer didn’t correctly replace the previous entry in the GAC. It was still a 12.0.2299.1 version.

What I ended up having to do was to use ProcessExplorer to locate the dependencies of the ssms.exe process, then find the version of Microsoft.SqlServer.Smo.dll that was being loaded. I renamed it to stop it being loaded and rebooted. Then I found I still had the error and there was another location that it loaded it from. Again I renamed it and rebooted. Finally the error said that it couldn’t find the file at all.

At this point, I did a Repair of the Shared Features on “SQL Server (x64)” from “Programs and Features”, then deinstalled CU4, rebooted, then reinstalled CU4.

And now it seems to work ok. (Although it did nuke the previous entries from the connection dialog in SSMS)

Hope that helps someone.

5 thoughts on “SSMS SQL Server 2014 CU4 Issue: The type initializer for ‘PropertyMetadataProvider’ threw an exception”

  1. Hi Greg,
    I have the same problem than you.
    Unofrtunately, I am not very familiar with ProcessExplorer.
    Could you please elabaorate more on how to find the dependencies.
    Thanks a lot.

  2. To use Process Explorer to investigate:
    Download and unzip the SysInternals process explorer.
    Right-click procexp.exe and make sure you Run As Administrator if you have UAC enabled.
    Find and click on the SSMS process from the list of processes. Type Control-L to make the lower pane appear. This (by default) will show the DLLs involved. Find the Microsoft.SqlServer.Smo.dll and right-click it to find its properties.
    Hope this helps.

  3. Microsoft have posted a workaround:
    Temporary workaround – it's still suggested to install CU5 when it's released as that will contain the full fix.
    1. Exit SSMS and SSDT
    2. Open administrator command prompt
    3. Run this command :
    cd %WINDIR%\assembly\GAC_MSIL\Microsoft.SqlServer.Smo
    4. Run this command:
    rmdir /Q /S 12.0.0.0__89845dcd8080cc91
    5. Run the SQL2014 setup media
    6. Browse to the Maintenance tab
    7. Click the Repair link to launch the repair dialog
    8. Wait for pre-req steps to finish then click Repair button
    9. Once the repair is finished launch SSMS – you should be able to connect without error now

  4. I did them after. Basically if you update to CU4 and you don't see any issue when connecting to the DB engine from SSMS, then there's nothing to worry about. It's only if you then have an issue.

Leave a Reply

Your email address will not be published.