Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Om du migrerar till version 3.0 av .NET Core, ASP.NET Core eller EF Core kan ändringar med kompatibilitetsproblem som anges i den här artikeln påverka din app.
ASP.NET Kärna
- Föråldrade API:er för antiförfalskning, CORS, diagnostik, MVC och routning har tagits bort
- "Pubternal"-API:er har tagits bort
- Autentisering: Utfasning av Google+
- Autentisering: Egenskapen HttpContext.Authentication har tagits bort
- Autentisering: Newtonsoft.Json-typer ersatta
- Autentisering: OAuthHandler ExchangeCodeAsync-signaturen har ändrats
- Auktorisering: Överlagring av AddAuthorization har flyttats till en annan sammansättning
- Auktorisering: IAllowAnonymous har tagits bort från AuthorizationFilterContext.Filters
- Auktorisering: IAuthorizationPolicyProvider-implementeringar kräver ny metod
- Cachelagring: Egenskapen CompactOnMemoryPressure har tagits bort
- Cachelagring: Microsoft.Extensions.Caching.SqlServer använder nytt SqlClient-paket
- Cachelagring: "pubternal"-typer i ResponseCaching har ändrats till interna
- Dataskydd: DataProtection.Blobs använder nya Azure Storage-API:er
- Värdtjänst: AspNetCoreModule V1 har tagits bort från Windows Hosting Bundle
- Hostning: Generisk värd begränsar konstruktorinjektion vid start
- Värd: HTTPS-omdirigering aktiverad för IIS-appar utan processer
- Värd: IHostingEnvironment- och IApplicationLifetime-typerna har ersatts
- Värd: ObjectPoolProvider har tagits bort från WebHostBuilder-beroenden
- HTTP: Utökningsbarheten defaultHttpContext har tagits bort
- HTTP: HeaderNames-fält har ändrats till statiskt skrivskyddat
- HTTP: Infrastrukturändringar för svarstext
- HTTP: Vissa standardvärden för cookien SameSite har ändrats
- HTTP: Synkron I/O inaktiverad som standard
- Identitet: Överlagringen för AddDefaultUI-metod har tagits bort
- Identitet: Ändring av UI Bootstrap-version
- Identitet: SignInAsync genererar undantag för oautentiserad identitet
- Identitet: SignInManager-konstruktorn accepterar ny parameter
- Identitet: Användargränssnittet använder funktionen för statiska webbtillgångar
- Kestrel: Anslutningskort har tagits bort
- Kestrel: Tom HTTPS-sammansättning har tagits bort
- Kestrel: Begär att trailerhuvuden flyttas till ny samling
- Kestrel: Ändringar i transportabstraktionsskiktet
- Lokalisering: API:er markerade som föråldrade
- Loggning: DebugLogger-klassen har gjorts intern
- MVC: Async-suffix för kontrolleråtgärd har avlägsnats
- MVC: JsonResult har flyttats till Microsoft.AspNetCore.Mvc.Core
- MVC: Förkompileringsverktyget är inaktuellt
- MVC: Typer ändrade till interna
- MVC: Kompatibilitetsshim för webb-API har tagits bort
- Razor: RazorTemplateEngine API har tagits bort
- Razor: Runtime-kompilering har flyttats till ett paket
- Sessionstillstånd: Föråldrade API:er har tagits bort
- Delat ramverk: Borttagning av assembly från Microsoft.AspNetCore.App-ramverket
- Delat ramverk: Microsoft.AspNetCore.All har tagits bort
- SignalR: HandshakeProtocol.SuccessHandshakeData ersatt
- SignalR: HubConnection-metoder har tagits bort
- SignalR: HubConnectionContext-konstruktorer har ändrats
- SignalR: Namnändring av JavaScript-klientpaket
- SignalR: Föråldrade API:er
- SPA: SpaServices och NodeServices har markerats som föråldrade
- SPAs: Ändring av standardåterfall för SpaServices och NodeServices konsolloggning
- Målramverk: .NET Framework stöds inte
API:er för föråldrade åtgärder mot förfalskning, CORS, diagnostik, MVC och routning har tagits bort
Föråldrade medlemmar och kompatibilitetsväxlar i ASP.NET Core 2.2 har tagits bort.
Version införd
3,0
Orsak till ändringen
Förbättring av API-ytan över tid.
Rekommenderad åtgärd
När du riktar in dig på .NET Core 2.2 följer du vägledningen i de föråldrade byggmeddelandena för att använda nya API:er i stället.
Kategori
ASP.NET Kärna
Berörda API:er
Följande typer och medlemmar har markerats som föråldrade för ASP.NET Core 2.1 och 2.2:
Typer
Microsoft.AspNetCore.Diagnostics.Views.WelcomePageMicrosoft.AspNetCore.DiagnosticsViewPage.Views.AttributeValueMicrosoft.AspNetCore.DiagnosticsViewPage.Views.BaseViewMicrosoft.AspNetCore.DiagnosticsViewPage.Views.HelperResultMicrosoft.AspNetCore.Mvc.Formatters.Xml.ProblemDetails21WrapperMicrosoft.AspNetCore.Mvc.Formatters.Xml.ValidationProblemDetails21WrapperMicrosoft.AspNetCore.Mvc.Razor.Compilation.ViewsFeatureProviderMicrosoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageArgumentBinderMicrosoft.AspNetCore.Routing.IRouteValuesAddressMetadataMicrosoft.AspNetCore.Routing.RouteValuesAddressMetadata
Konstruktörer
Microsoft.AspNetCore.Cors.Infrastructure.CorsService(IOptions{CorsOptions})Microsoft.AspNetCore.Routing.Tree.TreeRouteBuilder(ILoggerFactory,UrlEncoder,ObjectPool{UriBuildingContext},IInlineConstraintResolver)Microsoft.AspNetCore.Mvc.Formatters.OutputFormatterCanWriteContextMicrosoft.AspNetCore.Mvc.ApiExplorer.DefaultApiDescriptionProvider(IOptions{MvcOptions},IInlineConstraintResolver,IModelMetadataProvider)Microsoft.AspNetCore.Mvc.ApiExplorer.DefaultApiDescriptionProvider(IOptions{MvcOptions},IInlineConstraintResolver,IModelMetadataProvider,IActionResultTypeMapper)Microsoft.AspNetCore.Mvc.Formatters.FormatFilter(IOptions{MvcOptions})Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ArrayModelBinder`1(IModelBinder)Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ByteArrayModelBinder- Microsoft.AspNetCore.Mvc.ModelBinding.Binders.CollectionModelBinder'1(IModelBinder)
- Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinder(IDictionary'2)
Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DictionaryModelBinder`2(IModelBinder,IModelBinder)Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DoubleModelBinder(System.Globalization.NumberStyles)Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FloatModelBinder(System.Globalization.NumberStyles)Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FormCollectionModelBinderMicrosoft.AspNetCore.Mvc.ModelBinding.Binders.FormFileModelBinderMicrosoft.AspNetCore.Mvc.ModelBinding.Binders.HeaderModelBinderMicrosoft.AspNetCore.Mvc.ModelBinding.Binders.KeyValuePairModelBinder`2(IModelBinder,IModelBinder)Microsoft.AspNetCore.Mvc.ModelBinding.Binders.SimpleTypeModelBinder(System.Type)Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes(IEnumerable{System.Object})Microsoft.AspNetCore.Mvc.ModelBinding.ModelAttributes(IEnumerable{System.Object},IEnumerable{System.Object})Microsoft.AspNetCore.Mvc.ModelBinding.ModelBinderFactory(IModelMetadataProvider,IOptions{MvcOptions})Microsoft.AspNetCore.Mvc.ModelBinding.ParameterBinder(IModelMetadataProvider,IModelBinderFactory,IObjectModelValidator)- Microsoft.AspNetCore.Mvc.Routing.KnownRouteValueConstraint()
Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerInputFormatterMicrosoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerInputFormatter(System.Boolean)Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerInputFormatter(MvcOptions)Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerInputFormatterMicrosoft.AspNetCore.Mvc.Formatters.XmlSerializerInputFormatter(System.Boolean)Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerInputFormatter(MvcOptions)- Microsoft.AspNetCore.Mvc.TagHelpers.ImageTagHelper(IHostingEnvironment,IMemoryCache,HtmlEncoder,IUrlHelperFactory)
Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper(IHostingEnvironment,IMemoryCache,HtmlEncoder,JavaScriptEncoder,IUrlHelperFactory)Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper(IHostingEnvironment,IMemoryCache,HtmlEncoder,JavaScriptEncoder,IUrlHelperFactory)Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAdapter(RazorPageBase)
Egenskaper
Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.CookieDomainMicrosoft.AspNetCore.Antiforgery.AntiforgeryOptions.CookieNameMicrosoft.AspNetCore.Antiforgery.AntiforgeryOptions.CookiePathMicrosoft.AspNetCore.Antiforgery.AntiforgeryOptions.RequireSslMicrosoft.AspNetCore.Mvc.ApiBehaviorOptions.AllowInferringBindingSourceForCollectionTypesAsFromQueryMicrosoft.AspNetCore.Mvc.ApiBehaviorOptions.SuppressUseValidationProblemDetailsForInvalidModelStateResponsesMicrosoft.AspNetCore.Mvc.CookieTempDataProviderOptions.CookieNameMicrosoft.AspNetCore.Mvc.CookieTempDataProviderOptions.DomainMicrosoft.AspNetCore.Mvc.CookieTempDataProviderOptions.PathMicrosoft.AspNetCore.Mvc.DataAnnotations.MvcDataAnnotationsLocalizationOptions.AllowDataAnnotationsLocalizationForEnumDisplayAttributesMicrosoft.AspNetCore.Mvc.Formatters.Xml.MvcXmlOptions.AllowRfc7807CompliantProblemDetailsFormatMicrosoft.AspNetCore.Mvc.MvcOptions.AllowBindingHeaderValuesToNonStringModelTypesMicrosoft.AspNetCore.Mvc.MvcOptions.AllowCombiningAuthorizeFiltersMicrosoft.AspNetCore.Mvc.MvcOptions.AllowShortCircuitingValidationWhenNoValidatorsArePresentMicrosoft.AspNetCore.Mvc.MvcOptions.AllowValidatingTopLevelNodesMicrosoft.AspNetCore.Mvc.MvcOptions.InputFormatterExceptionPolicyMicrosoft.AspNetCore.Mvc.MvcOptions.SuppressBindingUndefinedValueToEnumTypeMicrosoft.AspNetCore.Mvc.MvcViewOptions.AllowRenderingMaxLengthAttributeMicrosoft.AspNetCore.Mvc.MvcViewOptions.SuppressTempDataAttributePrefixMicrosoft.AspNetCore.Mvc.RazorPages.RazorPagesOptions.AllowAreasMicrosoft.AspNetCore.Mvc.RazorPages.RazorPagesOptions.AllowDefaultHandlingForOptionsRequestsMicrosoft.AspNetCore.Mvc.RazorPages.RazorPagesOptions.AllowMappingHeadRequestsToGetHandler
Metoder
Microsoft.AspNetCore.Mvc.LocalRedirectResult.ExecuteResult(ActionContext)Microsoft.AspNetCore.Mvc.RedirectResult.ExecuteResult(ActionContext)Microsoft.AspNetCore.Mvc.RedirectToActionResult.ExecuteResult(ActionContext)Microsoft.AspNetCore.Mvc.RedirectToPageResult.ExecuteResult(ActionContext)Microsoft.AspNetCore.Mvc.RedirectToRouteResult.ExecuteResult(ActionContext)Microsoft.AspNetCore.Mvc.ModelBinding.ParameterBinder.BindModelAsync(ActionContext,IValueProvider,ParameterDescriptor)- Microsoft.AspNetCore.Mvc.ModelBinding.ParameterBinder.BindModelAsync(ActionContext,IValueProvider,ParameterDescriptor,Object)
"Pubternal"-API:er har tagits bort
För att bättre underhålla den offentliga API-ytan för ASP.NET Core har de flesta typerna i *.Internal namnområden (kallas "pubternal" API:er) blivit verkligt interna. Medlemmar i dessa namnområden var aldrig avsedda att stödjas som offentliga API:er. API:erna kunde brytas i mindre uppdateringar och gjorde det ofta. Kod som är beroende av dessa API:er bryts vid uppdatering till ASP.NET Core 3.0.
Mer information finns i dotnet/aspnetcore#4932 och dotnet/aspnetcore#11312.
Version införd
3,0
Gammalt beteende
De berörda API:erna markeras med public åtkomstmodifieraren och finns i *.Internal namnområden.
Nytt beteende
De berörda API:erna markeras med den interna åtkomstmodifieraren och kan inte längre användas av kod utanför sammansättningen.
Orsak till ändringen
Vägledningen för dessa "pubternal" API:er var att de:
- Kan ändras utan förvarning.
- Var inte underkastade .NET-policyer för att förhindra icke-bakåtkompatibla ändringar.
Att hålla kvar API:erna public (även i *.Internal namnrum) var förvirrande för kunderna.
Rekommenderad åtgärd
Sluta använda dessa "pubternal" API:er. Om du har frågor om alternativa API:er öppnar du ett problem på dotnet/aspnetcore-lagringsplatsen .
Tänk dig till exempel följande HTTP-begärandebuffertningskod i ett ASP.NET Core 2.2-projekt. Tilläggsmetoden EnableRewind finns i Microsoft.AspNetCore.Http.Internal namnområdet.
HttpContext.Request.EnableRewind();
I ett ASP.NET Core 3.0-projekt ersätter du anropet EnableRewind med ett anrop till EnableBuffering tilläggsmetoden. Funktionen för buffring av begäranden fungerar som den gjorde tidigare.
EnableBuffering anropar API:n 'now' internal.
HttpContext.Request.EnableBuffering();
Kategori
ASP.NET Kärna
Berörda API:er
Alla API:er i Microsoft.AspNetCore.* namnrymderna och Microsoft.Extensions.* som har ett Internal segment i namnområdets namn. Till exempel:
Microsoft.AspNetCore.Authentication.InternalMicrosoft.AspNetCore.Builder.InternalMicrosoft.AspNetCore.DataProtection.Cng.InternalMicrosoft.AspNetCore.DataProtection.InternalMicrosoft.AspNetCore.Hosting.InternalMicrosoft.AspNetCore.Http.InternalMicrosoft.AspNetCore.Mvc.Core.InfrastructureMicrosoft.AspNetCore.Mvc.Core.InternalMicrosoft.AspNetCore.Mvc.Cors.InternalMicrosoft.AspNetCore.Mvc.DataAnnotations.InternalMicrosoft.AspNetCore.Mvc.Formatters.InternalMicrosoft.AspNetCore.Mvc.Formatters.Json.InternalMicrosoft.AspNetCore.Mvc.Formatters.Xml.InternalMicrosoft.AspNetCore.Mvc.InternalMicrosoft.AspNetCore.Mvc.ModelBinding.InternalMicrosoft.AspNetCore.Mvc.Razor.InternalMicrosoft.AspNetCore.Mvc.RazorPages.InternalMicrosoft.AspNetCore.Mvc.TagHelpers.InternalMicrosoft.AspNetCore.Mvc.ViewFeatures.InternalMicrosoft.AspNetCore.Rewrite.InternalMicrosoft.AspNetCore.Routing.InternalMicrosoft.AspNetCore.Server.Kestrel.Core.Adapter.InternalMicrosoft.AspNetCore.Server.Kestrel.Core.Internal.HttpMicrosoft.AspNetCore.Server.Kestrel.Core.Internal.InfrastructureMicrosoft.AspNetCore.Server.Kestrel.Https.Internal
Autentisering: Google+ inaktuellt och ersatt
Google började stänga google+ inloggning för appar redan den 28 januari 2019.
Ändra beskrivning
ASP.NET 4.x och ASP.NET Core har använt API:erna för Google+ inloggning för att autentisera Google-kontoanvändare i webbappar. De aktuella NuGet-paketen är Microsoft.AspNetCore.Authentication.Google för ASP.NET Core och Microsoft.Owin.Security.Google för Microsoft.Owin med ASP.NET Web Forms och MVC.
Googles ersättnings-API:er använder en annan datakälla och ett annat format. De åtgärder och lösningar som tillhandahålls nedan tar hänsyn till de strukturella förändringarna. Appar bör kontrollera att själva data fortfarande uppfyller sina krav. Namn, e-postadresser, profillänkar och profilfoton kan till exempel ge andra värden än tidigare.
Version införd
Alla versioner. Den här ändringen är extern för ASP.NET Core.
Rekommenderad åtgärd
Owin med ASP.NET Webbformulär och MVC
För Microsoft.Owin 3.1.0 och senare beskrivs en tillfällig åtgärd i Google+ avstängningens påverkan. Appar bör slutföra testningen med åtgärden för att kontrollera ändringar i dataformatet. Det finns planer på att släppa Microsoft.Owin 4.0.1 med en korrigering. Appar som använder en tidigare version bör uppdateras till version 4.0.1.
ASP.NET Core 1.x
Minskningen i Owin med ASP.NET Web Forms och MVC kan anpassas till ASP.NET Core 1.x. NuGet-paketkorrigeringar är inte planerade eftersom 1.x har nått livslängdens slut.
ASP.NET Core 2.x
För Microsoft.AspNetCore.Authentication.Google version 2.x ersätter du ditt befintliga anrop till AddGoogle i Startup.ConfigureServices med följande kod:
.AddGoogle(o =>
{
o.ClientId = Configuration["Authentication:Google:ClientId"];
o.ClientSecret = Configuration["Authentication:Google:ClientSecret"];
o.UserInformationEndpoint = "https://www.googleapis.com/oauth2/v2/userinfo";
o.ClaimActions.Clear();
o.ClaimActions.MapJsonKey(ClaimTypes.NameIdentifier, "id");
o.ClaimActions.MapJsonKey(ClaimTypes.Name, "name");
o.ClaimActions.MapJsonKey(ClaimTypes.GivenName, "given_name");
o.ClaimActions.MapJsonKey(ClaimTypes.Surname, "family_name");
o.ClaimActions.MapJsonKey("urn:google:profile", "link");
o.ClaimActions.MapJsonKey(ClaimTypes.Email, "email");
});
Korrigeringarna 2.1 och 2.2 februari inkorporerade den föregående omkonfigurationen som det nya standardvärdet. Ingen korrigering planeras för ASP.NET Core 2.0 eftersom den har nått slutet av livet.
ASP.NET Core 3.0
Den lösning som föreslås för ASP.NET Core 2.x kan också användas för ASP.NET Core 3.0. I framtida förhandsversioner Microsoft.AspNetCore.Authentication.Google av 3.0 kan paketet tas bort. Användare dirigeras till Microsoft.AspNetCore.Authentication.OpenIdConnect i stället. Följande kod visar hur du ersätter AddGoogle med AddOpenIdConnect i Startup.ConfigureServices. Den här ersättningen kan användas med ASP.NET Core 2.0 och senare och kan anpassas för ASP.NET Core 1.x efter behov.
.AddOpenIdConnect("Google", o =>
{
o.ClientId = Configuration["Authentication:Google:ClientId"];
o.ClientSecret = Configuration["Authentication:Google:ClientSecret"];
o.Authority = "https://accounts.google.com";
o.ResponseType = OpenIdConnectResponseType.Code;
o.CallbackPath = "/signin-google"; // Or register the default "/signin-oidc"
o.Scope.Add("email");
});
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
Kategori
ASP.NET Kärna
Berörda API:er
Microsoft.AspNetCore.Authentication.Google
Autentisering: Egenskapen HttpContext.Authentication har tagits bort
Den inaktuella Authentication egenskapen på HttpContext har tagits bort.
Ändra beskrivning
Som en del av dotnet/aspnetcore#6504 har den inaktuella Authentication egenskapen på HttpContext tagits bort. Egenskapen Authentication har varit inaktuell sedan 2.0. En migreringsguide publicerades för att migrera kod med den här inaktuella egenskapen till de nya ersättnings-API:erna. De återstående oanvända klasserna/API:erna som är relaterade till den gamla ASP.NET Core 1.x-autentiseringsstacken togs bort i commit dotnet/aspnetcore@d7a7c65.
Mer information finns i dotnet/aspnetcore#6533.
Version införd
3,0
Orsak till ändringen
ASP.NET Core 1.0 API:er har ersatts med tilläggsmetoder i Microsoft.AspNetCore.Authentication.AuthenticationHttpContextExtensions.
Rekommenderad åtgärd
Kategori
ASP.NET Kärna
Berörda API:er
- Microsoft.AspNetCore.Http.Authentication.AuthenticateInfo
- Microsoft.AspNetCore.Http.Authentication.AuthenticationManager
- Microsoft.AspNetCore.Http.Authentication.AuthenticationProperties
- Microsoft.AspNetCore.Http.Features.Authentication.AuthenticateContext
- Microsoft.AspNetCore.Http.Features.Authentication.ChallengeBehavior
- Microsoft.AspNetCore.Http.Features.Authentication.ChallengeContext
- Microsoft.AspNetCore.Http.Features.Authentication.DescribeSchemesContext
- Microsoft.AspNetCore.Http.Features.Authentication.IAuthenticationHandler
- Microsoft.AspNetCore.Http.Features.Authentication.IHttpAuthenticationFeature.Handler
- Microsoft.AspNetCore.Http.Features.Authentication.SignInContext
- Microsoft.AspNetCore.Http.Features.Authentication.SignOutContext
- Microsoft.AspNetCore.Http.HttpContext.Authentication
Autentisering: Newtonsoft.Json-typer ersatta
I ASP.NET Core 3.0 Newtonsoft.Json har typer som används i autentiserings-API:er ersatts med System.Text.Json typer. Förutom i följande fall påverkas inte grundläggande användning av autentiseringspaketen:
- Klasser som härleds från OAuth-leverantörerna, till exempel de från aspnet-contrib.
- Avancerade implementeringar av anspråksmanipulering.
Mer information finns i dotnet/aspnetcore#7105. Mer information finns i dotnet/aspnetcore#7289.
Version införd
3,0
Rekommenderad åtgärd
För härledda OAuth-implementeringar är den vanligaste ändringen att ersätta JObject.Parse med JsonDocument.Parse i åsidosättningen CreateTicketAsync som visas i dotnet/aspnetcore#7105.
JsonDocument implementerar IDisposable.
I följande lista beskrivs kända ändringar:
-
ClaimAction.Run(JObject, ClaimsIdentity, String) blir
ClaimAction.Run(JsonElement userData, ClaimsIdentity identity, string issuer). Alla härledda implementeringar avClaimActionpåverkas på samma sätt. -
ClaimActionCollectionMapExtensions.MapCustomJson(ClaimActionCollection, String, Func<JObject,String>) blir
MapCustomJson(this ClaimActionCollection collection, string claimType, Func<JsonElement, string> resolver) -
ClaimActionCollectionMapExtensions.MapCustomJson(ClaimActionCollection, String, String, Func<JObject,String>) blir
MapCustomJson(this ClaimActionCollection collection, string claimType, string valueType, Func<JsonElement, string> resolver) -
OAuthCreatingTicketContext har fått en gammal konstruktor borttagen och den andra har ersatts
JObjectmedJsonElement. EgenskapenUserochRunClaimActionsmetoden har uppdaterats så att de matchar. -
Success(JObject) accepterar nu en parameter av typen
JsonDocumenti stället förJObject. EgenskapenResponsehar uppdaterats så att den matchar.OAuthTokenResponseär nu disponibel och kommer att tas bort avOAuthHandler. Härledda OAuth-implementeringar somExchangeCodeAsyncåsidosätter behöver inte ta bortJsonDocumentellerOAuthTokenResponse. -
UserInformationReceivedContext.User har ändrats från
JObjecttillJsonDocument. -
TwitterCreatingTicketContext.User har ändrats från
JObjecttillJsonElement. - Den sista parametern för TwitterHandler.CreateTicketAsync(ClaimsIdentity,AuthenticationProperties,AccessToken,JObject) har ändrats från
JObjecttillJsonElement. Ersättningsmetoden är TwitterHandler.CreateTicketAsync(ClaimsIdentity, AuthenticationProperties, AccessToken, JsonElement).
Kategori
ASP.NET Kärna
Berörda API:er
- Microsoft.AspNetCore.Authentication.Facebook
- Microsoft.AspNetCore.Authentication.Google
- Microsoft.AspNetCore.Authentication.MicrosoftAccount
- Microsoft.AspNetCore.Authentication.OAuth
- Microsoft.AspNetCore.Authentication.OpenIdConnect
- Microsoft.AspNetCore.Authentication.Twitter
Autentisering: OAuthHandler ExchangeCodeAsync-signaturen har ändrats
I ASP.NET Core 3.0 ändrades signaturen OAuthHandler.ExchangeCodeAsync för från:
protected virtual System.Threading.Tasks.Task<Microsoft.AspNetCore.Authentication.OAuth.OAuthTokenResponse> ExchangeCodeAsync(string code, string redirectUri) { throw null; }
Till:
protected virtual System.Threading.Tasks.Task<Microsoft.AspNetCore.Authentication.OAuth.OAuthTokenResponse> ExchangeCodeAsync(Microsoft.AspNetCore.Authentication.OAuth.OAuthCodeExchangeContext context) { throw null; }
Version införd
3,0
Gammalt beteende
Strängarna code och redirectUri skickades som separata argument.
Nytt beteende
Code och RedirectUri är egenskaper på OAuthCodeExchangeContext som kan anges via OAuthCodeExchangeContext konstruktorn. Den nya OAuthCodeExchangeContext typen är det enda argumentet som skickas till OAuthHandler.ExchangeCodeAsync.
Orsak till ändringen
Den här ändringen gör att ytterligare parametrar kan tillhandahållas på ett icke-störande sätt. Du behöver inte skapa nya ExchangeCodeAsync överladdningar.
Rekommenderad åtgärd
Konstruera en OAuthCodeExchangeContext med lämpliga code värden och redirectUri värden. En AuthenticationProperties instans måste anges. Den här enskilda OAuthCodeExchangeContext instansen kan skickas till OAuthHandler.ExchangeCodeAsync i stället för flera argument.
Kategori
ASP.NET Kärna
Berörda API:er
OAuthHandler<TOptions>.ExchangeCodeAsync(String, String)
Auktorisering: Överlagring av AddAuthorization har flyttats till en annan sammansättning
De kärnmetoder AddAuthorization som användes för att finnas i Microsoft.AspNetCore.Authorization har bytt namn till AddAuthorizationCore. De gamla AddAuthorization metoderna finns fortfarande, men finns i sammansättningen i Microsoft.AspNetCore.Authorization.Policy stället. Appar som använder båda metoderna bör inte se någon inverkan. Observera att Microsoft.AspNetCore.Authorization.Policy nu levereras i det delade ramverket i stället för ett fristående paket enligt beskrivningen i Delat ramverk: Sammansättningar som tagits bort från Microsoft.AspNetCore.App.
Version införd
3,0
Gammalt beteende
AddAuthorization metoder fanns i Microsoft.AspNetCore.Authorization.
Nytt beteende
AddAuthorization metoder finns i Microsoft.AspNetCore.Authorization.Policy.
AddAuthorizationCore är det nya namnet på de gamla metoderna.
Orsak till ändringen
AddAuthorization är ett bättre metodnamn för att lägga till alla vanliga tjänster som behövs för auktorisering.
Rekommenderad åtgärd
Lägg antingen till en referens till Microsoft.AspNetCore.Authorization.Policy eller använd AddAuthorizationCore i stället.
Kategori
ASP.NET Kärna
Berörda API:er
Auktorisering: IAllowAnonymous har tagits bort från AuthorizationFilterContext.Filters
Från och med ASP.NET Core 3.0 lägger MVC inte till AllowAnonymousFilters för [AllowAnonymous] -attribut som identifierades på kontrollanter och åtgärdsmetoder. Den här ändringen åtgärdas lokalt för derivat av AuthorizeAttribute, men det är en icke-bakåtkompatibel ändring för IAsyncAuthorizationFilter och IAuthorizationFilter implementeringar. Sådana implementeringar omslutna i ett [TypeFilter]-attribut är ett populärt och stödsatt sätt för att uppnå starktypad, attributbaserad auktorisering när både konfiguration och beroendeinjektion krävs.
Version införd
3,0
Gammalt beteende
IAllowAnonymous dök upp i samlingen AuthorizationFilterContext.Filters . Testning av gränssnittets närvaro var en giltig metod för att åsidosätta eller inaktivera filtret på enskilda kontrollantmetoder.
Nytt beteende
IAllowAnonymous visas inte längre i AuthorizationFilterContext.Filters samlingen.
IAsyncAuthorizationFilter implementeringar som är beroende av det gamla beteendet orsakar vanligtvis tillfälliga HTTP 401-otillåtna eller HTTP 403-otillåtna svar.
Orsak till ändringen
En ny strategi för slutpunktsroutning introducerades i ASP.NET Core 3.0.
Rekommenderad åtgärd
Sök efter slutpunktsmetadata för IAllowAnonymous. Till exempel:
var endpoint = context.HttpContext.GetEndpoint();
if (endpoint?.Metadata?.GetMetadata<IAllowAnonymous>() != null)
{
}
Ett exempel på den här tekniken visas i den här Metoden HasAllowAnonymous.
Kategori
ASP.NET Kärna
Berörda API:er
Ingen
Auktorisering: IAuthorizationPolicyProvider-implementeringar kräver ny metod
I ASP.NET Core 3.0 lades en ny GetFallbackPolicyAsync metod till i IAuthorizationPolicyProvider. Den här reservprincipen används av auktoriseringsmellanprogrammet när ingen princip har angetts.
Mer information finns i dotnet/aspnetcore#9759.
Version införd
3,0
Gammalt beteende
Implementeringar av IAuthorizationPolicyProvider krävde inte någon GetFallbackPolicyAsync metod.
Nytt beteende
Implementeringar av IAuthorizationPolicyProvider kräver en GetFallbackPolicyAsync metod.
Orsak till ändringen
En ny metod behövdes för att den nya AuthorizationMiddleware ska kunna användas när ingen princip har angetts.
Rekommenderad åtgärd
Lägg till GetFallbackPolicyAsync-metoden i dina implementeringar av IAuthorizationPolicyProvider.
Kategori
ASP.NET Kärna
Berörda API:er
Microsoft.AspNetCore.Authorization.IAuthorizationPolicyProvider
Cachelagring: Egenskapen CompactOnMemoryPressure har tagits bort
Versionen ASP.NET Core 3.0 tog bort föråldrade API:er för MemoryCacheOptions.
Ändra beskrivning
Den här ändringen är en uppföljning till aspnet/Caching#221. Mer information finns i dotnet/extensions#1062.
Version införd
3,0
Gammalt beteende
MemoryCacheOptions.CompactOnMemoryPressure egenskapen var tillgänglig.
Nytt beteende
Egenskapen MemoryCacheOptions.CompactOnMemoryPressure har tagits bort.
Orsak till ändringen
Att komprimera cacheminnet automatiskt orsakade problem. För att undvika oväntat beteende bör cachen bara komprimeras när det behövs.
Rekommenderad åtgärd
Komprimera cachen genom att nedarbeta till MemoryCache och anropa Compact vid behov.
Kategori
ASP.NET Kärna
Berörda API:er
MemoryCacheOptions.CompactOnMemoryPressure
Cachelagring: Microsoft.Extensions.Caching.SqlServer använder nytt SqlClient-paket
Paketet Microsoft.Extensions.Caching.SqlServer kommer att använda det nya Microsoft.Data.SqlClient paketet i stället för System.Data.SqlClient paketet. Den här ändringen kan orsaka mindre beteendemässiga icke-bakåtkompatibla ändringar. Mer information finns i Introduktion till nya Microsoft.Data.SqlClient.
Version införd
3,0
Gammalt beteende
Paketet Microsoft.Extensions.Caching.SqlServer använde System.Data.SqlClient paketet.
Nytt beteende
Microsoft.Extensions.Caching.SqlServer använder nu paketet Microsoft.Data.SqlClient .
Orsak till ändringen
Microsoft.Data.SqlClient är ett nytt paket som är byggt av System.Data.SqlClient. Det är där allt arbete med nya funktioner kommer att utföras från och med nu.
Rekommenderad åtgärd
Kunder bör inte behöva oroa sig för den här ändringen om de inte har använt typer som returneras av Microsoft.Extensions.Caching.SqlServer paketet och gjuter om dem till System.Data.SqlClient typer. Om någon till exempel kastade en DbConnection till den gamla SqlConnection-typen skulle de behöva ändra casten till den nya Microsoft.Data.SqlClient.SqlConnection typen.
Kategori
ASP.NET Kärna
Berörda API:er
Ingen
Cachelagring: ResponseCaching"pubternal"-typer har ändrats till interna
I ASP.NET Core 3.0 har "pubternal"-typerna i ResponseCaching ändrats till internal.
Dessutom läggs standardimplementeringar av IResponseCachingPolicyProvider och IResponseCachingKeyProvider inte längre till i tjänster som en del av AddResponseCaching metoden.
Ändra beskrivning
I ASP.NET Core deklareras "pubternal"-typer som public men finns i ett namnområdessuffix med .Internal. Även om dessa typer är offentliga har de ingen supportprincip och kan komma att ändras. Tyvärr har oavsiktlig användning av dessa typer varit vanligt, vilket resulterar i störande förändringar i dessa projekt och begränsar möjligheten att underhålla ramverket.
Version införd
3,0
Gammalt beteende
Dessa typer var offentligt synliga, men stöds inte.
Nytt beteende
Dessa typer är nu internal.
Orsak till ändringen
Omfånget internal återspeglar bättre principen som inte stöds.
Rekommenderad åtgärd
Kopiera typer som används av din app eller ditt bibliotek.
Kategori
ASP.NET Kärna
Berörda API:er
Microsoft.AspNetCore.ResponseCaching.Internal.CachedResponseMicrosoft.AspNetCore.ResponseCaching.Internal.CachedVaryByRulesMicrosoft.AspNetCore.ResponseCaching.Internal.IResponseCacheMicrosoft.AspNetCore.ResponseCaching.Internal.IResponseCacheEntryMicrosoft.AspNetCore.ResponseCaching.Internal.IResponseCachingKeyProviderMicrosoft.AspNetCore.ResponseCaching.Internal.IResponseCachingPolicyProviderMicrosoft.AspNetCore.ResponseCaching.Internal.MemoryResponseCacheMicrosoft.AspNetCore.ResponseCaching.Internal.ResponseCachingContextMicrosoft.AspNetCore.ResponseCaching.Internal.ResponseCachingKeyProviderMicrosoft.AspNetCore.ResponseCaching.Internal.ResponseCachingPolicyProvider- Microsoft.AspNetCore.ResponseCaching.ResponseCachingMiddleware.ResponseCachingMiddleware(RequestDelegate, IOptions<ResponseCachingOptions>, ILoggerFactory, IResponseCachingPolicyProvider, IResponseCache, IResponseCachingKeyProvider)
Dataskydd: DataProtection.Blobs använder nya Azure Storage-API:er
Azure.Extensions.AspNetCore.DataProtection.Blobsberor på Azure Storage-biblioteken. Biblioteken bytte namn på sina sammansättningar, paket och namnområden. Från och med ASP.NET Core 3.0 använder Azure.Extensions.AspNetCore.DataProtection.Blobs de nya Azure.Storage.-prefix-API:erna och paketen.
Om du vill ha frågor om Azure Storage-API:er använder du https://github.com/Azure/azure-storage-net. Information om det här problemet finns i dotnet/aspnetcore#19570.
Version införd
3,0
Gammalt beteende
Paketet refererade till NuGet-paketet WindowsAzure.Storage .
Paketet refererar till NuGet-paketet Microsoft.Azure.Storage.Blob .
Nytt beteende
Paketet refererar till NuGet-paketet Azure.Storage.Blob .
Orsak till ändringen
Med den här ändringen kan Azure.Extensions.AspNetCore.DataProtection.Blobs du migrera till de rekommenderade Azure Storage-paketen.
Rekommenderad åtgärd
Om du fortfarande behöver använda äldre Azure Storage-API:er med ASP.NET Core 3.0 lägger du till ett direkt beroende till paketet WindowsAzure.Storage eller Microsoft.Azure.Storage. Det här paketet kan installeras tillsammans med de nya Azure.Storage API:erna.
I många fall innebär uppgraderingen endast att du ändrar using instruktionerna så att de nya namnrymderna används:
- using Microsoft.WindowsAzure.Storage;
- using Microsoft.WindowsAzure.Storage.Blob;
- using Microsoft.Azure.Storage;
- using Microsoft.Azure.Storage.Blob;
+ using Azure.Storage;
+ using Azure.Storage.Blobs;
Kategori
ASP.NET Kärna
Berörda API:er
Ingen
Värd: AspNetCoreModule V1 har tagits bort från Windows Hosting Bundle
Från och med ASP.NET Core 3.0 innehåller Windows Hosting Bundle inte AspNetCoreModule (ANCM) V1.
ANCM V2 är bakåtkompatibelt med ANCM OutOfProcess och rekommenderas för användning med ASP.NET Core 3.0-appar.
Mer information finns i dotnet/aspnetcore#7095.
Version införd
3,0
Gammalt beteende
ANCM V1 ingår i Windows-värdtjänstpaketet.
Nytt beteende
ANCM V1 ingår inte i Windows Hosting-paketet.
Orsak till ändringen
ANCM V2 är bakåtkompatibelt med ANCM OutOfProcess och rekommenderas för användning med ASP.NET Core 3.0-appar.
Rekommenderad åtgärd
Använd ANCM V2 med ASP.NET Core 3.0-appar.
Om ANCM V1 krävs kan det installeras med hjälp av ASP.NET Core 2.1 eller 2.2 Windows Hosting Bundle.
Den här ändringen bryter ASP.NET Core 3.0-appar som:
- Har uttryckligen valt att använda ANCM V1 med
<AspNetCoreModuleName>AspNetCoreModule</AspNetCoreModuleName>. - Ha en anpassad web.config-fil med
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />.
Kategori
ASP.NET Kärna
Berörda API:er
Ingen
Värd: Generisk värd begränsar injektion i startkonstruktorn
De enda typer som den generiska värden stöder för Startup klasskonstruktorinmatning är IHostEnvironment, IWebHostEnvironmentoch IConfiguration. Appar som använder WebHost påverkas inte.
Ändra beskrivning
Före ASP.NET Core 3.0 kan konstruktorinmatning användas för godtyckliga typer i Startup klassens konstruktor. I ASP.NET Core 3.0 omplatformades webbstacken till det allmänna värdbiblioteket. Du kan se ändringen i Program.cs-filen för mallarna:
ASP.NET Core 2.x:
ASP.NET Core 3.0:
Host använder en di-container (dependency injection) för att skapa appen.
WebHost använder två containrar: en för värdplattformen och en för appen. Därför stöder Startup-konstruktorn inte längre anpassad tjänstinjektion. Endast IHostEnvironment, IWebHostEnvironment, och IConfiguration kan matas in. Den här ändringen förhindrar DI-problem, till exempel duplicerade skapande av en singleton-tjänst.
Version införd
3,0
Orsak till ändringen
Den här ändringen är en följd av att webbstacken har omformats till det allmänna värdbiblioteket.
Rekommenderad åtgärd
Mata in tjänster i metodsignaturen Startup.Configure . Till exempel:
public void Configure(IApplicationBuilder app, IOptions<MyOptions> options)
Kategori
ASP.NET Kärna
Berörda API:er
Ingen
Värdtjänst: HTTPS-omdirigering aktiverad för IIS-appar som körs utanför processen
Version 13.0.19218.0 av ASP.NET Core Module (ANCM) för värd via IIS out-of-process möjliggör en befintlig HTTPS-omdirigeringsfunktion för ASP.NET Core 3.0- och 2.2-appar.
Mer information finns i dotnet/AspNetCore#15243.
Version införd
3,0
Gammalt beteende
Projektmallen ASP.NET Core 2.1 introducerade först stöd för HTTPS-mellanprogramsmetoder som UseHttpsRedirection och UseHsts. Att aktivera HTTPS-omdirigering krävde tillägg av konfigurationen, eftersom appar under utveckling inte använder standardporten 443. HTTP Strict Transport Security (HSTS) är endast aktivt om begäran redan använder HTTPS. Localhost hoppar över som standardinställning.
Nytt beteende
I ASP.NET Core 3.0 förbättrades IIS HTTPS-scenariot. Med förbättringen kan en app identifiera serverns HTTPS-portar och få det att UseHttpsRedirection fungera som standard. Den processbaserade komponenten utförde portidentifiering med IServerAddresses funktionen, som endast påverkar ASP.NET Core 3.0-appar eftersom det pågående biblioteket är versionshanterat med ramverket. Komponenten out-of-process ändrades för att automatiskt lägga till ASPNETCORE_HTTPS_PORT miljövariabeln. Den här ändringen påverkade både ASP.NET Core 2.2- och 3.0-appar eftersom out-of-process-komponenten delas globalt. ASP.NET Core 2.1-appar påverkas inte eftersom de använder en tidigare version av ANCM som standard.
Föregående beteende ändrades i ASP.NET Core 3.0.1 och 3.1.0 Preview 3 för att ändra beteendeändringarna i ASP.NET Core 2.x. Dessa ändringar påverkar bara IIS-appar som inte är i processen.
Som beskrivs ovan hade installationen av ASP.NET Core 3.0.0 bieffekten att även aktivera UseHttpsRedirection-mellanprogrammet i ASP.NET Core 2.x-appar. En ändring gjordes i ANCM i ASP.NET Core 3.0.1 och 3.1.0 Preview 3 så att installation av dem inte längre har den här effekten på ASP.NET Core 2.x-appar. Miljövariabeln ASPNETCORE_HTTPS_PORT som ANCM fyllde i i ASP.NET Core 3.0.0 ändrades till ASPNETCORE_ANCM_HTTPS_PORT i ASP.NET Core 3.0.1 och 3.1.0 Preview 3.
UseHttpsRedirection uppdaterades också i dessa versioner för att förstå både de nya och gamla variablerna. ASP.NET Core 2.x uppdateras inte. Det innebär att den återgår till det tidigare beteendet att inaktiveras som standard.
Orsak till ändringen
Förbättrade funktioner i ASP.NET Core 3.0.
Rekommenderad åtgärd
Ingen åtgärd krävs om du vill att alla klienter ska använda HTTPS. Gör något av följande för att tillåta att vissa klienter använder HTTP:
Ta bort anropen till
UseHttpsRedirectionochUseHstsfrån projektetsStartup.Configuremetod och distribuera om appen.I filen web.config anger du
ASPNETCORE_HTTPS_PORTmiljövariabeln till en tom sträng. Den här ändringen kan ske direkt på servern utan att omdistribuera appen. Till exempel:<aspNetCore processPath="dotnet" arguments=".\WebApplication3.dll" stdoutLogEnabled="false" stdoutLogFile="\\?\%home%\LogFiles\stdout" > <environmentVariables> <environmentVariable name="ASPNETCORE_HTTPS_PORT" value="" /> </environmentVariables> </aspNetCore>
UseHttpsRedirection kan fortfarande vara:
- Aktiveras manuellt i ASP.NET Core 2.x genom att ställa in
ASPNETCORE_HTTPS_PORTmiljövariabeln på lämpligt portnummer (443 i de flesta produktionsscenarier). - Inaktiverad i ASP.NET Core 3.x genom att
ASPNETCORE_ANCM_HTTPS_PORTdefiniera med ett tomt strängvärde. Det här värdet anges på samma sätt som föregåendeASPNETCORE_HTTPS_PORTexempel.
Datorer som kör ASP.NET Core 3.0.0-appar bör installera ASP.NET Core 3.0.1-körningen innan du installerar ASP.NET Core 3.1.0 Förhandsversion 3 ANCM. Detta säkerställer att UseHttpsRedirection fortsätter att fungera som förväntat, för ASP.NET Core 3.0-appar.
I Azure App Service distribuerar ANCM enligt ett separat schema från körningen på grund av dess globala karaktär. ANCM distribuerades till Azure med dessa ändringar efter att ASP.NET Core 3.0.1 och 3.1.0 distribuerats.
Kategori
ASP.NET Kärna
Berörda API:er
HttpsPolicyBuilderExtensions.UseHttpsRedirection(IApplicationBuilder)
Värd: IHostingEnvironment- och IApplicationLifetime-typer markerade föråldrade och ersatta
Nya typer har introducerats för att ersätta befintliga IHostingEnvironment och IApplicationLifetime typer.
Version införd
3,0
Gammalt beteende
Det fanns två olika IHostingEnvironment typer från IApplicationLifetimeMicrosoft.Extensions.Hosting och Microsoft.AspNetCore.Hosting.
Nytt beteende
De gamla typerna har markerats som föråldrade och ersatta med nya typer.
Orsak till ändringen
När Microsoft.Extensions.Hosting introducerades i ASP.NET Core 2.1 kopierades vissa typer som IHostingEnvironment och IApplicationLifetime från Microsoft.AspNetCore.Hosting. Vissa ASP.NET Core 3.0-ändringar gör att appar inkluderar både namnrymderna Microsoft.Extensions.Hosting och Microsoft.AspNetCore.Hosting . Varje användning av dessa dubbletttyper orsakar ett kompilatorfel för tvetydig referens när båda namnrymderna refereras till.
Rekommenderad åtgärd
Ersatte alla användningar av de gamla typerna med de nyligen introducerade typerna enligt nedan:
Föråldrade typer (varning):
- Microsoft.Extensions.Hosting.IHostingEnvironment
- Microsoft.AspNetCore.Hosting.IHostingEnvironment
- Microsoft.Extensions.Hosting.IApplicationLifetime
- Microsoft.AspNetCore.Hosting.IApplicationLifetime
- Microsoft.Extensions.Hosting.EnvironmentName
- Microsoft.AspNetCore.Hosting.EnvironmentName
Nya typer:
- Microsoft.Extensions.Hosting.IHostEnvironment
Microsoft.AspNetCore.Hosting.IWebHostEnvironment : IHostEnvironment- Microsoft.Extensions.Hosting.IHostApplicationLifetime
- Microsoft.Extensions.Hosting.Environments
De nya tilläggsmetoderna IHostEnvironmentIsDevelopment och IsProduction finns i Microsoft.Extensions.Hosting namnområdet. Namnrymden kan behöva läggas till i ditt projekt.
Kategori
ASP.NET Kärna
Berörda API:er
- Microsoft.AspNetCore.Hosting.EnvironmentName
- Microsoft.AspNetCore.Hosting.IApplicationLifetime
- Microsoft.AspNetCore.Hosting.IHostingEnvironment
- Microsoft.Extensions.Hosting.EnvironmentName
- Microsoft.Extensions.Hosting.IApplicationLifetime
- Microsoft.Extensions.Hosting.IHostingEnvironment
Värdtjänst: ObjectPoolProvider har tagits bort från beroenden för WebHostBuilder
Som en del av att göra ASP.NET Core mer användningsbaserat, togs ObjectPoolProvider bort från huvudgruppen av beroenden. Specifika komponenter som förlitar sig på ObjectPoolProvider lägger nu till det själva.
Mer information finns i dotnet/aspnetcore#5944.
Version införd
3,0
Gammalt beteende
WebHostBuilder tillhandahåller ObjectPoolProvider som standard i DI-containern.
Nytt beteende
WebHostBuilder tillhandahåller ObjectPoolProvider inte längre som standard i DI-containern.
Orsak till ändringen
Den här ändringen gjordes för att göra ASP.NET Core mer betala för spel.
Rekommenderad åtgärd
Om din komponent kräver ObjectPoolProvider, behöver den läggas till i dina beroenden via IServiceCollection.
Kategori
ASP.NET Kärna
Berörda API:er
Ingen
HTTP: Utökningsbarheten defaultHttpContext har tagits bort
Som en del av prestandaförbättringarna i ASP.NET Core 3.0 togs extensibiliteten av DefaultHttpContext bort. Klassen är nu sealed. Mer information finns i dotnet/aspnetcore#6504.
Om dina enhetstester använder Mock<DefaultHttpContext>, använd i stället Mock<HttpContext> eller new DefaultHttpContext().
Mer information finns i dotnet/aspnetcore#6534.
Version införd
3,0
Gammalt beteende
Klasser kan härledas från DefaultHttpContext.
Nytt beteende
Klasser kan inte härledas från DefaultHttpContext.
Orsak till ändringen
Utökningsbarheten tillhandahölls ursprungligen för att tillåta poolning av HttpContext, men det introducerade onödig komplexitet och hindrade andra optimeringar.
Rekommenderad åtgärd
Om du använder Mock<DefaultHttpContext> i enhetstesterna börjar du använda Mock<HttpContext> i stället.
Kategori
ASP.NET Kärna
Berörda API:er
Microsoft.AspNetCore.Http.DefaultHttpContext
HTTP: HeaderNames-konstanter har ändrats till statisk readonly
Från och med ASP.NET Core 3.0 Preview 5 ändrades fälten i Microsoft.Net.Http.Headers.HeaderNames från const till static readonly.
Mer information finns i dotnet/aspnetcore#9514.
Version införd
3,0
Gammalt beteende
Dessa fält brukade vara const.
Nytt beteende
Dessa fält är nu static readonly.
Orsak till ändringen
Ändringen:
- Förhindrar att värdena bäddas in över sammansättningsgränser, vilket möjliggör värdekorrigeringar efter behov.
- Möjliggör snabbare referensjämlikhetskontroller.
Rekommenderad åtgärd
Kompilera om mot 3.0. Källkod som använder dessa fält på följande sätt kan inte längre göra det.
- Som ett attributargument
- Som en
casei ettswitchuttryck - När du definierar en annan
const
Om du vill kringgå den icke-bakåtkompatibla ändringen växlar du till att använda självdefinierade rubriknamnskonstanter eller strängliteraler.
Kategori
ASP.NET Kärna
Berörda API:er
Microsoft.Net.Http.Headers.HeaderNames
HTTP: Infrastrukturändringar för svarskropp
Infrastrukturen som stöder en HTTP-svarstext har ändrats. Om du använder HttpResponse direkt bör du inte behöva göra några kodändringar. Läs vidare om du omsluter eller ersätter HttpResponse.Body eller kommer åt HttpContext.Features.
Version införd
3,0
Gammalt beteende
Det fanns tre API:er associerade med HTTP-svarstexten:
IHttpResponseFeature.BodyIHttpSendFileFeature.SendFileAsyncIHttpBufferingFeature.DisableResponseBuffering
Nytt beteende
Om du ersätter HttpResponse.Body, ersätter den hela IHttpResponseBodyFeature med en omslutning runt din angivna ström, med hjälp av StreamResponseBodyFeature för att tillhandahålla standardimplementeringar för alla förväntade API:er. Om du ställer in den ursprungliga strömmen återställs den här ändringen.
Orsak till ändringen
Motivationen är att kombinera API:er för svarstext till ett enda nytt funktionsgränssnitt.
Rekommenderad åtgärd
Använd IHttpResponseBodyFeature där du tidigare använde IHttpResponseFeature.Body, IHttpSendFileFeature, eller IHttpBufferingFeature.
Kategori
ASP.NET Kärna
Berörda API:er
- Microsoft.AspNetCore.Http.Features.IHttpBufferingFeature
- Microsoft.AspNetCore.Http.Features.IHttpResponseFeature.Body
- Microsoft.AspNetCore.Http.Features.IHttpSendFileFeature
HTTP: Vissa standardvärden för cookien SameSite har ändrats till Ingen
SameSite är ett alternativ för cookies som kan hjälpa till att minimera vissa CSRF-attacker (Cross-Site Request Forgery). När det här alternativet ursprungligen introducerades användes inkonsekventa standardvärden för olika ASP.NET Core-API:er. Inkonsekvensen har lett till förvirrande resultat. Från och med ASP.NET Core 3.0 är dessa standardvärden bättre justerade. Du måste välja den här funktionen per komponent.
Version införd
3,0
Gammalt beteende
Liknande ASP.NET Core-API:er använde olika standardvärden SameSiteMode . Ett exempel på inkonsekvensen ses i HttpResponse.Cookies.Append(String, String) och HttpResponse.Cookies.Append(String, String, CookieOptions), som respektive standardiserades till SameSiteMode.None och SameSiteMode.Lax.
Nytt beteende
Alla berörda API:er är som standard SameSiteMode.None.
Orsak till ändringen
Standardvärdet ändrades för att göra SameSite en opt-in-funktion.
Rekommenderad åtgärd
Varje komponent som emitterar cookies måste avgöra om SameSite är lämpligt för dess scenarier. Granska din användning av de berörda API:erna och konfigurera om SameSite efter behov.
Kategori
ASP.NET Kärna
Berörda API:er
HTTP: Synkron I/O inaktiverad på alla servrar
Från och med ASP.NET Core 3.0 inaktiveras synkrona serveråtgärder som standard.
Ändra beskrivning
AllowSynchronousIO är ett alternativ på varje server som aktiverar eller inaktiverar synkrona I/O-API:er som HttpRequest.Body.Read, HttpResponse.Body.Writeoch Stream.Flush. Dessa API:er har länge varit en källa till trådsvält och programhaverier. Från och med ASP.NET Core 3.0 Preview 3 inaktiveras dessa synkrona åtgärder som standard.
Berörda servrar:
- Tornfalk
- HttpSys
- IIS pågår
- Testserver
Förvänta dig fel som liknar:
Synchronous operations are disallowed. Call ReadAsync or set AllowSynchronousIO to true instead.Synchronous operations are disallowed. Call WriteAsync or set AllowSynchronousIO to true instead.Synchronous operations are disallowed. Call FlushAsync or set AllowSynchronousIO to true instead.
Varje server har ett AllowSynchronousIO alternativ som styr det här beteendet och standardvärdet för alla är nu false.
Beteendet kan också åsidosättas per begäran som en tillfällig åtgärd. Till exempel:
var syncIOFeature = HttpContext.Features.Get<IHttpBodyControlFeature>();
if (syncIOFeature != null)
{
syncIOFeature.AllowSynchronousIO = true;
}
Om du har problem med att en TextWriter eller annan ström anropar ett synkront API i Dispose, ska du i stället anropa det nya DisposeAsync API:et.
Mer information finns i dotnet/aspnetcore#7644.
Version införd
3,0
Gammalt beteende
HttpRequest.Body.Read, HttpResponse.Body.Writeoch Stream.Flush tilläts som standard.
Nytt beteende
Dessa synkrona API:er tillåts inte som standard:
Förvänta dig fel som liknar:
Synchronous operations are disallowed. Call ReadAsync or set AllowSynchronousIO to true instead.Synchronous operations are disallowed. Call WriteAsync or set AllowSynchronousIO to true instead.Synchronous operations are disallowed. Call FlushAsync or set AllowSynchronousIO to true instead.
Orsak till ändringen
Dessa synkrona API:er har länge varit en källa till trådsvält och applikationshängningar. Från och med ASP.NET Core 3.0 Preview 3 inaktiveras synkrona åtgärder som standard.
Rekommenderad åtgärd
Använd de asynkrona versionerna av metoderna. Beteendet kan också åsidosättas per begäran som en tillfällig åtgärd.
var syncIOFeature = HttpContext.Features.Get<IHttpBodyControlFeature>();
if (syncIOFeature != null)
{
syncIOFeature.AllowSynchronousIO = true;
}
Kategori
ASP.NET Kärna
Berörda API:er
Identitet: Överlagring av AddDefaultUI-metod har tagits bort
Från och med ASP.NET Core 3.0 finns inte längre överlagring av metoden IdentityBuilderUIExtensions.AddDefaultUI(IdentityBuilder,UIFramework).
Version införd
3,0
Orsak till ändringen
Den här ändringen var ett resultat av införandet av funktionen för statiska webbtillgångar.
Rekommenderad åtgärd
Anropa IdentityBuilderUIExtensions.AddDefaultUI(IdentityBuilder) i stället för den överlagrade funktionen som tar två argument. Om du använder Bootstrap 3 lägger du också till följande rad i ett <PropertyGroup> element i projektfilen:
<IdentityUIFrameworkVersion>Bootstrap3</IdentityUIFrameworkVersion>
Kategori
ASP.NET Kärna
Berörda API:er
IdentityBuilderUIExtensions.AddDefaultUI(IdentityBuilder,UIFramework)
Identitet: Standardversionen av användargränssnittet för Bootstrap har ändrats
Från och med ASP.NET Core 3.0 använder identitetsgränssnittet standardversion 4 av Bootstrap.
Version införd
3,0
Gammalt beteende
Metodanropet services.AddDefaultIdentity<IdentityUser>().AddDefaultUI(); var detsamma som services.AddDefaultIdentity<IdentityUser>().AddDefaultUI(UIFramework.Bootstrap3);
Nytt beteende
Metodanropet services.AddDefaultIdentity<IdentityUser>().AddDefaultUI(); är detsamma som services.AddDefaultIdentity<IdentityUser>().AddDefaultUI(UIFramework.Bootstrap4);
Orsak till ändringen
Bootstrap 4 släpptes under ASP.NET Core 3.0-tidsram.
Rekommenderad åtgärd
Du påverkas av den här ändringen om du använder standardgränssnittet för identitet och har lagt till det i Startup.ConfigureServices som du ser i följande exempel:
services.AddDefaultIdentity<IdentityUser>().AddDefaultUI();
Välj en av följande åtgärder:
Migrera din app för att använda Bootstrap 4 med hjälp av deras migreringsguide.
Uppdatera
Startup.ConfigureServicesför att framtvinga användning av Bootstrap 3. Till exempel:services.AddDefaultIdentity<IdentityUser>().AddDefaultUI(UIFramework.Bootstrap3);
Kategori
ASP.NET Kärna
Berörda API:er
Ingen
Identitet: SignInAsync genererar undantag för oautentiserad identitet
Som standard SignInAsync genererar ett undantag för huvudnamn/identiteter där IsAuthenticated är false.
Version införd
3,0
Gammalt beteende
SignInAsync accepterar alla huvudnamn/identiteter, inklusive identiteter där IsAuthenticated är false.
Nytt beteende
Som standard SignInAsync genererar ett undantag för huvudnamn/identiteter där IsAuthenticated är false. Det finns en ny flagga för att förhindra det här beteendet, men standardbeteendet har ändrats.
Orsak till ändringen
Det gamla beteendet var problematiskt eftersom dessa principaler som standard avvisades av [Authorize] / RequireAuthenticatedUser().
Rekommenderad åtgärd
I ASP.NET Core 3.0 Preview 6 finns det en RequireAuthenticatedSignIn-flagga på AuthenticationOptions som är true som standard. Ange den här flaggan till false för att återställa det gamla beteendet.
Kategori
ASP.NET Kärna
Berörda API:er
Ingen
Identitet: SignInManager-konstruktorn accepterar ny parameter
Från och med ASP.NET Core 3.0 lades en ny IUserConfirmation<TUser> parameter till i SignInManager konstruktorn. Mer information finns i dotnet/aspnetcore#8356.
Version införd
3,0
Orsak till ändringen
Motiveringen till ändringen var att lägga till stöd för nya e-post-/bekräftelseflöden i identiteten.
Rekommenderad åtgärd
Om du skapar en SignInManager manuellt, ange en implementering av IUserConfirmation eller hämta en från beroendeinjektionen för att tillhandahålla.
Kategori
ASP.NET Kärna
Berörda API:er
Identitet: Användargränssnittet använder funktionen för statiska webbtillgångar
ASP.NET Core 3.0 introducerade en funktion för statiska webbtillgångar och Identity UI har antagit den.
Ändra beskrivning
Som ett resultat av att Identity UI antagit funktionen för statiska webbtillgångar:
- Ramverk väljs genom att använda
IdentityUIFrameworkVersion-egenskapen i projektfilen. - Bootstrap 4 är standardgränssnittsramverket för identitetsgränssnittet. Bootstrap 3 har nått slutet av livet och du bör överväga att migrera till en version som stöds.
Version införd
3,0
Gammalt beteende
Standardgränssnittsramverket för identitetsgränssnittet var Bootstrap 3. UI-ramverket kan konfigureras med hjälp av en parameter till metodanropet AddDefaultUI i Startup.ConfigureServices.
Nytt beteende
Standardgränssnittsramverket för identitetsgränssnittet är Bootstrap 4. UI-ramverket måste konfigureras i projektfilen i stället för i metodanropet AddDefaultUI .
Orsak till ändringen
Införandet av funktionen för statiska webbtillgångar kräver att UI Framework-konfigurationen flyttas till MSBuild. Beslutet om vilket ramverk som ska bäddas in är ett beslut om byggtid, inte ett körningsbeslut.
Rekommenderad åtgärd
Granska webbplatsgränssnittet för att se till att de nya Bootstrap 4-komponenterna är kompatibla. Om det behövs använder du IdentityUIFrameworkVersion egenskapen MSBuild för att återgå till Bootstrap 3. Lägg till egenskapen i ett <PropertyGroup> element i projektfilen:
<IdentityUIFrameworkVersion>Bootstrap3</IdentityUIFrameworkVersion>
Kategori
ASP.NET Kärna
Berörda API:er
IdentityBuilderUIExtensions.AddDefaultUI(IdentityBuilder, UIFramework)
Kestrel: Anslutningskort har tagits bort
Som en del av övergången till att flytta "pubternal" API:er till public, togs begreppet en IConnectionAdapter bort från Kestrel. Anslutningskort ersätts med mellanprogram för anslutning (liknar HTTP-mellanprogram i ASP.NET Core-pipelinen, men för anslutningar på lägre nivå). HTTPS och anslutningsloggning har flyttats från anslutningskort till anslutningsmellanprogram. Dessa tilläggsmetoder bör fortsätta att fungera sömlöst, men implementeringsinformationen har ändrats.
Mer information finns i dotnet/aspnetcore#11412. Diskussion finns i dotnet/aspnetcore#11475.
Version införd
3,0
Gammalt beteende
Kestrel-utökningskomponenter skapades med hjälp av IConnectionAdapter.
Nytt beteende
Kestrel-utökningskomponenter skapas som mellanprogram.
Orsak till ändringen
Den här ändringen är avsedd att ge en mer flexibel utökningsarkitektur.
Rekommenderad åtgärd
Konvertera alla implementeringar av IConnectionAdapter för att använda det nya mellanprogramsmönstret som visas i dotnet/aspnetcore#11412.
Kategori
ASP.NET Kärna
Berörda API:er
Microsoft.AspNetCore.Server.Kestrel.Core.Adapter.Internal.IConnectionAdapter
Kestrel: Tom HTTPS-sammansättning har tagits bort
Sammansättningen Microsoft.AspNetCore.Server.Kestrel.Https har tagits bort.
Version införd
3,0
Orsak till ändringen
I ASP.NET Core 2.1 flyttades innehållet Microsoft.AspNetCore.Server.Kestrel.Https i till Microsoft.AspNetCore.Server.Kestrel.Core. Den här ändringen gjordes på ett icke-icke-banbrytande sätt med hjälp av [TypeForwardedTo] attribut.
Rekommenderad åtgärd
- Bibliotek som refererar
Microsoft.AspNetCore.Server.Kestrel.Httpstill 2.0 bör uppdatera alla ASP.NET Core-beroenden till 2.1 eller senare. Annars kan de brytas när de läses in i en ASP.NET Core 3.0-app. - Appar och bibliotek som riktar sig till ASP.NET Core 2.1 och senare bör ta bort alla direkta referenser till
Microsoft.AspNetCore.Server.Kestrel.HttpsNuGet-paketet.
Kategori
ASP.NET Kärna
Berörda API:er
Ingen
Kestrel: Begär att trailerhuvuden flyttas till ny samling
I tidigare versioner lade Kestrel till HTTP/1.1 segmenterade trailerhuvuden i samlingen med begärandehuvuden när begärandetexten lästes till slutet. Det här beteendet orsakade oro för tvetydighet mellan huvuden och trailers. Beslutet togs att flytta släpvagnarna till en ny kollektion.
HTTP/2-förfrågningstrailers var inte tillgängliga i ASP.NET Core 2.2 men är nu också tillgängliga i den här nya samlingen i ASP.NET Core 3.0.
Nya metoder för förfrågningstillägg har lagts till för åtkomst till dessa släpvagnar.
HTTP/1.1-trailers är tillgängliga när hela begärandetexten har lästs.
HTTP/2-trailers är tillgängliga när de tas emot från klienten. Klienten skickar inte trailers förrän hela begärandetexten har buffrats av servern. Du kan behöva läsa begärandetexten för att frigöra buffertutrymme. Släpvagnar är alltid tillgängliga om du läser begärandetexten till slutet. Släpvagnarna markerar kroppens ände.
Version införd
3,0
Gammalt beteende
Begärandehuvuden för trailer läggs till i HttpRequest.Headers samlingen.
Nytt beteende
Begärandehuvuden inte i samlingen. Använd följande tilläggsmetoder på HttpRequest för att komma åt dem:
-
GetDeclaredTrailers()- Hämtar begäran "Trailer"-rubriken som listar vilka trailers som ska förväntas efter brödtexten. -
SupportsTrailers()– Anger om förfrågan stöder mottagning av trailer-rubriker. -
CheckTrailersAvailable()– Avgör om begäran stöder trailerfält och om de är tillgängliga för läsning. -
GetTrailer(string trailerName)– Hämtar den begärda avslutande rubriken från svaret.
Orsak till ändringen
Trailers är en viktig funktion i scenarier som gRPC. Att slå samman trailers för att begära rubriker var förvirrande för användarna.
Rekommenderad åtgärd
Använd de släpvagnsrelaterade tilläggsmetoderna på HttpRequest för att få åtkomst till släpvagnar.
Kategori
ASP.NET Kärna
Berörda API:er
Kestrel: Transportabstraktioner har tagits bort och offentliggjorts
Som en del av att avveckla "pubternal" API:er exponeras transportskiktets API:er i Kestrel som ett offentligt gränssnitt i Microsoft.AspNetCore.Connections.Abstractions-biblioteket.
Version införd
3,0
Gammalt beteende
- Transportrelaterade abstraktioner fanns tillgängliga i biblioteket
Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions. - Egenskapen
ListenOptions.NoDelayvar tillgänglig.
Nytt beteende
- Gränssnittet
IConnectionListenerintroducerades iMicrosoft.AspNetCore.Connections.Abstractionsbiblioteket för att exponera de mest använda funktionerna från...Transport.Abstractionsbiblioteket. -
NoDelayÄr nu tillgänglig i transportalternativ (LibuvTransportOptionsochSocketTransportOptions). -
SchedulingModeär inte längre tillgängligt.
Orsak till ändringen
ASP.NET Core 3.0 har övergett "pubternal" API:er.
Rekommenderad åtgärd
Kategori
ASP.NET Kärna
Berörda API:er
Ingen
Lokalisering: ResourceManagerWithCultureStringLocalizer och WithCulture markerade som föråldrade
Klassen ResourceManagerWithCultureStringLocalizer och WithCulture-gränssnittsmedlemmen är ofta förvirringskällor för lokaliseringsanvändare, särskilt när de skapar en egen IStringLocalizer implementering. Dessa objekt ger användaren intrycket att en IStringLocalizer instans är "per språk, per resurs". I verkligheten bör instanserna bara vara "per resurs". Det språk som söks efter bestäms av CultureInfo.CurrentUICulture när det körs. För att eliminera förvirringskällan har API:erna markerats som föråldrade i ASP.NET Core 3.0. API:erna tas bort i en framtida version.
Sammanhang finns i dotnet/aspnetcore#3324. Mer information finns i dotnet/aspnetcore#7756.
Version införd
3,0
Gammalt beteende
Metoderna har inte markerats som Obsolete.
Nytt beteende
Metoderna är markerade Obsolete.
Orsak till ändringen
API:erna representerade ett användningsfall som inte rekommenderas. Det rådde förvirring kring utformningen av lokaliseringen.
Rekommenderad åtgärd
Rekommendationen är att använda ResourceManagerStringLocalizer i stället. Låt kulturen anges av CurrentCulture. Om det inte är ett alternativ skapar och använder du en kopia av ResourceManagerWithCultureStringLocalizer.
Kategori
ASP.NET Kärna
Berörda API:er
Microsoft.Extensions.Localization.ResourceManagerWithCultureStringLocalizerMicrosoft.Extensions.Localization.ResourceManagerStringLocalizer.WithCulture
Loggning: DebugLogger-klassen har gjorts till en intern klass
Innan ASP.NET Core 3.0, DebugLogger var det public åtkomstmodifieraren. I ASP.NET Core 3.0 ändrades åtkomstmodifieraren till internal.
Version införd
3,0
Orsak till ändringen
Ändringen görs för att:
- Framtvinga konsekvens med andra loggningsimplementeringar, till exempel
ConsoleLogger. - Minska API-ytan.
Rekommenderad åtgärd
AddDebug
ILoggingBuilder Använd tilläggsmetoden för att aktivera felsökningsloggning.
DebugLoggerProvider är också fortfarande public i händelse av att tjänsten måste registreras manuellt.
Kategori
ASP.NET Kärna
Berörda API:er
Microsoft.Extensions.Logging.Debug.DebugLogger
MVC: Async-suffix trimmat från kontrollerens aktionsnamn
Som en del av att adressera dotnet/aspnetcore#4849 trimmar ASP.NET Core MVC suffixet Async från åtgärdsnamn som standard. Från och med ASP.NET Core 3.0 påverkar den här ändringen både routning och länkgenerering.
Version införd
3,0
Gammalt beteende
Överväg följande ASP.NET Core MVC-styrenhet:
public class ProductController : Controller
{
public async IActionResult ListAsync()
{
var model = await DbContext.Products.ToListAsync();
return View(model);
}
}
Åtgärden kan dirigeras via Product/ListAsync. Länkgenerering kräver att du anger suffixet Async . Till exempel:
<a asp-controller="Product" asp-action="ListAsync">List</a>
Nytt beteende
I ASP.NET Core 3.0 kan åtgärden dirigeras via Product/List. Länkgenereringskoden bör utelämna suffixet Async . Till exempel:
<a asp-controller="Product" asp-action="List">List</a>
Den här ändringen påverkar inte namn som anges med hjälp av attributet [ActionName] . Det nya beteendet kan inaktiveras genom att ställa in MvcOptions.SuppressAsyncSuffixInActionNames till false i Startup.ConfigureServices.
services.AddMvc(options =>
{
options.SuppressAsyncSuffixInActionNames = false;
});
Orsak till ändringen
Enligt konvention suffikseras asynkrona .NET-metoder med Async. Men när en metod definierar en MVC-åtgärd är det inte önskvärt att använda suffixet Async .
Rekommenderad åtgärd
Om din app är beroende av MVC-åtgärder som bevarar suffixet i namnet Async, välj någon av följande åtgärder:
- Använd attributet
[ActionName]för att bevara det ursprungliga namnet. - Inaktivera namnbytet helt genom att ange
MvcOptions.SuppressAsyncSuffixInActionNamestillfalseiStartup.ConfigureServices.
services.AddMvc(options =>
{
options.SuppressAsyncSuffixInActionNames = false;
});
Kategori
ASP.NET Kärna
Berörda API:er
Ingen
MVC: JsonResult har flyttats till Microsoft.AspNetCore.Mvc.Core
JsonResult har flyttats till Microsoft.AspNetCore.Mvc.Core sammansättningen. Den här typen brukade definieras i Microsoft.AspNetCore.Mvc.Formatters.Json. Ett attribut på sammansättningsnivå [TypeForwardedTo] lades till för att Microsoft.AspNetCore.Mvc.Formatters.Json åtgärda problemet för de flesta användare. Appar som använder bibliotek från tredje part kan stöta på problem.
Version införd
3.0 Förhandsversion 6
Gammalt beteende
En app som använder ett bibliotek baserat på 2.2 byggs framgångsrikt.
Nytt beteende
En app som använder ett 2,2-baserat bibliotek misslyckas med kompilering. Ett fel som innehåller en variant av följande text anges:
The type 'JsonResult' exists in both 'Microsoft.AspNetCore.Mvc.Core, Version=3.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60' and 'Microsoft.AspNetCore.Mvc.Formatters.Json, Version=2.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'
Ett exempel på ett sådant problem finns i dotnet/aspnetcore#7220.
Orsak till ändringen
Ändringar på plattformsnivå i sammansättningen av ASP.NET Core enligt beskrivningen i aspnet/Announcements#325.
Rekommenderad åtgärd
Bibliotek som kompilerats mot 2.2-versionen av Microsoft.AspNetCore.Mvc.Formatters.Json kan behöva kompileras om för att lösa problemet för alla konsumenter. Om du påverkas, kontakta biblioteksförfattaren. Begär omkompilering av biblioteket för att rikta in sig på ASP.NET Core 3.0.
Kategori
ASP.NET Kärna
Berörda API:er
Microsoft.AspNetCore.Mvc.JsonResult
MVC: Förkompileringsverktyget är inaktuellt
I ASP.NET Core 1.1 Microsoft.AspNetCore.Mvc.Razor.ViewCompilation introducerades paketet (MVC-förkompileringsverktyget) för att lägga till stöd för publiceringstidskompilering av Razor-filer (.cshtml-filer ). I ASP.NET Core 2.1 introducerades Razor SDK för att utöka funktionerna i förkompileringsverktyget. Razor SDK har lagt till stöd för kompilering av Razor-filer vid bygg- och publiceringstillfället. SDK:t verifierar korrektheten i .cshtml-filer vid byggtiden och förbättrar starttiden för appen. Razor SDK är aktiverat som standard och ingen gest krävs för att börja använda det.
I ASP.NET Core 3.0 togs MVC-förkompileringsverktyget, från ASP.NET Core 1.1-eran, bort. Tidigare paketversioner fortsätter att ta emot viktiga bugg- och säkerhetskorrigeringar i korrigeringsversionen.
Version införd
3,0
Gammalt beteende
Paketet Microsoft.AspNetCore.Mvc.Razor.ViewCompilation användes för att förkompilera MVC Razor-vyer.
Nytt beteende
Razor SDK har inbyggt stöd för den här funktionen. Paketet Microsoft.AspNetCore.Mvc.Razor.ViewCompilation uppdateras inte längre.
Orsak till ändringen
Razor SDK ger fler funktioner och verifierar korrektheten i .cshtml-filer vid byggtillfället. SDK:et förbättrar även appens starttid.
Rekommenderad åtgärd
För användare av ASP.NET Core 2.1 eller senare uppdaterar du för att använda det interna stödet för förkompilering i Razor SDK. Om buggar eller saknade funktioner förhindrar migrering till Razor SDK öppnar du ett problem på dotnet/aspnetcore.
Kategori
ASP.NET Kärna
Berörda API:er
Ingen
MVC: "Pubternal"-typer har ändrats till interna typer
I ASP.NET Core 3.0 uppdaterades alla "pubternal"-typer i MVC till antingen public i ett namnområde som stöds eller internal efter behov.
Ändra beskrivning
I ASP.NET Core deklareras "pubternal"-typer som public men finns i ett .Internalnamnområde med -suffix. Även om dessa typer är public, har de ingen stödriktlinje och är föremål för förändringar som kan bryta kompatibilitet. Tyvärr har oavsiktlig användning av dessa typer varit vanligt, vilket resulterar i störande förändringar i dessa projekt och begränsar möjligheten att underhålla ramverket.
Version införd
3,0
Gammalt beteende
Vissa typer i MVC var public men i ett .Internal namnområde. Dessa typer hade ingen supportpolicy och var föremål för brytande förändringar.
Nytt beteende
Alla sådana typer uppdateras antingen för att vara public i ett namnområde som stöds eller markeras som internal.
Orsak till ändringen
Oavsiktlig användning av "pubternal"-typerna har varit vanligt, vilket har resulterat i oförenliga ändringar i dessa projekt och begränsat möjligheten att underhålla ramverket.
Rekommenderad åtgärd
Om du använder typer som har blivit verkligt public och har flyttats till en ny, stödd namnrymd, uppdatera dina referenser så att de matchar de nya namnrymderna.
Om du använder typer som har markerats som internalmåste du hitta ett alternativ. De tidigare "pubternal"-typerna stöddes aldrig för offentligt bruk. Om det finns specifika typer i dessa namnområden som är viktiga för dina appar kan du skicka ett problem till dotnet/aspnetcore. Överväganden kan göras för att göra de begärda typerna public.
Kategori
ASP.NET Kärna
Berörda API:er
Den här ändringen innehåller typer i följande namnområden:
Microsoft.AspNetCore.Mvc.Cors.InternalMicrosoft.AspNetCore.Mvc.DataAnnotations.InternalMicrosoft.AspNetCore.Mvc.Formatters.InternalMicrosoft.AspNetCore.Mvc.Formatters.Json.InternalMicrosoft.AspNetCore.Mvc.Formatters.Xml.InternalMicrosoft.AspNetCore.Mvc.InternalMicrosoft.AspNetCore.Mvc.ModelBinding.InternalMicrosoft.AspNetCore.Mvc.Razor.InternalMicrosoft.AspNetCore.Mvc.RazorPages.InternalMicrosoft.AspNetCore.Mvc.TagHelpers.InternalMicrosoft.AspNetCore.Mvc.ViewFeatures.Internal
MVC: Kompatibilitetsshim för webb-API har tagits bort
Från och med ASP.NET Core 3.0 Microsoft.AspNetCore.Mvc.WebApiCompatShim är paketet inte längre tillgängligt.
Ändra beskrivning
Microsoft.AspNetCore.Mvc.WebApiCompatShim Paketet (WebApiCompatShim) ger partiell kompatibilitet i ASP.NET Core med ASP.NET 4.x Web API 2 för att förenkla migreringen av befintliga webb-API-implementeringar till ASP.NET Core. Appar som använder WebApiCompatShim drar dock inte nytta av API-relaterade funktioner som levereras i de senaste ASP.NET Core-versionerna. Sådana funktioner omfattar förbättrad generering av Open API-specifikation, standardiserad felhantering och generering av klientkod. WebApiCompatShim togs bort för att bättre fokusera API-insatserna i 3.0. Befintliga appar som använder WebApiCompatShim ska migreras till den nyare [ApiController] modellen.
Version införd
3,0
Orsak till ändringen
Webb-API-kompatibilitetsskikt var ett migreringsverktyg. Det begränsar användaråtkomsten till nya funktioner som läggs till i ASP.NET Core.
Rekommenderad åtgärd
Ta bort användningen av denna shim och migrera direkt till liknande funktioner i själva ASP.NET Core.
Kategori
ASP.NET Kärna
Berörda API:er
Microsoft.AspNetCore.Mvc.WebApiCompatShim
Razor: RazorTemplateEngine API har tagits bort
API:et RazorTemplateEngine har tagits bort och ersatts med Microsoft.AspNetCore.Razor.Language.RazorProjectEngine.
För diskussion, se GitHub-ärende dotnet/aspnetcore#25215.
Version införd
3,0
Gammalt beteende
En mallmotor kan skapas och användas för att parsa och generera kod för Razor-filer.
Nytt beteende
RazorProjectEngine kan skapas och tillhandahålla samma typ av information som RazorTemplateEngine för att parsa och generera kod för Razor-filer.
RazorProjectEngine ger också extra konfigurationsnivåer.
Orsak till ändringen
RazorTemplateEngine var alltför nära kopplat till de befintliga implementeringarna. Den här snäva kopplingen ledde till fler frågor när man försökte konfigurera en Razor-parsnings- och generationspipeline korrekt.
Rekommenderad åtgärd
Använd RazorProjectEngine i stället för RazorTemplateEngine. Tänk på följande exempel.
Skapa och konfigurera RazorProjectEngine
RazorProjectEngine projectEngine =
RazorProjectEngine.Create(RazorConfiguration.Default,
RazorProjectFileSystem.Create(@"C:\source\repos\ConsoleApp4\ConsoleApp4"),
builder =>
{
builder.ConfigureClass((document, classNode) =>
{
classNode.ClassName = "MyClassName";
// Can also configure other aspects of the class here.
});
// More configuration can go here
});
Generera kod för en Razor-fil
RazorProjectItem item = projectEngine.FileSystem.GetItem(
@"C:\source\repos\ConsoleApp4\ConsoleApp4\Example.cshtml",
FileKinds.Legacy);
RazorCodeDocument output = projectEngine.Process(item);
// Things available
RazorSyntaxTree syntaxTree = output.GetSyntaxTree();
DocumentIntermediateNode intermediateDocument =
output.GetDocumentIntermediateNode();
RazorCSharpDocument csharpDocument = output.GetCSharpDocument();
Kategori
ASP.NET Kärna
Berörda API:er
RazorTemplateEngineRazorTemplateEngineOptions
Razor: Runtime-kompilering har flyttats till ett paket
Stöd för körningskompilering av Razor-vyer och Razor Pages har flyttats till ett separat paket.
Version införd
3,0
Gammalt beteende
Runtime-kompilering är tillgängligt utan att behöva ytterligare paket.
Nytt beteende
Funktionen har flyttats till paketet Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation .
Följande API:er var tidigare tillgängliga i Microsoft.AspNetCore.Mvc.Razor.RazorViewEngineOptions för att möjliggöra körningskompilering. API:erna är nu tillgängliga via Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.MvcRazorRuntimeCompilationOptions.
-
RazorViewEngineOptions.FileProvidersär nuMvcRazorRuntimeCompilationOptions.FileProviders -
RazorViewEngineOptions.AdditionalCompilationReferencesär nuMvcRazorRuntimeCompilationOptions.AdditionalReferencePaths
Dessutom Microsoft.AspNetCore.Mvc.Razor.RazorViewEngineOptions.AllowRecompilingViewsOnFileChange har tagits bort. Omkompilering av filändringar aktiveras som standard genom att Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation referera till paketet.
Orsak till ändringen
Den här ändringen var nödvändig för att ta bort det delade ASP.NET Core-ramverksberoendet för Roslyn.
Rekommenderad åtgärd
Appar som kräver körningskompilering eller omkompilering av Razor-filer bör utföra följande steg:
Lägg till en referens till
Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationpaketet.Uppdatera projektets
Startup.ConfigureServicesmetod så att den innehåller ett anrop tillAddRazorRuntimeCompilation. Till exempel:services.AddMvc() .AddRazorRuntimeCompilation();
Kategori
ASP.NET Kärna
Berörda API:er
Microsoft.AspNetCore.Mvc.Razor.RazorViewEngineOptions
Sessionstillstånd: Föråldrade API:er har tagits bort
Föråldrade API:er för att konfigurera sessionscookies har tagits bort. Mer information finns i aspnet/Announcements#257.
Version införd
3,0
Orsak till ändringen
Den här ändringen tillämpar konsekvens mellan API:er för att konfigurera funktioner som använder cookies.
Rekommenderad åtgärd
Migrera användningen av de borttagna API:erna till deras nyare ersättningar. Överväg följande exempel i Startup.ConfigureServices:
public void ConfigureServices(ServiceCollection services)
{
services.AddSession(options =>
{
// Removed obsolete APIs
options.CookieName = "SessionCookie";
options.CookieDomain = "contoso.com";
options.CookiePath = "/";
options.CookieHttpOnly = true;
options.CookieSecure = CookieSecurePolicy.Always;
// new API
options.Cookie.Name = "SessionCookie";
options.Cookie.Domain = "contoso.com";
options.Cookie.Path = "/";
options.Cookie.HttpOnly = true;
options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
});
}
Kategori
ASP.NET Kärna
Berörda API:er
- Microsoft.AspNetCore.Builder.SessionOptions.CookieDomain
- Microsoft.AspNetCore.Builder.SessionOptions.CookieHttpOnly
- Microsoft.AspNetCore.Builder.SessionOptions.CookieName
- Microsoft.AspNetCore.Builder.SessionOptions.CookiePath
- Microsoft.AspNetCore.Builder.SessionOptions.CookieSecure
Delat ramverk: Sammansättningar som tagits bort från Microsoft.AspNetCore.App
Från och med ASP.NET Core 3.0 innehåller det delade ASP.NET Core-ramverket (Microsoft.AspNetCore.App) endast sammansättningar från första part som är fullt utvecklade, stöds och kan användas av Microsoft.
Ändra beskrivning
Tänk på förändringen som omdefiniering av gränser för ASP.NET Core"-plattformen. Det delade ramverket kan skapas av vem som helst via GitHub och fortsätter att erbjuda de befintliga fördelarna med delade .NET Core-ramverk till dina appar. Vissa fördelar är mindre distributionsstorlek, centraliserad korrigering och snabbare starttid.
Som en del av ändringen introduceras några störande ändringar i Microsoft.AspNetCore.App.
Version införd
3,0
Gammalt beteende
Projekt som refereras Microsoft.AspNetCore.App via ett <PackageReference> element i projektfilen.
Dessutom Microsoft.AspNetCore.App innehöll följande underkomponenter:
- Json.NET (
Newtonsoft.Json) - Entity Framework Core (sammansättningar med prefixet
Microsoft.EntityFrameworkCore.) - Roslyn (
Microsoft.CodeAnalysis)
Nytt beteende
En referens till Microsoft.AspNetCore.App kräver inte längre ett <PackageReference> element i projektfilen. .NET Core SDK stöder ett nytt element med namnet <FrameworkReference>, som ersätter användningen av <PackageReference>.
Mer information finns i dotnet/aspnetcore#3612.
Entity Framework Core levereras som NuGet-paket. Den här ändringen justerar leveransmodellen med alla andra dataåtkomstbibliotek på .NET. Det ger Entity Framework Core den enklaste vägen för att fortsätta att förnya samtidigt som du stöder de olika .NET-plattformarna. Flytten av Entity Framework Core från det delade ramverket påverkar inte dess status som ett Microsoft-utvecklat, stödt och användbart bibliotek. .NET Core-supportprincipen fortsätter att täcka den.
Json.NET och Entity Framework Core fortsätter att arbeta med ASP.NET Core. De kommer dock inte att ingå i det delade ramverket.
Mer information finns i Framtiden för JSON i .NET Core 3.0. Se även den fullständiga listan över binärfiler som tagits bort från det delade ramverket.
Orsak till ändringen
Den här ändringen förenklar förbrukningen av Microsoft.AspNetCore.App och minskar dupliceringen mellan NuGet-paket och delade ramverk.
Mer information om motivationen för den här ändringen finns i det här blogginlägget.
Rekommenderad åtgärd
Från och med ASP.NET Core 3.0 är det inte längre nödvändigt för projekt att använda sammansättningar i Microsoft.AspNetCore.App som NuGet-paket. För att förenkla mål och användning av det delade ASP.NET Core-ramverket levereras många NuGet-paket eftersom ASP.NET Core 1.0 inte längre produceras. de API:erna som paketen tillhandahåller är fortfarande tillgängliga för appar genom att använda en <FrameworkReference> till Microsoft.AspNetCore.App. Vanliga API-exempel är Kestrel, MVC och Razor.
Den här ändringen gäller inte för alla binärfiler som refereras via Microsoft.AspNetCore.App i ASP.NET Core 2.x. Några viktiga undantag är:
-
Microsoft.Extensionsbibliotek som fortsätter att rikta in sig på .NET Standard är tillgängliga som NuGet-paket (se https://github.com/dotnet/extensions). - API:er som skapas av ASP.NET Core-teamet som inte ingår i
Microsoft.AspNetCore.App. Följande komponenter är till exempel tillgängliga som NuGet-paket:- Entity Framework Core
- API:er som tillhandahåller integrering från tredje part
- Experimentella funktioner
- API:er med beroenden som inte kunde uppfylla kraven för att vara i det delade ramverket
- Tillägg till MVC som har stöd för Json.NET. Ett API tillhandahålls som ett NuGet-paket för att stödja med hjälp av Json.NET och MVC. Mer information finns i migreringsguiden för ASP.NET Core.
- SignalR .NET-klienten fortsätter att stödja .NET Standard och levereras som ett NuGet-paket. Den är avsedd för användning på många .NET-körningar, till exempel Xamarin och UWP.
Mer information finns i Sluta producera paket för delade ramverkssammansättningar i 3.0. Mer information finns i dotnet/aspnetcore#3757.
Kategori
ASP.NET Kärna
Berörda API:er
Delat ramverk: Microsoft.AspNetCore.All har tagits bort
Från och med ASP.NET Core 3.0 skapas metapaketet Microsoft.AspNetCore.All och det matchande delade ramverket Microsoft.AspNetCore.All inte längre. Det här paketet är tillgängligt i ASP.NET Core 2.2 och fortsätter att ta emot underhållsuppdateringar i ASP.NET Core 2.1.
Version införd
3,0
Gammalt beteende
Appar kan använda Microsoft.AspNetCore.All metapaketet för att rikta in sig på det delade ramverket Microsoft.AspNetCore.All på .NET Core.
Nytt beteende
.NET Core 3.0 innehåller Microsoft.AspNetCore.All inget delat ramverk.
Orsak till ändringen
Metapaketet Microsoft.AspNetCore.All innehöll ett stort antal externa beroenden.
Rekommenderad åtgärd
Migrera ditt projekt för att använda ramverket Microsoft.AspNetCore.App . Komponenter som tidigare var tillgängliga i Microsoft.AspNetCore.All är fortfarande tillgängliga på NuGet. Dessa komponenter distribueras nu med din app i stället för att ingå i det delade ramverket.
Kategori
ASP.NET Kärna
Berörda API:er
Ingen
SignalR: HandshakeProtocol.SuccessHandshakeData har ersatts
Fältet HandshakeProtocol.SuccessHandshakeData togs bort och ersattes med en hjälpmetod som genererar ett lyckat handskakningssvar med en specifik IHubProtocol.
Version införd
3,0
Gammalt beteende
HandshakeProtocol.SuccessHandshakeData var ett public static ReadOnlyMemory<byte> fält.
Nytt beteende
HandshakeProtocol.SuccessHandshakeData har ersatts av en staticGetSuccessfulHandshake(IHubProtocol protocol) metod som returnerar en ReadOnlyMemory<byte> baserad på det angivna protokollet.
Orsak till ändringen
Ytterligare fält lades till i handskakningssvaret som inte är konstanta och ändras beroende på det valda protokollet.
Rekommenderad åtgärd
Inga. Den här typen är inte avsedd för användning från användarkod. Det är public, så det kan delas mellan SignalR-servern och klienten. Det kan också användas av kundens SignalR-klienter som skrivits i .NET.
Användare av SignalR bör inte påverkas av den här ändringen.
Kategori
ASP.NET Kärna
Berörda API:er
HandshakeProtocol.SuccessHandshakeData
SignalR: Metoderna HubConnection ResetSendPing och ResetTimeout har tagits bort
Metoderna ResetSendPing och ResetTimeout togs bort från SignalR-API HubConnection :et. Dessa metoder var ursprungligen endast avsedda för internt bruk men offentliggjordes i ASP.NET Core 2.2. De här metoderna är inte tillgängliga från och med ASP.NET Core 3.0 Preview 4-versionen. Mer information finns i dotnet/aspnetcore#8543.
Version införd
3,0
Gammalt beteende
API:er var tillgängliga.
Nytt beteende
API:er tas bort.
Orsak till ändringen
Dessa metoder var ursprungligen endast avsedda för internt bruk men offentliggjordes i ASP.NET Core 2.2.
Rekommenderad åtgärd
Använd inte dessa metoder.
Kategori
ASP.NET Kärna
Berörda API:er
SignalR: HubConnectionContext-konstruktorer har ändrats
SignalR:s konstruktorer har ändrats för att acceptera en optionstyp istället för flera parametrar, för att framtidssäkra möjligheten att lägga till alternativ. Den här ändringen ersätter två konstruktorer med en enda konstruktor som accepterar en alternativtyp.
Version införd
3,0
Gammalt beteende
HubConnectionContext har två konstruktorer:
public HubConnectionContext(ConnectionContext connectionContext, TimeSpan keepAliveInterval, ILoggerFactory loggerFactory);
public HubConnectionContext(ConnectionContext connectionContext, TimeSpan keepAliveInterval, ILoggerFactory loggerFactory, TimeSpan clientTimeoutInterval);
Nytt beteende
De två konstruktorerna togs bort och ersattes med en konstruktor:
public HubConnectionContext(ConnectionContext connectionContext, HubConnectionContextOptions contextOptions, ILoggerFactory loggerFactory)
Orsak till ändringen
Den nya konstruktorn använder ett nytt alternativobjekt. Därför kan funktionerna HubConnectionContext i utökas i framtiden utan att göra fler konstruktorer och icke-bakåtkompatibla ändringar.
Rekommenderad åtgärd
I stället för att använda följande konstruktor:
HubConnectionContext connectionContext = new HubConnectionContext(
connectionContext,
keepAliveInterval: TimeSpan.FromSeconds(15),
loggerFactory,
clientTimeoutInterval: TimeSpan.FromSeconds(15));
Använd följande konstruktor:
HubConnectionContextOptions contextOptions = new HubConnectionContextOptions()
{
KeepAliveInterval = TimeSpan.FromSeconds(15),
ClientTimeoutInterval = TimeSpan.FromSeconds(15)
};
HubConnectionContext connectionContext = new HubConnectionContext(connectionContext, contextOptions, loggerFactory);
Kategori
ASP.NET Kärna
Berörda API:er
- HubConnectionContext(ConnectionContext, TimeSpan, ILoggerFactory)
- HubConnectionContext(ConnectionContext, TimeSpan, ILoggerFactory, TimeSpan)
SignalR: JavaScript-klientpaketets namn har ändrats
I ASP.NET Core 3.0 Preview 7 ändrades SignalR JavaScript-klientpaketnamnet från @aspnet/signalr till @microsoft/signalr. Namnändringen återspeglar det faktum att SignalR är användbart i mer än bara ASP.NET Core-appar, tack vare Azure SignalR Service.
Om du vill reagera på den här ändringen ändrar du referenser i dina package.json-filer , require -instruktioner och ECMAScript-instruktioner import . Inget API ändras som en del av detta namnbyte.
Mer information finns i dotnet/aspnetcore#11637.
Version införd
3,0
Gammalt beteende
Klientpaketet hette @aspnet/signalr.
Nytt beteende
Klientpaketet heter @microsoft/signalr.
Orsak till ändringen
Namnändringen klargör att SignalR är användbart utöver ASP.NET Core-appar, tack vare Azure SignalR Service.
Rekommenderad åtgärd
Växla till det nya paketet @microsoft/signalr.
Kategori
ASP.NET Kärna
Berörda API:er
Ingen
SignalR: UseSignalR- och UseConnections-metoder markerade som föråldrade
Metoderna UseConnections och UseSignalR klasserna ConnectionsRouteBuilder och HubRouteBuilder markeras som föråldrade i ASP.NET Core 3.0.
Version införd
3,0
Gammalt beteende
SignalR Hub-routning har konfigurerats med UseSignalR eller UseConnections.
Nytt beteende
Det gamla sättet att konfigurera routning har föråldrats och ersatts med slutpunktsroutning.
Orsak till ändringen
Mellanprogram flyttas till det nya slutpunktsdirigeringssystemet. Det gamla sättet att lägga till mellanprogram är föråldrat.
Rekommenderad åtgärd
Ersätt UseSignalR med UseEndpoints:
Gammal kod:
app.UseSignalR(routes =>
{
routes.MapHub<SomeHub>("/path");
});
Ny kod:
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<SomeHub>("/path");
});
Kategori
ASP.NET Kärna
Berörda API:er
- Microsoft.AspNetCore.Builder.ConnectionsAppBuilderExtensions.UseConnections(IApplicationBuilder, Action<ConnectionsRouteBuilder>)
- Microsoft.AspNetCore.Builder.SignalRAppBuilderExtensions.UseSignalR(IApplicationBuilder, Action<HubRouteBuilder>)
- Microsoft.AspNetCore.Http.Connections.ConnectionsRouteBuilder
- Microsoft.AspNetCore.SignalR.HubRouteBuilder
SPA: SpaServices och NodeServices har markerats som föråldrade
Innehållet i följande NuGet-paket har varit onödigt sedan ASP.NET Core 2.1. Därför markeras följande paket som föråldrade:
Av samma anledning markeras följande npm-moduler som inaktuella:
De föregående paketen och npm-modulerna tas senare bort i .NET 5.
Version införd
3,0
Gammalt beteende
De inaktuella paketen och npm-modulerna var avsedda att integrera ASP.NET Core med olika spa-ramverk (Single Page App). Sådana ramverk omfattar Angular, React och React med Redux.
Nytt beteende
Det finns en ny integrationsmekanism i NuGet-paketet Microsoft.AspNetCore.SpaServices.Extensions . Paketet är fortfarande grunden för Angular- och React-projektmallarna sedan ASP.NET Core 2.1.
Orsak till ändringen
ASP.NET Core stöder integrering med olika spa-ramverk (Single Page App), inklusive Angular, React och React med Redux. Till en början genomfördes integrering med dessa ramverk med ASP.NET Core-specifika komponenter som hanterade scenarier som förrendering på serversidan och integrering med Webpack. Med tiden förändrades branschstandarderna. Var och en av SPA-ramverken släppte sina egna standardkommandoradsgränssnitt. Till exempel Angular CLI och create-react-app.
När ASP.NET Core 2.1 släpptes i maj 2018 svarade teamet på ändringen av standarder. Ett nyare och enklare sätt att integrera med SPA-ramverkens egna verktygskedjor tillhandahölls. Den nya integreringsmekanismen finns i paketet Microsoft.AspNetCore.SpaServices.Extensions och ligger fortfarande till grund för Angular- och React-projektmallarna sedan ASP.NET Core 2.1.
För att klargöra att de äldre ASP.NET Core-specifika komponenterna är irrelevanta och inte rekommenderas:
- Integreringsmekanismen före 2.1 är markerad som föråldrad.
- De stödda npm-paketen markeras som inaktuella.
Rekommenderad åtgärd
Om du använder de här paketen uppdaterar du dina appar så att de använder funktionerna:
- I paketet
Microsoft.AspNetCore.SpaServices.Extensions. - Tillhandahålls av SPA-ramverken som du använder
Information om hur du aktiverar funktioner som prerendering på serversidan och frekvent modulinläsning finns i dokumentationen för motsvarande SPA-ramverk. Funktionerna i Microsoft.AspNetCore.SpaServices.Extensions är inte föråldrade och kommer att fortsätta att stödjas.
Kategori
ASP.NET Kärna
Berörda API:er
Microsoft.AspNetCore.NodeServices.HostingModels.INodeInstance
Microsoft.AspNetCore.NodeServices.HostingModels.NodeInvocationException
Microsoft.AspNetCore.NodeServices.HostingModels.NodeInvocationInfo
Microsoft.AspNetCore.NodeServices.HostingModels.NodeServicesOptionsExtensions
Microsoft.AspNetCore.NodeServices.HostingModels.OutOfProcessNodeInstance
Microsoft.AspNetCore.SpaServices.Prerendering.ISpaPrerenderer
Microsoft.AspNetCore.SpaServices.Prerendering.ISpaPrerendererBuilder
Microsoft.AspNetCore.SpaServices.Prerendering.JavaScriptModuleExport
Microsoft.AspNetCore.SpaServices.Prerendering.PrerenderTagHelper
Microsoft.AspNetCore.SpaServices.Prerendering.RenderToStringResult
Microsoft.AspNetCore.SpaServices.Webpack.WebpackDevMiddlewareOptions
Microsoft.Extensions.DependencyInjection.NodeServicesServiceCollectionExtensions
Microsoft.Extensions.DependencyInjection.PrerenderingServiceCollectionExtensions
SPAs: SpaServices och NodeServices återgår inte längre till att använda konsolloggern
Microsoft.AspNetCore.SpaServices och Microsoft.AspNetCore.NodeServices visar inte konsolloggar om inte loggningen har konfigurerats.
Version införd
3,0
Gammalt beteende
Microsoft.AspNetCore.SpaServices och Microsoft.AspNetCore.NodeServices används för att automatiskt skapa en konsolloggare när loggningen inte har konfigurerats.
Nytt beteende
Microsoft.AspNetCore.SpaServices och Microsoft.AspNetCore.NodeServices visar inte konsolloggar om inte loggningen har konfigurerats.
Orsak till ändringen
Det finns ett behov av att anpassa sig till hur andra ASP.NET Core-paket implementerar loggning.
Rekommenderad åtgärd
Om det gamla beteendet krävs lägger du till services.AddLogging(builder => builder.AddConsole()) i din Setup.ConfigureServices metod för att konfigurera konsolloggning.
Kategori
ASP.NET Kärna
Berörda API:er
Ingen
Målramverk: .NET Framework-stöd har tagits bort
Från och med ASP.NET Core 3.0 är .NET Framework ett målramverk som inte stöds.
Ändra beskrivning
.NET Framework 4.8 är den sista huvudversionen av .NET Framework. Nya ASP.NET Core-appar bör byggas på .NET Core. Från och med .NET Core 3.0-versionen kan du se ASP.NET Core 3.0 som en del av .NET Core.
Kunder som använder ASP.NET Core med .NET Framework kan fortsätta på ett sätt som stöds fullt ut med hjälp av 2.1 LTS-versionen. Support och service för 2.1 fortsätter till åtminstone den 21 augusti 2021. Det här datumet är tre år efter deklarationen av LTS-versionen enligt .NET-supportpolicyn. Stödet för ASP.NET Core 2.1-paket på .NET Framework utökas på obestämd tid, ungefär som serviceprincipen för andra paketbaserade ASP.NET ramverk.
Mer information om portning från .NET Framework till .NET Core finns i Portning till .NET Core.
Microsoft.Extensions paket (till exempel loggning, beroendeinmatning och konfiguration) och Entity Framework Core påverkas inte. De fortsätter att stödja .NET Standard.
Mer information om motivationen för den här ändringen finns i det ursprungliga blogginlägget.
Version införd
3,0
Gammalt beteende
ASP.NET Core-appar kan köras på .NET Core eller .NET Framework.
Nytt beteende
ASP.NET Core-appar kan bara köras på .NET Core.
Rekommenderad åtgärd
Välj en av följande åtgärder:
- Håll appen på ASP.NET Core 2.1.
- Migrera din app och dina beroenden till .NET Core.
Kategori
ASP.NET Kärna
Berörda API:er
Ingen
.NET Core-bibliotek
- API:er som rapporterar version rapporterar nu produkten istället för filversion
- Anpassade EncoderFallbackBuffer-instanser kan inte rekursivt falla tillbaka
- Ändring av flyttalsformatering och parsningsbeteende
- Flyttalsparsningsåtgärder misslyckas inte längre eller utlöser en OverflowException
- InvalidAsynchronousStateException har flyttats till en annan sammansättning
- Ersätta illa utformade UTF-8 byte-sekvenser följer Unicode-riktlinjerna
- TypeDescriptionProviderAttribute har flyttats till en annan sammansättning
- ZipArchiveEntry hanterar inte längre arkiv med inkonsekventa inmatningsstorlekar
- FieldInfo.SetValue genererar undantag för statiska fält med endast init
- Att skicka GroupCollection till tilläggsmetoder som tar IEnumerable<T> kräver förtydligande
API som nu rapporterar produktversion och inte filversion
Många av de API:er som returnerar versioner i .NET Core returnerar nu produktversionen i stället för filversionen.
Ändra beskrivning
I .NET Core 2.2 och tidigare versioner återspeglar metoder som Environment.Version, RuntimeInformation.FrameworkDescriptionoch dialogrutan filegenskaper för .NET Core-sammansättningar filversionen. Från och med .NET Core 3.0 återspeglar de produktversionen.
Följande bild illustrerar skillnaden i versionsinformation för System.Runtime.dll assembly för .NET Core 2.2 (till vänster) och .NET Core 3.0 (till höger) som visas i Utforskarens filegenskaper i Windows dialogruta.
Version införd
3,0
Rekommenderad åtgärd
Inga. Den här ändringen bör göra versionsidentifiering intuitiv i stället för obtuse.
Kategori
.NET Core-bibliotek
Berörda API:er
Anpassade EncoderFallbackBuffer-instanser kan inte rekursivt falla tillbaka
Anpassade EncoderFallbackBuffer instanser kan inte falla tillbaka rekursivt. Implementeringen av EncoderFallbackBuffer.GetNextChar() måste resultera i en teckensekvens som kan konverteras till målkodningen. Annars inträffar ett undantag.
Ändra beskrivning
Under en transkodningsåtgärd mellan tecken och byte identifierar körningen felaktiga eller icke-konvertible UTF-16-sekvenser och tillhandahåller dessa tecken till EncoderFallbackBuffer.Fallback metoden. Metoden Fallback avgör vilka tecken som ska ersättas med de ursprungliga icke-konvertible data och dessa tecken töms genom att anropa EncoderFallbackBuffer.GetNextChar i en loop.
Körtiden försöker sedan transkodar dessa ersättningstecken till den önskade kodningen. Om den här åtgärden lyckas fortsätter processen att transkoda från den punkt där det slutade i den ursprungliga indata-strängen.
Tidigare kan anpassade implementeringar av EncoderFallbackBuffer.GetNextChar() returnera teckensekvenser som inte kan konverteras till målkodningen. Om de ersatta tecknen inte kan omkodas till målkodningen anropar körningen EncoderFallbackBuffer.Fallback metoden igen med ersättningstecken och förväntar sig EncoderFallbackBuffer.GetNextChar() att metoden returnerar en ny ersättningssekvens. Den här processen fortsätter tills programmet slutligen ser en korrekt formulerad och omvandlingsbar ersättning eller tills ett maximalt rekursionstal har uppnåtts.
Från och med .NET Core 3.0 måste anpassade implementeringar av EncoderFallbackBuffer.GetNextChar() returnera teckensekvenser som kan konverteras till målkodningen. Om de ersatta tecknen inte kan omkodas till målkodningen genereras en ArgumentException . Körtiden gör inte längre rekursiva anrop till instansen EncoderFallbackBuffer.
Det här beteendet gäller endast när alla tre av följande villkor uppfylls:
- Körningsmiljön identifierar en felkonstruerad UTF-16-sekvens eller en UTF-16-sekvens som inte kan konverteras till målkodningen.
- En anpassad EncoderFallback har angetts.
- Det anpassade EncoderFallback försöket att ersätta en ny felformad eller icke-konverterbar UTF-16-sekvens.
Version införd
3,0
Rekommenderad åtgärd
De flesta utvecklare behöver inte vidta några åtgärder.
Om ett program använder en anpassad EncoderFallback och EncoderFallbackBuffer klass kontrollerar du att implementeringen av EncoderFallbackBuffer.Fallback fyller reservbufferten med välformulerade UTF-16-data som är direkt konvertibla till målkodningen när Fallback metoden först anropas av körningen.
Kategori
.NET Core-bibliotek
Berörda API:er
Flyttalsformatering och parseringsbeteende har ändrats
Flyttalsparsning och formateringsbeteende (av typerna Double och Single) är nu IEEE-kompatibla. Detta säkerställer att beteendet för flyttalstyper i .NET matchar andra IEEE-kompatibla språk. Ska till exempel double.Parse("SomeLiteral") alltid matcha vad C# producerar för double x = SomeLiteral.
Ändra beskrivning
I .NET Core 2.2 och tidigare versioner formaterar du med Double.ToString och Single.ToString, och parsar med Double.Parse, Double.TryParse, Single.Parseoch Single.TryParse är inte IEEE-kompatibla. Därför är det omöjligt att garantera att ett värde kan återställas till sitt ursprungliga tillstånd med någon av de standard- eller anpassade formatsträngar som stöds. För vissa indata kan försöket att parsa ett formaterat värde misslyckas, och för andra är det parsade värdet inte lika med det ursprungliga värdet.
Från och med .NET Core 3.0 är flyttalsparsning och formateringsåtgärder IEEE 754-kompatibla.
I följande tabell visas två kodfragment och hur utdata ändras mellan .NET Core 2.2 och .NET Core 3.1.
| Kodstycke | Utdata på .NET Core 2.2 | Utdata på .NET Core 3.1 |
|---|---|---|
Console.WriteLine((-0.0).ToString()); |
0 | –0 |
var value = -3.123456789123456789;Console.WriteLine(value == double.Parse(value.ToString())); |
False |
True |
För mer information, se blogginlägget Förbättringar av flyttalsparsning och formatering i .NET Core 3.0.
Version införd
3,0
Rekommenderad åtgärd
Avsnittet Potentiell påverkan på befintlig kod i förbättringarna av flyttalsparsning och formatering i blogginlägget .NET Core 3.0 föreslår vissa ändringar som du kan göra i koden om du vill behålla det tidigare beteendet.
- För vissa skillnader i formatering kan du få ett beteende som motsvarar det tidigare beteendet genom att ange en annan formatsträng.
- För skillnader i parsning finns det ingen mekanism för att återgå till det tidigare beteendet.
Kategori
.NET Core-bibliotek
Berörda API:er
Flyttalsparsningsåtgärder misslyckas inte längre eller utlöser en OverflowException
De flyttalsparsningsmetoderna genererar inte längre en OverflowException eller returnerar false när de parsar en sträng vars numeriska värde ligger utanför intervallet för Single eller Double flyttalstypen.
Ändra beskrivning
I .NET Core 2.2 och tidigare versioner kastar metoderna Double.Parse och Single.Parse en OverflowException för värden som ligger utanför intervallet för respektive typ. Metoderna Double.TryParse och Single.TryParse returnerar false för strängrepresentationer av numeriska värden som inte ligger inom intervallet.
Från och med .NET Core 3.0 Double.Parsemisslyckas inte längre metoderna , Double.TryParse, Single.Parseoch Single.TryParse när du parsar numeriska strängar som inte är inom intervallet. Parsningsmetoderna returnerar i stället Double för värden som överskrider Double.PositiveInfinity, och de returnerar Double.MaxValue för värden som är mindre än Double.NegativeInfinity. På samma sätt returnerar parsningsmetoderna Single för värden som överskrider Single.PositiveInfinity, och de returnerar Single.MaxValue för värden som är mindre än Single.NegativeInfinity.Single.MinValue
Den här ändringen gjordes för förbättrad IEEE 754:2008-efterlevnad.
Version införd
3,0
Rekommenderad åtgärd
Den här ändringen kan påverka koden på något av två sätt:
Din kod är beroende av hanteraren för OverflowException för att utföras när ett överflöd uppstår. I det här fallet bör du ta bort -instruktionen
catchoch placera nödvändig kod i enIf-instruktion som testar om Double.IsInfinity eller Single.IsInfinity ärtrue.Koden förutsätter att flyttalsvärdena inte är
Infinity. I det här fallet bör du lägga till nödvändig kod för att söka efter flyttalsvärden förPositiveInfinityochNegativeInfinity.
Kategori
.NET Core-bibliotek
Berörda API:er
InvalidAsynchronousStateException har flyttats till en annan sammansättning
Klassen InvalidAsynchronousStateException har flyttats.
Ändra beskrivning
I .NET Core 2.2 och tidigare versioner finns klassen InvalidAsynchronousStateException i assemblyn System.ComponentModel.TypeConverter.
Från och med .NET Core 3.0 finns den i sammansättningen System.ComponentModel.Primitives .
Version införd
3,0
Rekommenderad åtgärd
Den här ändringen påverkar endast program som använder reflektion för att läsa in InvalidAsynchronousStateException genom att anropa en metod, till exempel Assembly.GetType eller en överlagring av Activator.CreateInstance som förutsätter att typen finns i en viss sammansättning. I så fall uppdaterar du sammansättningen som refereras i metodanropet så att den återspeglar typens nya sammansättningsplats.
Kategori
.NET Core-bibliotek
Berörda API:er
Inga.
Ersättande av illa utformade UTF-8 byte-sekvenser följer Unicode-riktlinjerna
UTF8Encoding När klassen stöter på en illa utformad UTF-8 byte-sekvens under en byte-till-tecken-transkodningsåtgärd ersätter den sekvensen med tecknet U+FFFD REPLACEMENT CHARACTER i utdatasträngen. .NET Core 3.0 skiljer sig från tidigare versioner av .NET Core och .NET Framework genom att följa unicode-metoden för att utföra den här ersättningen under omkodningsåtgärden.
Detta är en del av ett större arbete för att förbättra UTF-8-hanteringen i hela .NET, inklusive av de nya System.Text.Unicode.Utf8 och System.Text.Rune typerna. Typen UTF8Encoding fick förbättrad felhanteringsmekanik så att den ger utdata som överensstämmer med de nyligen introducerade typerna.
Ändra beskrivning
Från och med .NET Core 3.0, när byte kodas om till tecken, utför klassen UTF8Encoding teckenersättning baserat på Unicodes bästa praxis. Ersättningsmekanismen som används beskrivs av Unicode Standard, version 12.0, s. 3.9 (PDF) i rubriken U+FFFD Substitution of Maximal Subparts.
Det här beteendet gäller endast när indatabytesekvensen innehåller oformaterad UTF-8-data. Om instansen UTF8Encoding har konstruerats med throwOnInvalidBytes: truefortsätter instansen UTF8Encoding dessutom att generera ogiltiga indata i stället för att utföra U+FFFD-ersättning. Mer information om konstruktorn finns i UTF8EncodingUTF8Encoding(Boolean, Boolean).
I följande tabell visas effekten av den här ändringen med ogiltiga indata på 3 byte:
| Felaktig 3-bytesinmatning | Utdata före .NET Core 3.0 | Utdata som börjar med .NET Core 3.0 |
|---|---|---|
[ ED A0 90 ] |
[ FFFD FFFD ] (utdata med 2 tecken) |
[ FFFD FFFD FFFD ] (utdata med 3 tecken) |
3-teckens utdata är det önskade utdata, enligt tabell 3-9 i den tidigare länkade Unicode Standard-PDF.
Version införd
3,0
Rekommenderad åtgärd
Ingen åtgärd krävs från utvecklarens sida.
Kategori
.NET Core-bibliotek
Berörda API:er
TypeDescriptionProviderAttribute har flyttats till en annan sammansättning
Klassen TypeDescriptionProviderAttribute har flyttats.
Ändra beskrivning
I .NET Core 2.2 och tidigare versioner finns klassen TypeDescriptionProviderAttribute i sammansättningen System.ComponentModel.TypeConverter.
Från och med .NET Core 3.0 finns den i sammansättningen System.ObjectModel .
Version införd
3,0
Rekommenderad åtgärd
Den här ändringen påverkar endast program som använder reflektion för att läsa in TypeDescriptionProviderAttribute typen genom att anropa en metod, till exempel Assembly.GetType eller en överlagring av Activator.CreateInstance som förutsätter att typen finns i en viss sammansättning. I så fall bör sammansättningen som refereras i metodanropet uppdateras för att återspegla typens nya sammansättningsplats.
Kategori
Windows-formulär
Berörda API:er
Inga.
ZipArchiveEntry hanterar inte längre arkiv med inkonsekventa inmatningsstorlekar
Zip-arkiv visar både komprimerad storlek och okomprimerad storlek i den centrala katalogen och det lokala huvudet. Själva inmatningsdata anger också dess storlek. I .NET Core 2.2 och tidigare versioner kontrollerades aldrig dessa värden för konsekvens. Från och med .NET Core 3.0 är de nu det.
Ändra beskrivning
I .NET Core 2.2 och tidigare versioner fortsätter ZipArchiveEntry.Open() även om det lokala huvudet inte överensstämmer med det centrala huvudet i zip-filen. Data dekomprimeras tills slutet av den komprimerade dataströmmen har nåtts, även om dess längd överskrider den okomprimerade filstorleken som anges i den centrala katalogen/det lokala huvudet.
Från och med .NET Core 3.0 kontrollerar Metoden ZipArchiveEntry.Open() att det lokala huvudet och det centrala huvudet är överens om komprimerade och okomprimerade storlekar på en post. Om de inte gör det, kastar metoden ett InvalidDataException om storlekarna för arkivets lokala huvud och/eller databeskrivningslistan inte överensstämmer med zip-filens centrala katalog. När du läser en post begränsas de dekomprimerade data till den okomprimerade filstorlek som anges i titeln.
Den här ändringen gjordes för att säkerställa att en ZipArchiveEntry korrekt representerar storleken på dess data och att endast den mängden data läss.
Version införd
3,0
Rekommenderad åtgärd
Packa om alla zip-arkiv som uppvisar dessa problem.
Kategori
.NET Core-bibliotek
Berörda API:er
- ZipArchiveEntry.Open()
- ZipFileExtensions.ExtractToDirectory
- ZipFileExtensions.ExtractToFile
- ZipFile.ExtractToDirectory
FieldInfo.SetValue genererar undantag för statiska fält med endast init
Från och med .NET Core 3.0 utlöses ett undantag när du försöker ange ett värde för ett statiskt InitOnly fält genom att anropa System.Reflection.FieldInfo.SetValue.
Ändra beskrivning
I .NET Framework och versioner av .NET Core före 3.0 kunde du sätta värdet på ett statiskt fält som är konstant efter att ha blivit initierat (readonly-attributet i C#) genom att anropa . Att ange ett sådant fält på det här sättet resulterade dock i oförutsägbart beteende baserat på målramverket och optimeringsinställningarna.
När du anropar SetValue på ett statiskt InitOnly-fält i .NET Core 3.0 och senare versioner kastas ett System.FieldAccessException-undantag.
Tips
Ett InitOnly fält är ett fält som bara kan anges när det deklareras eller i konstruktorn för den innehållande klassen. Med andra ord är den konstant när den har initierats.
Version införd
3,0
Rekommenderad åtgärd
Initiera statiska InitOnly fält i en statisk konstruktor. Detta gäller både dynamiska och icke-dynamiska typer.
Du kan också ta bort FieldAttributes.InitOnly attributet från fältet och sedan anropa FieldInfo.SetValue.
Kategori
.NET Core-bibliotek
Berörda API:er
- FieldInfo.SetValue(Object, Object)
- FieldInfo.SetValue(Object, Object, BindingFlags, Binder, CultureInfo)
Att skicka GroupCollection till tilläggsmetoder som tar IEnumerable<T> kräver avklaring
När du anropar en tilläggsmetod som tar en IEnumerable<T> på en GroupCollection, måste du tydliggöra typen med en typomvandling.
Ändra beskrivning
Från och med .NET Core 3.0 implementerar System.Text.RegularExpressions.GroupCollectionIEnumerable<KeyValuePair<String,Group>> utöver de andra typerna den implementerar, inklusive IEnumerable<Group>. Detta resulterar i tvetydighet när du anropar en tilläggsmetod som tar en IEnumerable<T>. Om du till exempel GroupCollectionanropar en sådan tilläggsmetod på en Enumerable.Count instans visas följande kompilatorfel:
CS1061: "GroupCollection" innehåller inte någon definition för "Count" och ingen tillgänglig tilläggsmetod "Count" som accepterar ett första argument av typen "GroupCollection" kunde hittas (saknar du ett användningsdirektiv eller en sammansättningsreferens?)
I tidigare versioner av .NET fanns det ingen tvetydighet och inget kompilatorfel.
Version införd
3,0
Orsak till ändringen
Detta var en oavsiktlig brytändring. Eftersom det har varit så här under en tid planerar vi inte att återställa det. Dessutom skulle en sådan förändring i sig vara banbrytande.
Rekommenderad åtgärd
Till GroupCollection exempel, tvetydiga anrop till tilläggsmetoder som accepterar en IEnumerable<T> med en cast.
// Without a cast - causes CS1061.
match.Groups.Count(_ => true)
// With a disambiguating cast.
((IEnumerable<Group>)m.Groups).Count(_ => true);
Kategori
.NET Core-bibliotek
Berörda API:er
Alla tilläggsmetoder som accepterar en IEnumerable<T> påverkas. Till exempel:
- System.Collections.Immutable.ImmutableArray.ToImmutableArray<TSource>(IEnumerable<TSource>)
- System.Collections.Immutable.ImmutableDictionary.ToImmutableDictionary
- System.Collections.Immutable.ImmutableHashSet.ToImmutableHashSet
- System.Collections.Immutable.ImmutableList.ToImmutableList<TSource>(IEnumerable<TSource>)
- System.Collections.Immutable.ImmutableSortedDictionary.ToImmutableSortedDictionary
- System.Collections.Immutable.ImmutableSortedSet.ToImmutableSortedSet
- System.Data.DataTableExtensions.CopyToDataTable
- De flesta av
System.Linq.Enumerablemetoderna, till exempel System.Linq.Enumerable.Count - System.Linq.ParallelEnumerable.AsParallel
- System.Linq.Queryable.AsQueryable
Kryptografi
- Syntaxen BEGIN TRUSTED CERTIFICATE stöds inte längre på Linux
- EnvelopedCms använder som standard AES-256-kryptering
- Minsta storlek för RSAOpenSsl-nyckelgenerering har ökat
- .NET Core 3.0 föredrar OpenSSL 1.1.x till OpenSSL 1.0.x
- CryptoStream.Dispose omvandlar endast det sista blocket när du skriver
Syntaxen "BEGIN TRUSTED CERTIFICATE" stöds inte längre för rotcertifikat i Linux
Rotcertifikat i Linux och andra Unix-liknande system (men inte macOS) kan visas i två former: PEM-standardrubriken BEGIN CERTIFICATE och den OpenSSL-specifika BEGIN TRUSTED CERTIFICATE PEM-rubriken. Den senare syntaxen möjliggör ytterligare konfiguration som har orsakat kompatibilitetsproblem med .NET Core-klassen System.Security.Cryptography.X509Certificates.X509Chain .
BEGIN TRUSTED CERTIFICATE innehållet i rotcertifikatet laddas inte längre av kedjemotorn från och med .NET Core 3.0.
Ändra beskrivning
Tidigare användes både syntaxerna BEGIN CERTIFICATE och BEGIN TRUSTED CERTIFICATE för att fylla i rotförtroendelistan. Om syntaxen BEGIN TRUSTED CERTIFICATE användes och ytterligare alternativ angavs i filen X509Chain kan ha rapporterat att kedjeförtroendet uttryckligen inte tilläts (X509ChainStatusFlags.ExplicitDistrust). Men om certifikatet också angavs med syntaxen BEGIN CERTIFICATE i en tidigare inläst fil tilläts kedjeförtroendet.
Från och med .NET Core 3.0, läses inte längre innehållet i BEGIN TRUSTED CERTIFICATE. Om certifikatet inte också anges via en standard BEGIN CERTIFICATE syntax, rapporterar X509Chain att roten inte är betrodd (X509ChainStatusFlags.UntrustedRoot).
Version införd
3,0
Rekommenderad åtgärd
De flesta program påverkas inte av den här ändringen, men program som inte kan se båda rotcertifikatkällorna på grund av behörighetsproblem kan uppleva oväntade UntrustedRoot fel efter uppgraderingen.
Många Linux-distributioner (eller distributioner) skriver rotcertifikat till två platser: en katalog med ett certifikat per fil och en sammanfogning till en enda fil. i vissa distributioner använder katalogen för ett-certifikat-per-fil syntaxen BEGIN TRUSTED CERTIFICATE, medan filsammanfogning använder standardsyntaxen BEGIN CERTIFICATE. Se till att alla anpassade rotcertifikat läggs till som BEGIN CERTIFICATE på minst en av dessa platser och att båda platserna kan läsas av ditt program.
Den typiska katalogen är /etc/ssl/certs/ och den typiska sammanfogade filen är /etc/ssl/cert.pem. Använd kommandot openssl version -d för att fastställa den plattformsspecifika roten, som kan skilja sig från /etc/ssl/. På Ubuntu 18.04 är katalogen till exempel /usr/lib/ssl/certs/ och filen är /usr/lib/ssl/cert.pem.
Men /usr/lib/ssl/certs/ är en symlink till /etc/ssl/certs/ och /usr/lib/ssl/cert.pem finns inte.
$ openssl version -d
OPENSSLDIR: "/usr/lib/ssl"
$ ls -al /usr/lib/ssl
total 12
drwxr-xr-x 3 root root 4096 Dec 12 17:10 .
drwxr-xr-x 73 root root 4096 Feb 20 15:18 ..
lrwxrwxrwx 1 root root 14 Mar 27 2018 certs -> /etc/ssl/certs
drwxr-xr-x 2 root root 4096 Dec 12 17:10 misc
lrwxrwxrwx 1 root root 20 Nov 12 16:58 openssl.cnf -> /etc/ssl/openssl.cnf
lrwxrwxrwx 1 root root 16 Mar 27 2018 private -> /etc/ssl/private
Kategori
Kryptografi
Berörda API:er
EnvelopedCms använder som standard AES-256-kryptering
Standardalgoritmen för symmetrisk kryptering som används av EnvelopedCms har ändrats från TripleDES till AES-256.
Ändra beskrivning
I tidigare versioner, när EnvelopedCms används för att kryptera data utan att ange en symmetrisk krypteringsalgoritm via en konstruktoröverlagring, krypteras data med TripleDES/3DES/3DEA/DES3-EDE-algoritmen.
Från och med .NET Core 3.0 (via version 4.6.0 av NuGet-paketet System.Security.Cryptography.Pkcs ) har standardalgoritmen ändrats till AES-256 för algoritmmodernisering och för att förbättra säkerheten för standardalternativ. Om ett meddelandemottagarecertifikat har en (icke-EC) Diffie-Hellman offentlig nyckel kan krypteringsåtgärden misslyckas med en CryptographicException på grund av begränsningar i den underliggande plattformen.
I följande exempelkod krypteras data med TripleDES om de körs på .NET Core 2.2 eller tidigare. Om den körs på .NET Core 3.0 eller senare krypteras den med AES-256.
EnvelopedCms cms = new EnvelopedCms(content);
cms.Encrypt(recipient);
return cms.Encode();
Version införd
3,0
Rekommenderad åtgärd
Om du påverkas negativt av ändringen kan du återställa TripleDES-kryptering genom att uttryckligen ange krypteringsalgoritmidentifieraren i en EnvelopedCms konstruktor som innehåller en parameter av typen AlgorithmIdentifier, till exempel:
Oid tripleDesOid = new Oid("1.2.840.113549.3.7", null);
AlgorithmIdentifier tripleDesIdentifier = new AlgorithmIdentifier(tripleDesOid);
EnvelopedCms cms = new EnvelopedCms(content, tripleDesIdentifier);
cms.Encrypt(recipient);
return cms.Encode();
Kategori
Kryptografi
Berörda API:er
Minsta storlek för RSAOpenSsl-nyckelgenerering har ökat
Den minsta storleken för att generera nya RSA-nycklar i Linux har ökat från 384-bitars till 512-bitars.
Ändra beskrivning
Från och med .NET Core 3.0 har den minsta juridiska nyckelstorleken som rapporterats av egenskapen LegalKeySizes på RSA-instanser från RSA.Create, RSAOpenSsl och RSACryptoServiceProvider på Linux ökat från 384 till 512.
I .NET Core 2.2 och tidigare versioner lyckas därför ett metodanrop, till exempel RSA.Create(384) . I .NET Core 3.0 och senare versioner genererar metodanropet RSA.Create(384) ett undantag som anger att storleken är för liten.
Den här ändringen gjordes eftersom OpenSSL, som utför kryptografiska åtgärder i Linux, höjde sitt minimum mellan versionerna 1.0.2 och 1.1.0. .NET Core 3.0 föredrar OpenSSL 1.1.x till 1.0.x, och den minsta rapporterade versionen höjdes för att återspegla den nya högre beroendebegränsningen.
Version införd
3,0
Rekommenderad åtgärd
Om du anropar någon av de berörda API:erna kontrollerar du att storleken på alla genererade nycklar inte är mindre än providerns minimum.
Anteckning
384-bitars RSA anses redan vara osäkert (liksom 512-bitars RSA). Moderna rekommendationer, till exempel NIST Special Publication 800-57 Del 1 Revision 4, föreslår 2048-bitars som minsta storlek för nyligen genererade nycklar.
Kategori
Kryptografi
Berörda API:er
.NET Core 3.0 föredrar OpenSSL 1.1.x till OpenSSL 1.0.x
.NET Core för Linux, som fungerar i flera Linux-distributioner, kan stödja både OpenSSL 1.0.x och OpenSSL 1.1.x. .NET Core 2.1 och .NET Core 2.2 letar efter 1.0.x först och faller sedan tillbaka till 1.1.x; .NET Core 3.0 letar efter 1.1.x först. Den här ändringen gjordes för att lägga till stöd för nya kryptografiska standarder.
Den här ändringen kan påverka bibliotek eller program som utför plattformsinterop med OpenSSL-specifika interop-typer i .NET Core.
Ändra beskrivning
I .NET Core 2.2 och tidigare versioner föredrar körningen att läsa in OpenSSL 1.0.x över 1.1.x. Det innebär att typerna IntPtr och SafeHandle för interop med OpenSSL används med libcrypto.so.1.0.0 /libcrypto.so.1.0 /libcrypto.so.10 efter önskemål.
Från och med .NET Core 3.0 föredrar runtime att ladda OpenSSL 1.1.x över OpenSSL 1.0.x, så IntPtr och SafeHandle typerna för interop med OpenSSL används med libcrypto.so.1.1 / libcrypto.so.11 / libcrypto.so.1.1.0 / libcrypto.so.1.1.1 i första hand. Därför kan bibliotek och program som samverkar direkt med OpenSSL ha inkompatibla pekare med .NET Core-exponerade värden vid uppgradering från .NET Core 2.1 eller .NET Core 2.2.
Version införd
3,0
Rekommenderad åtgärd
Bibliotek och program som utför direkta åtgärder med OpenSSL måste vara noga med att se till att de använder samma version av OpenSSL som .NET Core-körningen.
Alla bibliotek eller program som använder IntPtr eller SafeHandle värden från .NET Core kryptografiska typer direkt med OpenSSL bör jämföra versionen av biblioteket som de använder med den nya SafeEvpPKeyHandle.OpenSslVersion egenskapen för att säkerställa att pekarna är kompatibla.
Kategori
Kryptografi
Berörda API:er
- SafeEvpPKeyHandle
- RSAOpenSsl(IntPtr)
- RSAOpenSsl(SafeEvpPKeyHandle)
- RSAOpenSsl.DuplicateKeyHandle()
- DSAOpenSsl(IntPtr)
- DSAOpenSsl(SafeEvpPKeyHandle)
- DSAOpenSsl.DuplicateKeyHandle()
- ECDsaOpenSsl(IntPtr)
- ECDsaOpenSsl(SafeEvpPKeyHandle)
- ECDsaOpenSsl.DuplicateKeyHandle()
- ECDiffieHellmanOpenSsl(IntPtr)
- ECDiffieHellmanOpenSsl(SafeEvpPKeyHandle)
- ECDiffieHellmanOpenSsl.DuplicateKeyHandle()
- X509Certificate.Handle
CryptoStream.Dispose omvandlar endast det sista blocket när du skriver
Metoden CryptoStream.Dispose , som används för att slutföra CryptoStream åtgärder, försöker inte längre transformera det sista blocket vid läsning.
Ändra beskrivning
I tidigare .NET-versioner, om en användare utförde en ofullständig läsning när CryptoStream användes i Read-läge, kunde metoden Dispose utlösa ett undantag (till exempel vid användning av AES med utfyllnad). Undantaget utlöstes eftersom det sista blocket försökte omvandlas men data var ofullständiga.
I .NET Core 3.0 och senare versioner Dispose försöker inte längre transformera det sista blocket vid läsning, vilket möjliggör ofullständiga läsningar.
Orsak till ändringen
Den här ändringen möjliggör ofullständiga läsningar från kryptoströmmen när en nätverksåtgärd avbryts, utan att du behöver fånga upp ett undantag.
Version införd
3,0
Rekommenderad åtgärd
De flesta appar bör inte påverkas av den här ändringen.
Om ditt program tidigare upptäckte ett undantag i händelse av en ofullständig läsning kan du ta bort det catch blocket.
Om din app använde transformering av det sista blocket i hash-scenarier kan du behöva se till att hela dataströmmen läses innan den stängs.
Kategori
Kryptografi
Berörda API:er
Entity Framework Core
Icke-bakåtkompatibla ändringar i Entity Framework Core
Globalisering
"C" nationella inställningar mappar till det invarianta språket
.NET Core 2.2 och tidigare versioner beror på standardbeteendet för ICU, som mappar språkvarianten "C" till en_US_POSIX nationella inställningar. en_US_POSIX-lokalen har ett oönskat sorteringsbeteende eftersom den inte stöder skiftlägesinsensitiva strängjämförelser. Eftersom vissa Linux-distributioner anger "C"-locale som standard-locale upplevde användarna oväntat beteende.
Ändra beskrivning
Från och med .NET Core 3.0 har "C"-språkmappningen ändrats för att använda invariantspråket i stället för en_US_POSIX. "C"-språkvarianten för Invariant-mappning tillämpas också på Windows för konsekvens.
Mappning av "C" till en_US_POSIX kultur orsakade kundförvirring, eftersom en_US_POSIX inte stöder skiftlägesokänsliga sorterings-/söksträngsåtgärder. Eftersom "C"-språkvarianten används som standardspråk i vissa Linux-distributioner upplevde kunderna detta oönskade beteende på dessa operativsystem.
Version införd
3,0
Rekommenderad åtgärd
Inget specifikt mer än medvetenheten om denna förändring. Den här ändringen påverkar endast program som använder "C"-språkmappningen.
Kategori
Globalisering
Berörda API:er
Alla sorterings- och kultur-API:er påverkas av den här ändringen.
MSBuild
Namnändring för resursmanifestfil
Från och med .NET Core 3.0 genererar MSBuild i standardfallet ett annat manifestfilnamn för resursfiler.
Version införd
3,0
Ändra beskrivning
Innan .NET Core 3.0, om inga LogicalName, ManifestResourceName eller DependentUpon metadata angavs för ett EmbeddedResource-objekt i projektfilen, genererade MSBuild ett manifestfilnamn i mönstret <RootNamespace>.<ResourceFilePathFromProjectRoot>.resources. Om RootNamespace inte har definierats i projektfilen är det som standard namnet på projektet. Till exempel var det genererade manifestnamnet för en resursfil med namnet Form1.resx i rotprojektkatalogen MyProject.Form1.resources.
Från och med .NET Core 3.0, om en resursfil samplaceras med en källfil med samma namn (till exempel Form1.resx och Form1.cs), använder MSBuild typinformation från källfilen för att generera manifestfilens namn i mönstret <Namespace>.<ClassName>.resources. Namnområdet och klassnamnet extraheras från den första typen i samma källfil. Det genererade manifestnamnet för en resursfil med namnet Form1.resx som samlokaliserats med en källfil med namnet Form1.cs är MyNamespace.Form1.resources. Det viktigaste att notera är att den första delen av filnamnet skiljer sig från tidigare versioner av .NET Core (MyNamespace i stället för MyProject).
Anteckning
Om du har LogicalName, ManifestResourceName eller DependentUpon-metadata specificerat på ett EmbeddedResource-objekt i projektfilen så påverkar den här ändringen inte den resursfilen.
Den här icke-bakåtkompatibla ändringen introducerades med tillägget av EmbeddedResourceUseDependentUponConvention-egenskapen till .NET Core-projekten. Som standard visas inte resursfiler uttryckligen i en .NET Core-projektfil, så de har inga DependentUpon metadata för att ange hur den genererade .resources-filen ska namnges. När EmbeddedResourceUseDependentUponConvention är inställt på true, vilket är standardinställningen, letar MSBuild efter en samlokaliserad källfil och extraherar ett namnområde och klassnamn från filen. Om du anger EmbeddedResourceUseDependentUponConvention till falsegenererar MSBuild manifestnamnet enligt det tidigare beteendet, som kombinerar RootNamespace och den relativa filsökvägen.
Rekommenderad åtgärd
I de flesta fall krävs ingen åtgärd från utvecklarens sida, och din app bör fortsätta att fungera. Men om den här ändringen bryter din app kan du antingen:
Ändra koden så att den förväntar sig det nya manifestnamnet.
Avstå från den nya namngivningskonventionen genom att ställa in
EmbeddedResourceUseDependentUponConventiontillfalsei projektfilen.<PropertyGroup> <EmbeddedResourceUseDependentUponConvention>false</EmbeddedResourceUseDependentUponConvention> </PropertyGroup>
Kategori
MSBuild
Berörda API:er
Ej tillämpligt
Nätverk
Standardvärdet för HttpRequestMessage.Version har ändrats till 1.1
Standardvärdet för System.Net.Http.HttpRequestMessage.Version egenskapen har ändrats från 2.0 till 1.1.
Version införd
3,0
Ändra beskrivning
I .NET Core 1.0 till 2.0 är standardvärdet för System.Net.Http.HttpRequestMessage.Version egenskapen 1.1. Från och med .NET Core 2.1 ändrades den till 2.1.
Från och med .NET Core 3.0 är standardversionsnumret som returneras av System.Net.Http.HttpRequestMessage.Version egenskapen återigen 1.1.
Rekommenderad åtgärd
Uppdatera koden om den är beroende av att System.Net.Http.HttpRequestMessage.Version egenskapen returnerar standardvärdet 2.0.
Kategori
Nätverk
Berörda API:er
Windows-formulär
- Control.DefaultFont har ändrats till Segoe UI 9 pt
- Modernisering av FolderBrowserDialog
- SerializableAttribute har tagits bort från vissa Typer av Windows-formulär
- Den AllowUpdateChildControlIndexForTabControls-kompatibilitetsväxeln stöds inte
- DomainUpDown.UseLegacyScrolling-kompatibilitetsväxeln stöds inte
- DoNotLoadLatestRichEditControl-kompatibilitetsväxeln stöds inte
- DoNotSupportSelectAllShortcutInMultilineTextBox-kompatibilitetsväxeln stöds inte
- DontSupportReentrantFilterMessage-kompatibilitetsväxeln stöds inte
- EnableVisualStyleValidation-kompatibilitetsväxeln stöds inte
- UseLegacyContextMenuStripSourceControlValue-kompatibilitetsväxeln stöds inte
- UseLegacyImages kompatibilitetsväxel stöds inte
- Om- och SplashScreen-mallar är trasiga för Visual Basic
Standardkontrollteckensnittet har ändrats till Segoe UI 9 pt
Ändra beskrivning
I .NET Framework har egenskapen Control.DefaultFont angetts till Microsoft Sans Serif 8.25 pt. Följande bild visar ett fönster som använder standardteckensnittet.
Från och med .NET Core 3.0 är standardteckensnittet inställt på Segoe UI 9 pt (samma teckensnitt som SystemFonts.MessageBoxFont). Som ett resultat av den här ändringen är formulär och kontroller ungefär 27% större för att ta hänsyn till den större storleken på det nya standardteckensnittet. Till exempel:
Den här ändringen gjordes i enlighet med riktlinjer för Windows-användarupplevelse (UX).
Version införd
3,0
Rekommenderad åtgärd
På grund av ändringen i storleken på formulär och kontroller kontrollerar du att programmet renderas korrekt.
Om du vill behålla det ursprungliga teckensnittet för ett enskilt formulär anger du standardteckensnittet till Microsoft Sans Serif 8.25 pt. Till exempel:
public MyForm()
{
InitializeComponent();
Font = new Font(new FontFamily("Microsoft Sans Serif"), 8.25f);
}
Du kan också ändra standardteckensnittet för ett helt program på något av följande sätt:
Genom att ange egenskapen
ApplicationDefaultFontMSBuild till "Microsoft Sans Serif, 8.25pt". Det här är den bästa tekniken eftersom det gör att Visual Studio kan använda de nya inställningarna i designern.<PropertyGroup> <ApplicationDefaultFont>Microsoft Sans Serif, 8.25pt</ApplicationDefaultFont> </PropertyGroup>Genom att anropa Application.SetDefaultFont(Font).
class Program { [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.SetHighDpiMode(HighDpiMode.SystemAware); Application.SetDefaultFont(new Font(new FontFamily("Microsoft Sans Serif"), 8.25f)); Application.Run(new Form1()); } }
Kategori
- Windows-formulär
Berörda API:er
Inga.
Modernisering av FolderBrowserDialog
Kontrollen FolderBrowserDialog har ändrats i Windows Forms-program för .NET Core.
Ändra beskrivning
I .NET Framework använder Windows-formulär följande dialogruta för FolderBrowserDialog-kontrollen:
I .NET Core 3.0 använder Windows Forms en nyare COM-baserad kontroll som introducerades i Windows Vista:
Version införd
3,0
Rekommenderad åtgärd
Dialogrutan uppgraderas automatiskt.
Om du vill behålla den ursprungliga dialogrutan anger du egenskapen FolderBrowserDialog.AutoUpgradeEnabled till false innan du visar dialogrutan, vilket illustreras av följande kodfragment:
var dialog = new FolderBrowserDialog();
dialog.AutoUpgradeEnabled = false;
dialog.ShowDialog();
Kategori
Windows-formulär
Berörda API:er
SerializableAttribute har tagits bort från vissa Typer av Windows-formulär
SerializableAttribute har tagits bort från vissa Windows Forms-klasser som inte har några kända scenarier med binär serialisering.
Ändra beskrivning
Följande typer är dekorerade med SerializableAttribute i .NET Framework, men attributet har tagits bort i .NET Core:
System.InvariantComparer- System.ComponentModel.Design.ExceptionCollection
- System.ComponentModel.Design.Serialization.CodeDomSerializerException
System.ComponentModel.Design.Serialization.CodeDomComponentSerializationService.CodeDomSerializationStore- System.Drawing.Design.ToolboxItem
System.Resources.ResXNullRefSystem.Resources.ResXDataNodeSystem.Resources.ResXFileRef- System.Windows.Forms.Cursor
System.Windows.Forms.NativeMethods.MSOCRINFOSTRUCTSystem.Windows.Forms.NativeMethods.MSG
Tidigare har den här serialiseringsmekanismen haft allvarliga underhålls- och säkerhetsproblem. Att underhålla SerializableAttribute på typer innebär att dessa typer måste testas för serialiseringsändringar från version till version och potentiellt serialiseringsändringar från ramverk till ramverk. Detta gör det svårare att utveckla dessa typer och kan vara kostsamt att underhålla. Dessa typer har inga kända scenarier för binär serialisering, vilket minimerar effekten av att ta bort attributet.
För mer information, se binär serialisering.
Version införd
3,0
Rekommenderad åtgärd
Uppdatera all kod som kan vara beroende av att dessa typer markeras som serialiserbara.
Kategori
Windows-formulär
Berörda API:er
- Ingen
AllowUpdateChildControlIndexForTabControls-kompatibilitetsväxeln stöds inte
Kompatibilitetsväxeln Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls stöds i Windows Forms i .NET Framework 4.6 och senare versioner, men stöds inte på .NET Core eller .NET 5.0 och senare.
Ändra beskrivning
Om du väljer en flik i .NET Framework 4.6 och senare versioner, ordnas dess kontrollsamling om. Med Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls kompatibilitetsväxel kan ett program hoppa över den här omordningen när det här beteendet är oönskat.
I .NET Core och .NET 5.0 och senare stöds inte växeln Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls.
Version införd
3,0
Rekommenderad åtgärd
Ta bort växeln. Växeln stöds inte och inga alternativa funktioner är tillgängliga.
Kategori
Windows-formulär
Berörda API:er
- Ingen
DomainUpDown.UseLegacyScrolling-kompatibilitetsväxeln stöds inte
Den Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling kompatibilitetsväxeln, som introducerades i .NET Framework 4.7.1, stöds inte i Windows Forms på .NET Core eller .NET 5.0 och senare.
Ändra beskrivning
Från och med .NET Framework 4.7.1 gjorde Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling-kompatibilitetsswitchen det möjligt för utvecklare att välja bort oberoende DomainUpDown.DownButton()- och DomainUpDown.UpButton()-funktioner. Växeln återställde det äldre beteendet, där DomainUpDown.UpButton() ignoreras om kontexttext finns, och utvecklaren måste använda DomainUpDown.DownButton() åtgärd på kontrollen innan åtgärden DomainUpDown.UpButton(). Mer information finns i <AppContextSwitchOverrides> element.
I .NET Core och .NET 5.0 och senare stöds inte växeln Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling.
Version införd
3,0
Rekommenderad åtgärd
Ta bort växeln. Växeln stöds inte och inga alternativa funktioner är tillgängliga.
Kategori
Windows-formulär
Berörda API:er
DoNotLoadLatestRichEditControl-kompatibilitetsväxeln stöds inte
Den Switch.System.Windows.Forms.UseLegacyImages kompatibilitetsväxeln, som introducerades i .NET Framework 4.7.1, stöds inte i Windows Forms på .NET Core eller .NET 5.0 och senare.
Ändra beskrivning
I .NET Framework 4.6.2 och tidigare versioner instansierar RichTextBox kontrollen Win32 RichEdit-kontrollen v3.0 och för program som riktar in sig på .NET Framework 4.7.1 instansierar RichTextBox kontrollen RichEdit v4.1 (i msftedit.dll). Den Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl kompatibilitetsväxeln introducerades för att tillåta program som riktar sig mot .NET Framework 4.7.1 och senare versioner att välja bort den nya RichEdit v4.1-kontrollen och använda den gamla RichEdit v3-kontrollen i stället.
I .NET Core- och .NET 5.0- och senare versioner stöds inte växeln Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl. Endast nya versioner av RichTextBox-kontrollen stöds.
Version införd
3,0
Rekommenderad åtgärd
Ta bort växeln. Växeln stöds inte och inga alternativa funktioner är tillgängliga.
Kategori
Windows-formulär
Berörda API:er
DoNotSupportSelectAllShortcutInMultilineTextBox-kompatibilitetsväxeln stöds inte
Den Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox kompatibilitetsväxeln, som introducerades i .NET Framework 4.6.1, stöds inte i Windows Forms på .NET Core och .NET 5.0 och senare.
Ändra beskrivning
Från och med .NET Framework 4.6.1 väljer du Ctrl + En genvägsnyckel i en TextBox kontroll markerade all text. I .NET Framework 4.6 och tidigare versioner kunde du inte välja Ctrl + En genvägsnyckel kunde inte markera all text om Textbox.ShortcutsEnabled och TextBox.Multiline egenskaper båda var inställda på true. Kompatibilitetsväxeln Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox introducerades i .NET Framework 4.6.1 för att behålla det ursprungliga beteendet. Mer information finns i TextBox.ProcessCmdKey.
I .NET Core- och .NET 5.0- och senare versioner stöds inte växeln Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox.
Version införd
3,0
Rekommenderad åtgärd
Ta bort växeln. Växeln stöds inte och inga alternativa funktioner är tillgängliga.
Kategori
Windows-formulär
Berörda API:er
- Ingen
DontSupportReentrantFilterMessage-kompatibilitetsväxeln stöds inte
Den Switch.System.Windows.Forms.DontSupportReentrantFilterMessage kompatibilitetsväxeln, som introducerades i .NET Framework 4.6.1, stöds inte i Windows Forms på .NET Core och .NET 5.0 och senare.
Ändra beskrivning
Från och med .NET Framework 4.6.1 löser Switch.System.Windows.Forms.DontSupportReentrantFilterMessage kompatibilitetsväxling möjliga IndexOutOfRangeException undantag när Application.FilterMessage-meddelandet anropas med en anpassad IMessageFilter.PreFilterMessage implementering. Mer information finns i Mitigation: Custom IMessageFilter.PreFilterMessage Implementations.
I .NET Core och .NET 5.0 och senare stöds inte växeln Switch.System.Windows.Forms.DontSupportReentrantFilterMessage.
Version införd
3,0
Rekommenderad åtgärd
Ta bort växeln. Växeln stöds inte och inga alternativa funktioner är tillgängliga.
Kategori
Windows-formulär
Berörda API:er
EnableVisualStyleValidation-kompatibilitetsväxeln stöds inte
Kompatibilitetsväxeln Switch.System.Windows.Forms.EnableVisualStyleValidation stöds inte i Windows Forms på .NET Core eller .NET 5.0 och senare.
Ändra beskrivning
I .NET Framework tillät Switch.System.Windows.Forms.EnableVisualStyleValidation-kompatibilitetsväxeln en applikation att inte delta i valideringen av visuella format som tillhandahålls i numerisk form.
I .NET Core och .NET 5.0 och senare stöds inte växeln Switch.System.Windows.Forms.EnableVisualStyleValidation.
Version införd
3,0
Rekommenderad åtgärd
Ta bort växeln. Växeln stöds inte och inga alternativa funktioner är tillgängliga.
Kategori
Windows-formulär
Berörda API:er
- Ingen
Kompatibilitetsväxeln UseLegacyContextMenuStripSourceControlValue stöds inte
Den Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue kompatibilitetsväxeln, som introducerades i .NET Framework 4.7.2, stöds inte i Windows Forms på .NET Core eller .NET 5.0 och senare.
Ändra beskrivning
Från och med .NET Framework 4.7.2 gör Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue kompatibilitetsväxeln att utvecklaren kan välja bort det nya beteendet för egenskapen ContextMenuStrip.SourceControl, som nu returnerar en referens till källkontrollen. Det tidigare beteendet för egenskapen var att returnera null. Mer information finns i <AppContextSwitchOverrides> element.
I .NET Core och .NET 5.0 och senare stöds inte växeln Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue.
Version införd
3,0
Rekommenderad åtgärd
Ta bort växeln. Växeln stöds inte och inga alternativa funktioner är tillgängliga.
Kategori
Windows-formulär
Berörda API:er
UseLegacyImages kompatibilitetsväxel stöds inte
Kompatibilitetsväxeln Switch.System.Windows.Forms.UseLegacyImages, som introducerades i .NET Framework 4.8, stöds inte i Windows Forms på .NET Core eller .NET 5.0 och senare.
Ändra beskrivning
Från och med .NET Framework 4.8 åtgärdade Switch.System.Windows.Forms.UseLegacyImages kompatibilitetsväxeln möjliga problem med bildskalning i ClickOnce-scenarier i miljöer med hög DPI. När den är inställd på truetillåter växeln att användaren återställer äldre bildskalning på höga DPI-skärmar vars skala är inställd på större än 100%. Mer information finns i .NET Framework 4.8 Versionsinformation på GitHub.
I .NET Core och .NET 5.0 och senare stöds inte växeln Switch.System.Windows.Forms.UseLegacyImages.
Version införd
3,0
Rekommenderad åtgärd
Ta bort växeln. Växeln stöds inte och inga alternativa funktioner är tillgängliga.
Kategori
Windows-formulär
Berörda API:er
- Ingen
Om-sidan och SplashScreen-sidan har slutat fungera
De About.vb- och SplashScreen.vb filer som genereras av Visual Studio innehåller referenser till typer i My namnrymd som inte är tillgängliga .NET Core 3.0 och 3.1.
Version införd
3,0
Ändra beskrivning
.NET Core 3.0 och 3.1 innehåller inte fullständigt stöd för Visual Basic My. Referensegenskaperna för Om och SplashScreen formulärmallar i Visual Studio för Visual Basic Windows Forms-appar refererar till egenskaper i My.Application.Info-typen som inte är tillgängliga.
Rekommenderad åtgärd
Stödet för Visual Basic My har förbättrats i .NET 5. Uppgradera ditt projekt till .NET 5 eller senare.
-eller-
Åtgärda kompilatorfelen i About och SplashScreen-typerna i din app. Använd klassen System.Reflection.Assembly för att hämta den information som tillhandahålls av My.Application.Info typ. En rak port för båda formulären finns här.
Tips
Det här är exempelkod och ej optimerad. Listan över attribut ska cachelagras för att minska tiden för formulärinläsning.
Om
Imports System.Reflection
Public NotInheritable Class About
Private Sub about_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' Set the title of the form.
Dim applicationTitle As String = Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyTitleAttribute)()?.Title
If String.IsNullOrEmpty(applicationTitle) Then
applicationTitle = System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().GetName().Name)
End If
Me.Text = String.Format("About {0}", applicationTitle)
' Initialize all of the text displayed on the About Box.
' TODO: Customize the application's assembly information in the "Application" pane of the project
' properties dialog (under the "Project" menu).
Me.LabelProductName.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyProductAttribute)()?.Product, "")
Me.LabelVersion.Text = String.Format("Version {0}", Assembly.GetExecutingAssembly().GetName().Version)
Me.LabelCopyright.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyCopyrightAttribute)()?.Copyright, "")
Me.LabelCompanyName.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyCompanyAttribute)()?.Company, "")
Me.TextBoxDescription.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyDescriptionAttribute)()?.Description, "")
End Sub
Private Sub OKButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OKButton.Click
Me.Close()
End Sub
End Class
SplashScreen
Imports System.Reflection
Public NotInheritable Class SplashScreen
Private Sub SplashScreen1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'Set up the dialog text at runtime according to the application's assembly information.
'TODO: Customize the application's assembly information in the "Application" pane of the project
' properties dialog (under the "Project" menu).
'Application title
Dim appTitle As String = Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyTitleAttribute)()?.Title
If String.IsNullOrEmpty(appTitle) Then
appTitle = System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().GetName().Name)
End If
ApplicationTitle.Text = appTitle
Dim versionValue = Assembly.GetExecutingAssembly().GetName().Version
'Format the version information using the text set into the Version control at design time as the
' formatting string. This allows for effective localization if desired.
' Build and revision information could be included by using the following code and changing the
' Version control's designtime text to "Version {0}.{1:00}.{2}.{3}" or something similar. See
' String.Format() in Help for more information.
'
' Version.Text = System.String.Format(Version.Text, versionValue.Major, versionValue.Minor, versionValue.Build, versionValue.Revision)
Version.Text = System.String.Format(Version.Text, versionValue.Major, versionValue.Minor)
'Copyright info
Copyright.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyCopyrightAttribute)()?.Copyright, "")
End Sub
End Class
Kategori
Visual Basic Windows Forms
Berörda API:er
Ingen
WPF (Windows Presentation Foundation)
Ändrat drag-och-släpp-beteende i textredigerare
.NET Core 3.0 introducerade en ändring i hur textredigerarens kontroller skapar en System.Windows.DataObject när text dras till en annan kontroll. Ändringen inaktiverade autokonverteringen, vilket gör att åtgärden behåller data som DataFormats.Text eller DataFormats.UnicodeText i stället för att konvertera dem till DataFormats.StringFormat.
Version införd
.NET Core 3.0
Kategori
Windows Presentation Foundation
Tidigare beteende
Datatypen på System.Windows.DataObject när man drar text från en textredigerarkontroll var DataFormats.StringFormat.
Nytt beteende
Datatypen på System.Windows.DataObject när du drar text från en textredigerare är DataFormats.Text eller DataFormats.UnicodeText.
Typ av brytande ändring
Den här ändringen är en beteendeförändring.
Orsak till ändringen
Ändringen var oavsiktlig.
Rekommenderad åtgärd
Den här ändringen återställdes i .NET 7. Uppgradera till .NET 7 eller senare.