RoslynCodeDomProvider icon indicating copy to clipboard operation
RoslynCodeDomProvider copied to clipboard

NullReferenceException After Upgrading Microsoft.CodeDom.Providers.DotNetCompilerPlatform from Version 3.6.0 to 3.11.0 or 4.1.0

Open rubenc57 opened this issue 1 year ago • 2 comments

After upgrading Microsoft.CodeDom.Providers.DotNetCompilerPlatform from version 3.6.0 to either 3.11.0 or 4.1.0, I encountered the following error message:

Microsoft.CodeDom.Providers.DotNetCompilerPlatform failed to uninstall. Restart Visual Studio to finish process.

Upon restarting Visual Studio and running my website, I received this error: System.NullReferenceException HResult=0x80004003 Message=Object reference not set to an instance of an object. Source=CMS StackTrace: at CMS.Startup.ConfigureAuth(IAppBuilder app) in D:\Mis Proyectos\VS22\websites\jw\CMS\CMS\App_Start\Startup.Auth.cs:line 30

Here is the relevant code from Startup.Auth.cs:

using CMS.Models;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;
using Microsoft.Owin;
using Microsoft.Owin.Security.Cookies;
using Owin;
using System;
using System.Configuration;

namespace CMS
{
    public partial class Startup {

        // For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301883
        public void ConfigureAuth(IAppBuilder app)
        {
            // Configure the db context, user manager and signin manager to use a single instance per request
            app.CreatePerOwinContext(ApplicationDbContext.Create);
            app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
            app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);

            // Enable the application to use a cookie to store information for the signed-in user
            // and to use a cookie to temporarily store information about a user logging in with a third-party login provider
            // Configure the sign-in cookie
            app.UseCookieAuthentication(new CookieAuthenticationOptions
            {
                AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
                LoginPath = new PathString("/Account/Login"),
                SlidingExpiration = true,  
                ExpireTimeSpan = TimeSpan.FromMinutes(Double.Parse(ConfigurationManager.AppSettings["CookieExpireTimeSpan"].ToString())),
                Provider = new CookieAuthenticationProvider
                {
                    OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
                        validateInterval: TimeSpan.FromMinutes(Double.Parse(ConfigurationManager.AppSettings["CookieExpireTimeSpan"].ToString())),
                        regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
                }
            });
            // Use a cookie to temporarily store information about a user logging in with a third-party login provider
            app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);

            // Enables the application to temporarily store user information when they are verifying the second factor in the two-factor authentication process.
            app.UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(5));

            // Enables the application to remember the second login verification factor such as phone or email.
            // Once you check this option, your second step of verification during the login process will be remembered on the device where you logged in from.
            // This is similar to the RememberMe option when you log in.
            app.UseTwoFactorRememberBrowserCookie(DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie);

            // Uncomment the following lines to enable logging in with third-party login providers

            switch (ConfigurationManager.AppSettings["OAuthApp"])
            {
                case "local":
                    app.UseFacebookAuthentication(
                       appId: ConfigurationManager.AppSettings["FacebookLocalAppId"].ToString()
                       , appSecret: ConfigurationManager.AppSettings["FacebookLocalAppSecret"].ToString()
                       );
                    break;
                case "beta":
                    app.UseFacebookAuthentication(
                       appId: ConfigurationManager.AppSettings["FacebookBetaAppId"].ToString()
                       , appSecret: ConfigurationManager.AppSettings["FacebookBetaAppSecret"].ToString()
                       );
                    break;

                case "cms":
                default:
                    app.UseFacebookAuthentication(
                        appId: ConfigurationManager.AppSettings["FacebookCmsAppId"].ToString()
                       , appSecret: ConfigurationManager.AppSettings["FacebookCmsAppSecret"].ToString()
                       );
                    break;
            }

        }
    }
}

Even after downgrading the package back to version 3.6.0, the error persists. Previously, the application ran without issues on version 3.6.0 before the upgrade.

To resolve the issue temporarily, I restored a backup of my website, which restored functionality.

Could anyone advise on what might be causing this error and how to resolve it?

Thanks in advance for your help!

Ruben

rubenc57 avatar Aug 26 '24 18:08 rubenc57