-
Notifications
You must be signed in to change notification settings - Fork 5.2k
Description
Application Name: just-an-email
OS: Windows 10 RS5
CPU: X64
.NET Build Number: dotnet-sdk-6.0.100-rc.2.21454.3
Verify Scenarios:
1). Windows rs5 x64 + dotnet-sdk-6.0.100-rc.1.21451.16: Sentry Package2.1.5:Pass
2). Windows rs5 x64 + dotnet-sdk-6.0.100-rc.2.21454.3+Sentry Package 3.0.0:Pass
3). Windows rs5 x64 + dotnet-sdk-6.0.100-rc.2.21454.3+Sentry Package2.1.5: Fail
4). Windows rs5 x64 + dotnet-sdk-6.0.100-rc.2.21457.4+Sentry Package2.1.5: Fail
5). Windows rs5 x64 + dotnet-sdk-6.0.100-rc.2.21458.9+Sentry Package2.1.5: Fail
Github Repo link: https://github.com/mustakimali/just-an-email
App Source and App checking at :https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1396752
Repro steps:
This is 6.0 app upgraded from .NET Core 3.1.
1.Launch application “JustSending.exe”.
2.Access http://localhost:5000 using Edge.
Expected Result:
The app is launched successfully.
Actual Result:
Failed to launch the app with exception that Cannot create instance of type 'Sentry.Dsn'.
Exception Details:
System.InvalidOperationException: Cannot create instance of type 'Sentry.Dsn' because it is missing a public parameterless constructor.
at Microsoft.Extensions.Configuration.ConfigurationBinder.CreateInstance(Type type)
at Microsoft.Extensions.Configuration.ConfigurationBinder.BindInstance(Type type, Object instance, IConfiguration config, BinderOptions options)
at Microsoft.Extensions.Configuration.ConfigurationBinder.GetPropertyValue(PropertyInfo property, Object instance, IConfiguration config, BinderOptions options)
at Microsoft.Extensions.Configuration.ConfigurationBinder.BindProperty(PropertyInfo property, Object instance, IConfiguration config, BinderOptions options)
at Microsoft.Extensions.Configuration.ConfigurationBinder.BindNonScalar(IConfiguration configuration, Object instance, BinderOptions options)
at Microsoft.Extensions.Configuration.ConfigurationBinder.BindInstance(Type type, Object instance, IConfiguration config, BinderOptions options)
at Microsoft.Extensions.Configuration.ConfigurationBinder.Bind(IConfiguration configuration, Object instance, Action`1 configureOptions)
at Microsoft.Extensions.Options.NamedConfigureFromConfigurationOptions`1.<>c__DisplayClass1_0.<.ctor>b__0(TOptions options)
at Microsoft.Extensions.Options.ConfigureNamedOptions`1.Configure(String name, TOptions options)
at Microsoft.Extensions.Options.OptionsFactory`1.Create(String name)
at Microsoft.Extensions.Options.UnnamedOptionsManager`1.get_Value()
at Microsoft.AspNetCore.Builder.ApplicationBuilderExtensions.UseSentry(IApplicationBuilder app)
at Sentry.AspNetCore.SentryStartupFilter.<>c__DisplayClass0_0.<Configure>b__0(IApplicationBuilder e)
at Microsoft.AspNetCore.HostFilteringStartupFilter.<>c__DisplayClass0_0.<Configure>b__0(IApplicationBuilder app)
at Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancellationToken)
Minimal Repro steps:
- Create ASP.NET Core MVC Project(.NET Core 3.1) and then retarget it to .NET 6.0.
- Install Sentry.AspNetCore Package2.1.5.
- Add settings to aspsettings.
"Sentry": {
"Dsn": ""
}
- use Sentry:
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Build().Run();
}
public static IHostBuilder BuildWebHost(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(builder =>
{
builder
.UseSentry()
.UseStartup<Startup>();
})
}
- Build and Run
Expected Result:
Page should be loaded successfully
Actual Result:
System.InvalidOperationException: Cannot create instance of type 'Sentry.Dsn' because it is missing a public parameterless constructor.
at Microsoft.Extensions.Configuration.ConfigurationBinder.CreateInstance(Type type)
at Microsoft.Extensions.Configuration.ConfigurationBinder.BindInstance(Type type, Object instance, IConfiguration config, BinderOptions options)
at Microsoft.Extensions.Configuration.ConfigurationBinder.GetPropertyValue(PropertyInfo property, Object instance, IConfiguration config, BinderOptions options)
at Microsoft.Extensions.Configuration.ConfigurationBinder.BindProperty(PropertyInfo property, Object instance, IConfiguration config, BinderOptions options)
at Microsoft.Extensions.Configuration.ConfigurationBinder.BindNonScalar(IConfiguration configuration, Object instance, BinderOptions options)
at Microsoft.Extensions.Configuration.ConfigurationBinder.BindInstance(Type type, Object instance, IConfiguration config, BinderOptions options)
at Microsoft.Extensions.Configuration.ConfigurationBinder.Bind(IConfiguration configuration, Object instance, Action`1 configureOptions)
at Microsoft.Extensions.Options.NamedConfigureFromConfigurationOptions`1.<>c__DisplayClass1_0.<.ctor>b__0(TOptions options)
at Microsoft.Extensions.Options.ConfigureNamedOptions`1.Configure(String name, TOptions options)
at Microsoft.Extensions.Options.OptionsFactory`1.Create(String name)
at Microsoft.Extensions.Options.UnnamedOptionsManager`1.get_Value()
at Microsoft.AspNetCore.Builder.ApplicationBuilderExtensions.UseSentry(IApplicationBuilder app)
at Sentry.AspNetCore.SentryStartupFilter.<>c__DisplayClass0_0.<Configure>b__0(IApplicationBuilder e)
at Microsoft.AspNetCore.HostFilteringStartupFilter.<>c__DisplayClass0_0.<Configure>b__0(IApplicationBuilder app)
at Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancellationToken)
Additional Information:
Sentry has a big change in 3.0.0 version. This issue doesn't repro with this version.
You can see https://github.com/getsentry/sentry-dotnet/releases?after=3.2.0
For Dsn:
Dsn is just a string
SentryOptions now take a string for Dsn:
Before: o.Dsn = new Dsn("..");
After: o.Dsn = "..";
In Sentry code , different way to create IwebHostBuilder.
Before
public static IWebHostBuilder UseSentry(
this IWebHostBuilder builder,
Action<WebHostBuilderContext, SentryAspNetCoreOptions> configureOptions)
{
// The earliest we can hook the SDK initialization code with the framework
// Initialization happens at a later time depending if the default MEL backend is enabled or not.
// In case the logging backend was replaced, init happens later, at the StartupFilter
builder.ConfigureLogging((context, logging) =>
{
logging.AddConfiguration();
var section = context.Configuration.GetSection("Sentry");
logging.Services.Configure<SentryAspNetCoreOptions>(section);
if (configureOptions != null)
{
logging.Services.Configure<SentryAspNetCoreOptions>(options =>
{
configureOptions(context, options);
});
}
logging.Services.AddSingleton<IConfigureOptions<SentryAspNetCoreOptions>, SentryAspNetCoreOptionsSetup>();
logging.Services.AddSingleton<ILoggerProvider, SentryAspNetCoreLoggerProvider>();
logging.AddFilter<SentryAspNetCoreLoggerProvider>(
"Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware",
LogLevel.None);
logging.Services.AddSentry();
});
builder.ConfigureServices(c =>
{
c.AddTransient<IStartupFilter, SentryStartupFilter>();
});
return builder;
}
After
public static IWebHostBuilder UseSentry(
this IWebHostBuilder builder,
Action<WebHostBuilderContext, SentryAspNetCoreOptions>? configureOptions)
=> builder.UseSentry((context, sentryBuilder) =>
sentryBuilder.AddSentryOptions(options => configureOptions?.Invoke(context, options)));
public static ISentryBuilder AddSentryOptions(this ISentryBuilder builder,
Action<SentryAspNetCoreOptions>? configureOptions)
{
if (configureOptions != null)
{
builder.Services.Configure(configureOptions);
}
return builder;
}
@dotnet-actwx-bot @dotnet/compat