Dopo una migrazione di un sito da SharePoint 2013 a SharePoint 2016, con alcune parti custom come web part, page layouts, masterpage, ecc....., mi sono trovato questo errore accedendo ad una pagina custom:
Message : Application error when access /_layouts/15/nomeCartella/login.aspx, Error=Could not load type
'Definition.Layouts.Definition.Login'. at
System.Web.UI.TemplateParser.GetType(String typeName, Boolean ignoreCase, Boolean throwOnError) at
System.Web.UI.TemplateParser.ProcessInheritsAttribute(String baseTypeName, String codeFileBaseTypeName,
String src, Assembly assembly) at
System.Web.UI.TemplateParser.PostProcessMainDirectiveAttributes(IDictionary parseData)
apparentemente non riusciva a caricare la classe indicata Definition.Layouts.Definition.Login.
Questa classe era all'interno di una .dll che sicuramente veniva caricata, in quanto altri componenti presenti nella stessa funzionavano regolarmente.
Un analisi approfondita dei log di SharePoint non dava indicazioni aggiuntive sulla causa.

Analizzando i sorgenti in Visual Studio, erano presenti varie dipendenze ad altre .dll custom e di sistema.
Per restringere il campo ho usato ILSpy per capire quale dipendenze usava la classe indicata, ne aveva una sola: Microsoft.SharePoint.IdentityModel.
Essendo il progetto creato per SharePoint 2013, ho supposto che venisse cercata la versione 15.0.0.0 di Microsoft.SharePoint.IdentityModel anziché la versione 16.0.0.0 usata da SharePoint 2016.

Un aggiunta di un bindingRedirect nel web.config con range 15.0.0.0 ÷ 16.0.0.0 della web application ha risolto:
...
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      ...
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.SharePoint.IdentityModel" publicKeyToken="71e9bce111e9429c" culture="neutral" />
        <bindingRedirect oldVersion="15.0.0.0" newVersion="16.0.0.0" />
      </dependentAssembly>
...