rubicon-oss / LicenseHeaderManager

Manage license headers for your source code files in Visual Studio

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

NullReferenceException when performing a clean installation of LicenseHeaderManager instead of an upgrade

MichaelKetting opened this issue · comments

Reported in #168 by @gmt2001

I just installed the new 5.0.0 version of License Header Manager into VS2022. I have previously used LHM in VS2019, however, I had completely uninstalled VS2019 before installing VS2022.

It appears that GetRegistryKey() returned null in LoadCurrentRegistryValues_3_0_3() and therefore the logger call on the next line tries to dereference null.Name, and the processing logic underneath would end up doing similar.

The root cause of all this appears to be that OptionsStoreMode.RegistryStore_3_0_3 is assumed until OptionsStoreMode.JsonStore is explicitly set, and thus MigrateOptions() is triggered on the non-existent 3.0.3 registry store.

I checked my AppData\Roaming\Microsoft\VisualStudio version folders and had no artifacts from previous versions of LHM. I also checked my HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\ version registry keys and had no artifacts from previous versions of LHM.

My project does have a .licenseheader file since I was using LHM with the project back when I was working on it in VS2019.

Here is the stacktrace from the ActivityLog.xml (I decoded the HTML entities for readability).

  <entry>
    <record>2158</record>
    <time>2022/03/12 12:36:31.351</time>
    <type>Error</type>
    <source>VisualStudio</source>
    <description>SetSite failed for package [LicenseHeadersPackage]Source: 'LicenseHeaderManager' Description: Object reference not set to an instance of an object.
System.NullReferenceException: Object reference not set to an instance of an object.
at LicenseHeaderManager.Options.DialogPages.BaseOptionPage`1.LoadCurrentRegistryValues_3_0_3(BaseOptionModel`1 dialogPage) in C:\Build\1776828f99d31c99\LicenseHeaderManager.Shared\Options\DialogPages\BaseOptionPage.cs:line 182
at LicenseHeaderManager.Options.DialogPages.OptionsPage.MigrateStorageLocation_4_0_0() in C:\Build\1776828f99d31c99\LicenseHeaderManager.Shared\Options\DialogPages\OptionsPage.cs:line 47
at LicenseHeaderManager.Options.UpdateStep.ExecuteActions() in C:\Build\1776828f99d31c99\LicenseHeaderManager.Shared\Options\UpdateStep.cs:line 53
at LicenseHeaderManager.Options.DialogPages.BaseOptionPage`1.Update(UpdateStep updateStep) in C:\Build\1776828f99d31c99\LicenseHeaderManager.Shared\Options\DialogPages\BaseOptionPage.cs:line 129
at LicenseHeaderManager.Options.DialogPages.BaseOptionPage`1.MigrateOptions() in C:\Build\1776828f99d31c99\LicenseHeaderManager.Shared\Options\DialogPages\BaseOptionPage.cs:line 94
at LicenseHeaderManager.LicenseHeadersPackage.<MigrateOptionsAsync>d__66.MoveNext() in C:\Build\1776828f99d31c99\LicenseHeaderManager.Shared\LicenseHeadersPackage.cs:line 464
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at LicenseHeaderManager.LicenseHeadersPackage.<InitializeAsync>d__53.MoveNext() in C:\Build\1776828f99d31c99\LicenseHeaderManager.Shared\LicenseHeadersPackage.cs:line 266
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.VisualStudio.Shell.AsyncPackage.<>c__DisplayClass20_0.<<Microsoft-VisualStudio-Shell-Interop-IAsyncLoadablePackageInitialize-Initialize>b__1>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.VisualStudio.Threading.JoinableTask.<JoinAsync>d__76.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at Microsoft.VisualStudio.Services.VsTask.RethrowException(AggregateException e)
at Microsoft.VisualStudio.Services.VsTask.InternalGetResult(Boolean ignoreUIThreadCheck)</description>
    <guid>{4C570677-8476-4D33-BD0C-DA36C89287C8}</guid>
    <hr>80004003 - E_POINTER</hr>
    <errorinfo></errorinfo>
  </entry>

Solved with #168