.NET Core 3.0'daki yeni değişiklikler
.NET Core, ASP.NET Core veya EF Core'nin 3.0 sürümüne EF Core, bu makalede listelenen yeni değişiklikler, uygulamanızı etkileyebilir.
ASP.NET Core
- Eski Sahtecilik, CORS, Tanılama, MVC ve Yönlendirme API'leri kaldırıldı
- "Pubternal" API'leri kaldırıldı
- Kimlik doğrulaması: Google+ kullanım dışı
- Kimlik Doğrulaması: HttpContext.Authentication özelliği kaldırıldı
- Kimlik doğrulaması: Newtonsoft.Json türleri değiştirildi
- Kimlik Doğrulaması: OAuthHandler ExchangeCodeAsync imzası değiştirildi
- Yetkilendirme: AddAuthorization aşırı yüklemesi farklı derlemeye taşındı
- Yetkilendirme: AuthorizationFilterContext.Filters'tan IAllowAnonymous kaldırıldı
- Yetkilendirme: IAuthorizationPolicyProvider uygulamaları yeni yöntem gerektirir
- Önbelleğe Alma: CompactOnMemoryPressure özelliği kaldırıldı
- Önbelleğe Alma: Microsoft.Extensions. Önbelleğe Alma. SqlServer yeni SqlClient paketini kullanır
- Önbelleğe Alma: ResponseCaching "pubternal" türleri iç olarak değiştirildi
- Veri Koruması: DataProtection.Blobs yeni Azure Depolama API'lerini kullanır
- Barındırma: AspNetCoreModule V1, Windows Paketinden kaldırıldı
- Barındırma: Genel konak, Başlangıç oluşturucu eklemeyi kısıtlar
- Barındırma: IIS işlem dışı uygulamalar için HTTPS yeniden yönlendirme etkinleştirildi
- Barındırma: IHostingEnvironment ve IApplicationLifetime türleri değiştirildi
- Barındırma: WebHostBuilder bağımlılıklarından ObjectPoolProvider kaldırıldı
- HTTP: DefaultHttpContext genişletilebilirliği kaldırıldı
- HTTP: HeaderNames alanları salt okunur statik olarak değiştirildi
- HTTP: Yanıt gövdesi altyapı değişiklikleri
- HTTP: Bazı tanımlama bilgisi SameSite varsayılan değerleri değiştirildi
- HTTP: Zaman Uyumlu IO varsayılan olarak devre dışıdır
- Kimlik: AddDefaultUI yöntemi aşırı yüklemesi kaldırıldı
- Kimlik: UI Bootstrap sürüm değişikliği
- Kimlik: SignInAsync, kimliği doğrulanmamış kimlik için özel durum oluşturur
- Kimlik: SignInManager oluşturucusu yeni parametre kabul ediyor
- Kimlik: Kullanıcı arabirimi statik web varlıkları özelliğini kullanır
- Kestrel: Bağlantı bağdaştırıcıları kaldırıldı
- Kestrel: Boş HTTPS derlemesi kaldırıldı
- Kestrel: Yeni koleksiyona taşınan tanıtım üst bilgilerini isteği
- Kestrel: Aktarım soyutlama katmanı değişiklikleri
- Yerelleştirme: API'ler geçersiz olarak işaretlendi
- Günlük: DebugLogger sınıfı dahili yapıldı
- MVC: Denetleyici eylemi Zaman uyumsuz son eki kaldırıldı
- MVC: JsonResult Microsoft.AspNetCore.Mvc.Core'a taşındı
- MVC: Ön derleme aracı kullanım dışı
- MVC: Türler iç olarak değiştirildi
- MVC: Web API uyumluluk dolgusu kaldırıldı
- Razor: RazorTemplateEngine API kaldırıldı
- Razor: Çalışma zamanı derlemesi bir pakete taşındı
- Oturum durumu: Eski API'ler kaldırıldı
- Paylaşılan çerçeve: Derlemeden Microsoft.AspNetCore.App
- Paylaşılan çerçeve: Microsoft.AspNetCore.All kaldırıldı
- SignalR: HandshakeProtocol.SuccessHandshakeData değiştirildi
- SignalR: HubConnection yöntemleri kaldırıldı
- SignalR: HubConnectionContext oluşturucuları değiştirildi
- SignalR: JavaScript istemci paketi adı değişikliği
- SignalR: Eski API'ler
- SPA'lar: SpaServices ve NodeServices geçersiz olarak işaretlendi
- SPA'lar: SpaServices ve NodeServices konsol günlük kaydedicisi geri dönüş varsayılan değişikliği
- Hedef çerçeve: .NET Framework çerçeve desteklenmiyor
Kullanılmayan Antiforgery, CORS, tanılama, MVC ve yönlendirme API 'Leri kaldırıldı
ASP.NET Core 2,2 ' deki eski üyeler ve uyumluluk anahtarları kaldırılmıştır.
Sunulan sürüm
3.0
Değişiklik nedeni
Zaman içinde API yüzeyi geliştirmesi.
Önerilen eylem
.NET Core 2,2 hedeflenirken, yeni API 'Leri benimsemek için eski derleme iletilerinde yer alan yönergeleri izleyin.
Kategori
ASP.NET Core
Etkilenen API’ler
aşağıdaki türler ve üyeler ASP.NET Core 2,1 ve 2,2 için eski olarak işaretlendi:
Türler
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
Oluşturucular
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. ciltler. Collectionmodelciltçi ' 1 (ımodelciltçi)
- Microsoft. AspNetCore. Mvc. ModelBinding. ciltler. Complextypemodelciltçi (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. Taghelmakaı. ımagetaghelper (ıhostingenvironment, ımemorycache, HtmlEncoder, ıurlhelperfactory)
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)
Özellikler
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
Yöntemler
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. Parameterciltçi. BindModelAsync (ActionContext, IValueProvider, ParameterDescriptor, Object)
"Pubternal" API 'Leri kaldırıldı
ASP.NET Core ortak API yüzeyini daha iyi korumak için *.Internal ad alanları (API 'ler olarak adlandırılır) içindeki türlerin çoğu "pubternal" gerçekten dahili hale gelir. Bu ad alanlarındaki üyelerin herkese açık API 'Ler olarak desteklenmemesi hiç değildir. API 'Ler küçük sürümlerde kesilebilir ve genellikle olur. 3,0 ASP.NET Core güncelleştirme sırasında bu API 'Lere bağlı olan kod kesilir.
Daha fazla bilgi için bkz. DotNet/aspnetcore # 4932 and DotNet/aspnetcore # 11312.
Sunulan sürüm
3.0
Eski davranış
Etkilenen API 'Ler public erişim değiştiricisiyle işaretlenir ve *.Internal ad alanlarında bulunur.
Yeni davranış
Etkilenen API 'Ler iç erişim değiştiricisiyle işaretlenir ve artık bu derleme dışındaki kod tarafından kullanılamaz.
Değişiklik nedeni
Bu API 'ler için rehberlik şu "pubternal" şekilde yapılır:
- Bildirimde bulunulmadan değişebilir.
- Son değişiklikleri engellemek için .NET ilkelerine tabi değildir.
API 'lerden çıkmak public ( *.Internal ad alanlarında bile) müşteriler için kafa karıştırıcı.
Önerilen eylem
Bu "pubternal" API 'leri kullanmayı durdurun. Alternatif API 'Ler hakkında sorularınız varsa, DotNet/aspnetcore deposunda bir sorun açın.
Örneğin, bir ASP.NET Core 2,2 projesinde aşağıdaki HTTP isteği arabelleğe alma kodunu göz önünde bulundurun. EnableRewindUzantı yöntemi Microsoft.AspNetCore.Http.Internal ad alanında bulunur.
HttpContext.Request.EnableRewind();
ASP.NET Core 3,0 projesinde, EnableRewind çağrısını uzantı yöntemine yönelik bir çağrı ile değiştirin EnableBuffering . İstek arabelleğe alma özelliği geçmişte olduğu gibi çalışmaktadır. EnableBuffering Şimdi internal API 'yi çağırır.
HttpContext.Request.EnableBuffering();
Kategori
ASP.NET Core
Etkilenen API’ler
Microsoft.AspNetCore.* Microsoft.Extensions.* Ad alanı adında bir kesimi olan ve ad alanındaki tüm API 'ler Internal . Örnek:
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
Kimlik doğrulaması: Google + kullanım dışı ve değiştirilmiş
Google, ilk olarak 28 Ocak 2019 tarihinden itibaren, uygulamalar için Google + oturum açmayı kapatmaya başlıyor.
Açıklamayı Değiştir
ASP.NET 4. x ve ASP.NET Core, Web Apps 'te Google hesabı kullanıcılarının kimliğini doğrulamak için Google + oturum açma API 'Lerini kullanıyor. Etkilenen NuGet paketleri, ASP.NET Web Forms ve MVC ile için Microsoft. AspNetCore. Authentication. Google for ASP.NET Core ve Microsoft. Owin. Security. Google ' dir Microsoft.Owin .
Google 'ın değiştirme API 'Leri farklı bir veri kaynağı ve biçimi kullanır. Yapısal değişiklikler için aşağıda belirtilen Azaltıcı Etkenler ve çözümler. Uygulamalar, verilerin hala gereksinimlerini karşıladığından emin olmalıdır. Örneğin adlar, e-posta adresleri, profil bağlantıları ve profil fotoğrafları, daha önce daha çok farklı değerler sağlayabilir.
Sunulan sürüm
Tüm sürümler. Bu değişiklik ASP.NET Core dış.
Önerilen eylem
ASP.NET Web Forms ve MVC ile Owin
Microsoft.Owin3.1.0 ve üzeri için geçici bir risk azaltma buradaözetlenmiştir. Uygulamalar, veri biçimindeki değişiklikleri denetlemek için azaltma ile testi tamamlamalıdır. 4.0.1 'i bir düzeltmeyle yayınlama planları vardır Microsoft.Owin . Önceki sürümleri kullanan uygulamalar 4.0.1 sürümüne güncellemelidir.
ASP.NET Core 1. x
Owin ASP.NET Web Forms ve MVC ile olan azaltıcı etken, 1. x ASP.NET Core uyarlanabilirler. 1. x, yaşam durumunun sonuna ulaştığı için NuGet paket yamaları planlanmadı.
ASP.NET Core 2. x
Microsoft.AspNetCore.Authentication.GoogleSürüm 2. x için, mevcut çağrlarınızı AddGoogle Startup.ConfigureServices aşağıdaki kodla değiştirin:
.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");
});
Şubat 2,1 ve 2,2 yamaları önceki yeniden yapılandırma yeni varsayılan olarak eklenmiştir. ASP.NET Core 2,0 için bir düzeltme eki planlanmıyor çünkü yaşam sonunaulaştı.
ASP.NET Core 3,0
ASP.NET Core 2. x için verilen risk azaltma, ASP.NET Core 3,0 için de kullanılabilir. Gelecekteki 3,0 önizlemelerde Microsoft.AspNetCore.Authentication.Google paket kaldırılabilir. Kullanıcılar, Microsoft.AspNetCore.Authentication.OpenIdConnect bunun yerine öğesine yönlendirilir. Aşağıdaki kod, içindeki ile nasıl değiştirileceğini AddGoogle gösterir AddOpenIdConnect Startup.ConfigureServices . Bu değişiklik, ASP.NET Core 2,0 ve üzeri sürümlerle kullanılabilir ve gerektiğinde ASP.NET Core 1. x için uyarlanmıştır.
.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();
Category
ASP.NET Çekirdeği
Etkilenen API’ler
Microsoft.AspNetCore.Authentication.Google
Kimlik doğrulaması: HttpContext. Authentication özelliği kaldırıldı
Kullanım dışı bırakılan Authentication özelliği HttpContext kaldırılmıştır.
Açıklamayı Değiştir
DotNet/aspnetcore # 6504bir parçası olarak, kullanım dışı bırakılan Authentication özelliği HttpContext kaldırılmıştır. AuthenticationÖzelliği 2,0 tarihinden itibaren kullanımdan kaldırılmıştır. Kullanım dışı bırakılan bu özelliği kullanarak kodu yeni değiştirme API 'Lerine geçirmek için bir Geçiş Kılavuzu yayımlandı. eski ASP.NET Core 1. x kimlik doğrulama yığını ile ilgili kalan kullanılmayan sınıflar/apı 'ler işlemede kaldırılmıştır dotnet/aspnetcore@d7a7c65 .
Tartışma için bkz. DotNet/aspnetcore # 6533.
Sunulan sürüm
3.0
Değişiklik nedeni
ASP.NET Core 1,0 apı 'leri içindeki genişletme yöntemleriyle değiştirilmiştir Microsoft.AspNetCore.Authentication.AuthenticationHttpContextExtensions .
Önerilen eylem
Geçiş kılavuzunabakın.
Kategori
ASP.NET Core
Etkilenen API’ler
- 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
Kimlik doğrulaması: değiştirilmekte olan türler üzerinde Newtonsoft.Js
ASP.NET Core 3,0 ' de, Newtonsoft.Json kimlik doğrulama apı 'lerinde kullanılan türler türlerle değiştirilmiştir System.Text.Json . Aşağıdaki durumlar hariç, kimlik doğrulama paketlerinin temel kullanımı etkilenmemiştir:
- , ASPNET-contribgibi OAuth sağlayıcılardan türetilmiş sınıflar.
- Gelişmiş talep işleme uygulamaları.
Daha fazla bilgi için bkz. DotNet/aspnetcore # 7105. Tartışma için bkz. DotNet/aspnetcore # 7289.
Sunulan sürüm
3.0
Önerilen eylem
Türetilmiş OAuth uygulamaları için en yaygın değişiklik, JObject.Parse JsonDocument.Parse CreateTicketAsync buradagösterildiği gibi, geçersiz kılmada ile değiştirilebilir. JsonDocument uygular IDisposable .
Aşağıdaki listede bilinen değişiklikler özetlenmektedir:
- ClaimAction.Run(JObject, ClaimsIdentity, String) olur
ClaimAction.Run(JsonElement userData, ClaimsIdentity identity, string issuer). Tüm türetilmiş uygulamalarıClaimActionbenzer şekilde etkilenir. - ClaimActionCollectionMapExtensions.MapCustomJson(ClaimActionCollection, String, Func<JObject,String>) geldiğinde
MapCustomJson(this ClaimActionCollection collection, string claimType, Func<JsonElement, string> resolver) - ClaimActionCollectionMapExtensions.MapCustomJson(ClaimActionCollection, String, String, Func<JObject,String>) geldiğinde
MapCustomJson(this ClaimActionCollection collection, string claimType, string valueType, Func<JsonElement, string> resolver) - OAuthCreatingTicketContext Eski bir Oluşturucu kaldırılmış ve diğeri
JObjectile değiştirildiJsonElement.UserÖzelliği veRunClaimActionsyöntemi eşleşecek şekilde güncelleştirildi. - Success(JObject) Artık yerine türünde bir parametre kabul eder
JsonDocumentJObject.ResponseÖzellik eşleşecek şekilde güncelleştirildi.OAuthTokenResponseArtık atılabilir ve tarafından aktiften kaldırılacakOAuthHandler. Türetilmiş OAuth uygulamalarının üzerine yazmaExchangeCodeAsync, veya öğesini atmak zorunda değildirJsonDocumentOAuthTokenResponse. - UserInformationReceivedContext.User iken
JObjectolarak değiştirildiJsonDocument. - TwitterCreatingTicketContext.User iken
JObjectolarak değiştirildiJsonElement. - ' Dallı, '. CreateTicketAsync (ClaimsIdentity, AuthenticationProperties, AccessToken, JObject) öğesinin son parametresi olarak değiştirildi
JObjectJsonElement. Değiştirme yöntemi TwitterHandler.CreateTicketAsync(ClaimsIdentity, AuthenticationProperties, AccessToken, JsonElement) .
Kategori
ASP.NET Core
Etkilenen API’ler
- Microsoft.AspNetCore.Authentication.Facebook
- Microsoft.AspNetCore.Authentication.Google
- Microsoft.AspNetCore.Authentication.MicrosoftAccount
- Microsoft.AspNetCore.Authentication.OAuth
- Microsoft.AspNetCore.Authentication.OpenIdConnect
- Microsoft.AspNetCore.Authentication.Twitter
Kimlik doğrulaması: OAuthHandler ExchangeCodeAsync imzası değişti
ASP.NET Core 3,0 ' de, imzası şu şekilde OAuthHandler.ExchangeCodeAsync değiştirildi:
protected virtual System.Threading.Tasks.Task<Microsoft.AspNetCore.Authentication.OAuth.OAuthTokenResponse> ExchangeCodeAsync(string code, string redirectUri) { throw null; }
Hedef:
protected virtual System.Threading.Tasks.Task<Microsoft.AspNetCore.Authentication.OAuth.OAuthTokenResponse> ExchangeCodeAsync(Microsoft.AspNetCore.Authentication.OAuth.OAuthCodeExchangeContext context) { throw null; }
Sunulan sürüm
3,0
Eski davranış
codeVe redirectUri dizeleri ayrı bağımsız değişkenler olarak geçildi.
Yeni davranış
Code ve RedirectUri OAuthCodeExchangeContext , Oluşturucu aracılığıyla ayarlanabilir özellikler vardır OAuthCodeExchangeContext . Yeni OAuthCodeExchangeContext tür, geçirilen tek bağımsız değişkendir OAuthHandler.ExchangeCodeAsync .
Değişiklik nedeni
Bu değişiklik, ek parametrelerin kırılmamış bir şekilde sağlanmasını sağlar. Yeni aşırı yükleme oluşturmaya gerek yoktur ExchangeCodeAsync .
Önerilen eylem
OAuthCodeExchangeContextUygun ve değerleri ile oluşturun code redirectUri . AuthenticationPropertiesÖrnek sağlanmalıdır. Bu tek OAuthCodeExchangeContext örnek OAuthHandler.ExchangeCodeAsync , birden çok bağımsız değişken yerine öğesine geçirilebilir.
Kategori
ASP.NET Core
Etkilenen API’ler
OAuthHandler<TOptions>.ExchangeCodeAsync(String, String)
Yetkilendirme: Addaduthorleştirme aşırı yüklemesi farklı bir derlemeye taşındı
AddAuthorizationİçinde yer almak için kullanılan temel yöntemler Microsoft.AspNetCore.Authorization olarak yeniden adlandırıldı AddAuthorizationCore . Eski AddAuthorization Yöntemler hala mevcuttur, ancak Microsoft.AspNetCore.Authorization.Policy bunun yerine derlemede bulunur. Her iki yöntemi kullanan uygulamalar hiçbir etki görmemelidir. Artık paylaşılan çerçevede Microsoft.AspNetCore.Authorization.Policy açıklandığı gibi, paylaşılan çerçevede kullanıma sunulan bir bağımsız paket yerine, Microsoft. Aspnetcore. app öğesinden kaldırılan derlemeler.
Sunulan sürüm
3,0
Eski davranış
AddAuthorization Yöntemler içinde vardı Microsoft.AspNetCore.Authorization .
Yeni davranış
AddAuthorization yöntemleri içinde bulunur Microsoft.AspNetCore.Authorization.Policy . AddAuthorizationCore , eski yöntemlerin yeni adıdır.
Değişiklik nedeni
AddAuthorization , yetkilendirme için gereken tüm ortak hizmetleri eklemek için daha iyi bir yöntem adıdır.
Önerilen eylem
Bunun yerine bir başvuru ekleyin Microsoft.AspNetCore.Authorization.Policy ya da kullanın AddAuthorizationCore .
Kategori
ASP.NET Core
Etkilenen API’ler
Yetkilendirme: ıallowanonymous, AuthorizationFilterContext. Filters öğesinden kaldırıldı
ASP.NET Core 3,0 itibariyle, MVC, denetleyiciler ve eylem yöntemlerinde bulunan [AllowAnonymous] öznitelikleri Için allowanonymousfilters eklemez. Bu değişiklik, türevleri için yerel olarak adreslenir AuthorizeAttribute , ancak ve uygulamaları için önemli bir değişiklik IAsyncAuthorizationFilter IAuthorizationFilter . Bir [TypeFilter] özniteliğinde Sarmalanan uygulamalar, hem yapılandırma hem de bağımlılık ekleme gerektiğinde kesin olarak belirlenmiş, öznitelik tabanlı yetkilendirme elde etmenin popüler ve desteklenen bir yoludur.
Sunulan sürüm
3,0
Eski davranış
IAllowAnonymousAuthorizationfiltercontext. Filters koleksiyonunda göründü. Arabirim varlığına yönelik test, tek tek denetleyici yöntemlerinde filtreyi geçersiz kılmak veya devre dışı bırakmak için geçerli bir yaklaşımdır.
Yeni davranış
IAllowAnonymous Artık AuthorizationFilterContext.Filters koleksiyonda görünmez. IAsyncAuthorizationFilter Eski davranışa bağımlı olan uygulamalar genellikle aralıklı HTTP 401 Yetkisiz veya HTTP 403 Yasak yanıtlara neden olur.
Değişiklik nedeni
ASP.NET Core 3,0 ' de yeni bir uç nokta yönlendirme stratejisi sunuldu.
Önerilen eylem
Uç nokta meta verilerinde arama yapın IAllowAnonymous . Örnek:
var endpoint = context.HttpContext.GetEndpoint();
if (endpoint?.Metadata?.GetMetadata<IAllowAnonymous>() != null)
{
}
Bu HasAllowAnonymous yöntemindebu tekniğin bir örneği görülür.
Kategori
ASP.NET Core
Etkilenen API’ler
Yok
Yetkilendirme: ıauthorizationpolicyprovider uygulamaları için yeni yöntem gerekir
ASP.NET Core 3,0 ' de yeni bir GetFallbackPolicyAsync Yöntem eklenmiştir IAuthorizationPolicyProvider . Bu geri dönüş ilkesi, ilke belirtilmediğinde yetkilendirme ara yazılımı tarafından kullanılır.
Daha fazla bilgi için bkz. DotNet/aspnetcore # 9759.
Sunulan sürüm
3,0
Eski davranış
Uygulamabir IAuthorizationPolicyProvider GetFallbackPolicyAsync metodu gerektirmez.
Yeni davranış
Uygulamaları için IAuthorizationPolicyProvider bir GetFallbackPolicyAsync Yöntem gerekir.
Değişiklik nedeni
Yeni bir ilke belirtilmediğinde kullanılması için yeni bir yöntem gerekiyordu AuthorizationMiddleware .
Önerilen eylem
GetFallbackPolicyAsyncUygulamasına yöntemini ekleyin IAuthorizationPolicyProvider .
Kategori
ASP.NET Core
Etkilenen API’ler
Microsoft.AspNetCore.Authorization.IAuthorizationPolicyProvider
Önbelleğe alma: CompactOnMemoryPressure özelliği kaldırıldı
ASP.NET Core 3,0 sürümü, kullanılmayan MemoryCacheOptions API 'lerinikaldırdı.
Açıklamayı Değiştir
Bu değişiklik, ASPNET/önbelleğe alma #, için bir izleme. Tartışma için bkz. DotNet/Extensions # 1062.
Sunulan sürüm
3,0
Eski davranış
MemoryCacheOptions.CompactOnMemoryPressure Özellik kullanılabilir.
Yeni davranış
MemoryCacheOptions.CompactOnMemoryPressureÖzellik kaldırıldı.
Değişiklik nedeni
Önbelleği otomatik olarak sıkıştırmak sorunlara neden oldu. Beklenmeyen davranışları önlemek için, önbelleğin yalnızca gerektiğinde sıkıştırılması gerekir.
Önerilen eylem
Önbelleği sıkıştırmak için gerektiğinde alt türe çevirme yapın MemoryCache ve çağırın Compact .
Kategori
ASP.NET Core
Etkilenen API’ler
MemoryCacheOptions.CompactOnMemoryPressure
Önbelleğe alma: Microsoft. Extensions. Caching. SqlServer yeni SqlClient paketini kullanır
Microsoft.Extensions.Caching.SqlServerPaket, Microsoft.Data.SqlClient paket yerine yeni paketini kullanır System.Data.SqlClient . Bu değişiklik küçük davranışsal davranış değişikliklerine neden olabilir. Daha fazla bilgi için bkz. Yeni Microsoft. Data. SqlClient tanıtımı.
Sunulan sürüm
3,0
Eski davranış
Microsoft.Extensions.Caching.SqlServerPaket, paketi kullandı System.Data.SqlClient .
Yeni davranış
Microsoft.Extensions.Caching.SqlServer Artık Microsoft.Data.SqlClient paketi kullanıyor.
Değişiklik nedeni
Microsoft.Data.SqlClient , ' den oluşturulan yeni bir pakettir System.Data.SqlClient . Bu, tüm yeni özellik işinin bundan sonra yapıldığı yerdir.
Önerilen eylem
Müşterilerin, paket tarafından döndürülen türleri kullanmadıkları Microsoft.Extensions.Caching.SqlServer ve bunları türlere dönüştürmedikleri müddetçe, bu son değişiklik konusunda endişelenmeleri gerekmez System.Data.SqlClient . Örneğin, birisi, DbConnection eski SqlConnection türündebir olarak yayınlandıysa, dönüştürmeyi yeni türe dönüştürmeleri gerekir Microsoft.Data.SqlClient.SqlConnection .
Kategori
ASP.NET Core
Etkilenen API’ler
Yok
Önbelleğe alma: ResponseCaching "pubternal" türleri iç olarak değiştirildi
ASP.NET Core 3,0 ' de, ' deki "pubternal" türleri ResponseCaching olarak değiştirilmiştir internal .
Buna ek olarak, ve varsayılan uygulamaları, IResponseCachingPolicyProvider IResponseCachingKeyProvider artık, metodun bir parçası olarak hizmetlere eklenmez AddResponseCaching .
Açıklamayı Değiştir
ASP.NET Core, "pubternal" türleri olarak belirtilir, public ancak ile düzeltilen bir ad alanında bulunur .Internal . Bu türler genel olsa da, destek ilkesi yoktur ve bu değişiklikler önemli değişikliklere tabidir. Ne yazık ki, bu türlerin yanlışlıkla kullanılması yaygındır ve bu projelerde oluşan değişikliklere neden olacak ve Framework 'ün bakımını yapma yeteneğini sınırlandırmıştır.
Sunulan sürüm
3,0
Eski davranış
Bu türler herkese açık olarak görünür, ancak desteklenmez.
Yeni davranış
Bu türler artık internal .
Değişiklik nedeni
internalKapsam, desteklenmeyen ilkeyi daha iyi yansıtır.
Önerilen eylem
Uygulamanız veya kitaplığınız tarafından kullanılan türleri kopyalayın.
Kategori
ASP.NET Core
Etkilenen API’ler
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)
Veri koruma: DataProtection. blob 'lar yeni Azure depolama API 'Lerini kullanır
Azure.Extensions.AspNetCore.DataProtection.BlobsAzure depolama kitaplıklarınabağlıdır. Bu kitaplıklar derlemeleri, paketleri ve ad alanlarını yeniden adlandırdı. ASP.NET Core 3,0 ' den başlayarak, Azure.Extensions.AspNetCore.DataProtection.Blobs Yeni Azure.Storage. önekli API 'leri ve paketleri kullanır.
Azure depolama API 'Leri hakkında sorularınız için kullanın https://github.com/Azure/azure-storage-net . Bu sorunla ilgili tartışmak için bkz. DotNet/aspnetcore # 19570.
Sunulan sürüm
3,0
Eski davranış
Paket, WindowsAzure.Storage NuGet paketine başvurdu.
Paket, Microsoft.Azure.Storage.Blob NuGet paketine başvurur.
Yeni davranış
Paket, Azure.Storage.Blob NuGet paketine başvurur.
Değişiklik nedeni
Bu değişiklik Azure.Extensions.AspNetCore.DataProtection.Blobs , önerilen Azure depolama paketlerine geçişe olanak tanır.
Önerilen eylem
Hala ASP.NET Core 3,0 ile eski Azure depolama API 'Lerini kullanmanız gerekiyorsa, windowsazure. Storage veya Microsoft. Azure. Storagepaketine doğrudan bir bağımlılık ekleyin. Bu paket yeni API 'ler ile birlikte yüklenebilir Azure.Storage .
Çoğu durumda, yükseltme yalnızca using Yeni ad alanlarını kullanmak için deyimlerinin değiştirilmesini içerir:
- 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 Core
Etkilenen API’ler
Yok
Barındırma: AspNetCoreModule v1 Windows barındırma paketinden kaldırıldı
ASP.NET Core 3,0 ' den itibaren Windows barındırma paketi, AspNetCoreModule (ANCM) v1 'yi içermez.
ANCM v2, ANCM OutOfProcess ile geriye dönük olarak uyumludur ve ASP.NET Core 3,0 uygulamalarıyla birlikte kullanılması önerilir.
Tartışma için bkz. DotNet/aspnetcore # 7095.
Sunulan sürüm
3,0
Eski davranış
ANCM v1, Windows barındırma paketi 'ne dahildir.
Yeni davranış
ANCM v1, Windows barındırma paketi 'ne dahil değildir.
Değişiklik nedeni
ANCM v2, ANCM OutOfProcess ile geriye dönük olarak uyumludur ve ASP.NET Core 3,0 uygulamalarıyla birlikte kullanılması önerilir.
Önerilen eylem
ASP.NET Core 3,0 uygulamalarıyla birlikte ANCM v2 kullanın.
ANCM v1 gerekliyse, ASP.NET Core 2,1 veya 2,2 Windows barındırma paketi kullanılarak yüklenebilir.
Bu değişiklik, şu şekilde ASP.NET Core 3,0 uygulamalarını keser:
- İle ANCM v1 kullanarak açıkça kabul edildi
<AspNetCoreModuleName>AspNetCoreModule</AspNetCoreModuleName>. - İle özel bir web.config dosyası olmalıdır
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />.
Kategori
ASP.NET Core
Etkilenen API’ler
Yok
Barındırma: genel ana bilgisayar, başlangıç Oluşturucu ekleme işlemini kısıtlar
Genel ana bilgisayarın sınıf oluşturucu ekleme için desteklediği tek türler Startup IHostEnvironment , ve ' dir IWebHostEnvironment IConfiguration . Kullanan uygulamalar WebHost etkilenmemiştir.
Açıklamayı Değiştir
ASP.NET Core 3,0 ' den önce, Oluşturucu Ekleme, sınıfın oluşturucusunda rastgele türler için kullanılabilir Startup . ASP.NET Core 3,0 ' de, Web yığını genel ana bilgisayar kitaplığı üzerine oluşturulmuştur. Şablonların program.cs dosyasında değişikliği görebilirsiniz:
ASP.NET Core 2. x:
ASP.NET Core 3,0:
Host , uygulamayı derlemek için bir bağımlılık ekleme (dı) kapsayıcısını kullanır. WebHost iki kapsayıcıyı kullanır: biri konak ve uygulama için bir tane. Sonuç olarak, Startup Oluşturucu artık özel hizmet ekleme işlemini desteklememektedir. Yalnızca IHostEnvironment , IWebHostEnvironment ve eklenebilir IConfiguration . Bu değişiklik, tek bir hizmetin yinelenen olarak oluşturulması gibi diğer sorunları önler.
Sunulan sürüm
3,0
Değişiklik nedeni
Bu değişiklik, Web yığınını genel ana bilgisayar kitaplığı üzerinde oluşturan bir sonucudur.
Önerilen eylem
Yöntem imzasına hizmet ekleme Startup.Configure . Örnek:
public void Configure(IApplicationBuilder app, IOptions<MyOptions> options)
Kategori
ASP.NET Core
Etkilenen API’ler
Yok
Barındırma: IIS işlem dışı uygulamalar için HTTPS yönlendirmesi etkinleştirildi
IIS işlem dışı ile barındırmak için ASP.NET Core modülünün (ANCM) sürüm 13.0.19218.0, var olan bir https yeniden yönlendirme özelliğini ASP.NET Core 3,0 ve 2,2 uygulamaları için sunar.
Tartışma için bkz. DotNet/AspNetCore # 15243.
Sunulan sürüm
3,0
Eski davranış
ASP.NET Core 2,1 proje şablonu ilk olarak ve gibi HTTPS ara yazılım yöntemleri için destek sunmuştur UseHttpsRedirection UseHsts . Geliştirme aşamasında uygulamalar varsayılan 443 bağlantı noktasını kullandıklarından, HTTPS yeniden yönlendirme özelliğinin etkinleştirilmesi, yapılandırmanın eklenmesi için gereklidir. Http katı aktarım güvenliği (HSTS) yalnızca Istek zaten https kullanıyorsa etkindir. Localhost varsayılan olarak atlanır.
Yeni davranış
ASP.NET Core 3,0 ' de IIS HTTPS senaryosu geliştirilmiştir. Geliştirme ile, bir uygulama sunucunun HTTPS bağlantı noktalarını bulabilir ve UseHttpsRedirection Varsayılan olarak iş yapabilir. İşlem içi bileşeni, IServerAddresses işlem içi kitaplığı Framework ile sürümlenmiş olduğundan, yalnızca ASP.NET Core 3,0 uygulamalarını etkileyen özelliği ile bağlantı noktası bulmayı gerçekleştirdi. İşlem dışı bileşeni, ortam değişkenini otomatik olarak eklemek için değişti ASPNETCORE_HTTPS_PORT . Bu değişiklik, işlem dışı bileşen genel olarak paylaşıldığı için ASP.NET Core 2,2 ve 3,0 uygulamalarından her ikisini de etkilemiştir. ASP.NET Core 2,1 uygulamaları, varsayılan olarak ANCM 'nin önceki bir sürümünü kullandıkları için etkilenmez.
Önceki davranış ASP.NET Core 3.0.1 ve 3.1.0 Preview 3 ' te değiştirilmiştir ASP.NET Core 2. x içindeki davranış değişiklikleri tersine çevirin. Bu değişiklikler yalnızca IIS işlem dışı uygulamaları etkiler.
Yukarıda açıklandığı gibi, ASP.NET Core 3.0.0 yüklemek, UseHttpsRedirection ASP.NET Core 2. x uygulamalarında ara yazılımı de etkinleştiren yan etkisi içeriyordu. ASP.NET Core 3.0.1 ve 3.1.0 Preview 3 ' te bir değişiklik yapılmıştır. bu nedenle, bunları yüklemek artık ASP.NET Core 2. x uygulamaları üzerinde bu etkiye sahip değildir. ASPNETCORE_HTTPS_PORTASP.NET Core 3.0.0 içinde doldurulmuş olan ortam değişkeni ASPNETCORE_ANCM_HTTPS_PORT ASP.NET Core 3.0.1 ve 3.1.0 Preview 3 ' te olarak değiştirildi. UseHttpsRedirection , hem yeni hem de eski değişkenleri anlamak için bu sürümlerde güncelleştirildi. 2. x ASP.NET Core güncelleştirilmeyecek. Sonuç olarak, varsayılan olarak devre dışı bırakılmakta olan önceki davranışa geri döner.
Değişiklik nedeni
ASP.NET Core 3,0 işlevselliği geliştirildi.
Önerilen eylem
Tüm istemcilerin HTTPS kullanmasını istiyorsanız herhangi bir eylem gerekmez. Bazı istemcilerin HTTP kullanmasına izin vermek için aşağıdaki adımlardan birini uygulayın:
UseHttpsRedirectionUseHstsProjenizin yöntemine ve öğesinden gelen çağrıları kaldırınStartup.Configureve uygulamayı yeniden dağıtın.web.config dosyanızda,
ASPNETCORE_HTTPS_PORTortam değişkenini boş bir dizeye ayarlayın. Bu değişiklik, uygulamayı yeniden dağıtmaya gerek kalmadan doğrudan sunucuda meydana gelebilir. Örnek:<aspNetCore processPath="dotnet" arguments=".\WebApplication3.dll" stdoutLogEnabled="false" stdoutLogFile="\\?\%home%\LogFiles\stdout" > <environmentVariables> <environmentVariable name="ASPNETCORE_HTTPS_PORT" value="" /> </environmentVariables> </aspNetCore>
UseHttpsRedirection Yine de şunları yapabilirsiniz:
ASPNETCORE_HTTPS_PORTOrtam değişkenini uygun bağlantı noktası numarasına (443 en fazla üretim senaryosunda) ayarlayarak ASP.NET Core 2. x içinde el ile etkinleştirilir.- Boş bir dize değeriyle tanımlayarak ASP.NET Core 3. x içinde devre dışı bırakıldı
ASPNETCORE_ANCM_HTTPS_PORT. Bu değer, önceki örnekle aynı şekilde ayarlanırASPNETCORE_HTTPS_PORT.
ASP.NET Core 3.0.0 uygulamalarını çalıştıran makineler ASP.NET Core 3.1.0 Preview 3 ANCM 'yi yüklemeden önce ASP.NET Core 3.0.1 çalışma zamanını yüklemelidir. Bunun yapılması UseHttpsRedirection , ASP.NET Core 3,0 uygulamaları için beklendiği gibi çalışmaya devam etmesini sağlar.
Azure App Service ' de, genel doğası nedeniyle çalışma zamanından ayrı bir zamanlamaya göre dağıtılır. ANCM, ASP.NET Core 3.0.1 ve 3.1.0 dağıtıldıktan sonra bu değişikliklerle Azure 'a dağıtıldı.
Kategori
ASP.NET Core
Etkilenen API’ler
HttpsPolicyBuilderExtensions.UseHttpsRedirection(IApplicationBuilder)
Barındırma: ıhostingenvironment ve ıapplicationlifetime türleri artık kullanılmıyor ve değiştirilmiş olarak işaretlendi
Var olan ve türlerin yerini alacak yeni türler IHostingEnvironment sunuldu IApplicationLifetime .
Sunulan sürüm
3,0
Eski davranış
IHostingEnvironment IApplicationLifetime Ve ' den iki farklı tür vardı Microsoft.Extensions.Hosting Microsoft.AspNetCore.Hosting .
Yeni davranış
Eski türler kullanım dışı olarak işaretlendi ve yeni türlerle değiştirildi.
Değişiklik nedeni
Microsoft.Extensions.HostingASP.NET Core 2,1 ' de tanıtıldığında, IHostingEnvironment ve ' IApplicationLifetime den kopyalanan bazı türler Microsoft.AspNetCore.Hosting . Bazı ASP.NET Core 3,0 değişiklikleri, uygulamaların hem hem de ad alanlarını içermesine neden olur Microsoft.Extensions.Hosting Microsoft.AspNetCore.Hosting . Bu yinelenen türlerin herhangi bir kullanımı, her iki ad alanına de başvuruluyorsa "belirsiz başvuru" derleyici hatasına neden olur.
Önerilen eylem
Eski türlerin tüm kullanımları, Yeni tanıtılan türlerle aşağıda gösterildiği gibi değiştirilmiştir:
Kullanılmayan türler (uyarı):
- Microsoft.Extensions.Hosting.IHostingEnvironment
- Microsoft.AspNetCore.Hosting.IHostingEnvironment
- Microsoft.Extensions.Hosting.IApplicationLifetime
- Microsoft.AspNetCore.Hosting.IApplicationLifetime
- Microsoft.Extensions.Hosting.EnvironmentName
- Microsoft.AspNetCore.Hosting.EnvironmentName
Yeni türler:
- Microsoft.Extensions.Hosting.IHostEnvironment
Microsoft.AspNetCore.Hosting.IWebHostEnvironment : IHostEnvironment- Microsoft.Extensions.Hosting.IHostApplicationLifetime
- Microsoft.Extensions.Hosting.Environments
New IHostEnvironment IsDevelopment ve IsProduction extension yöntemleri Microsoft.Extensions.Hosting ad alanıdır. Bu ad alanının projenize eklenmesi gerekebilir.
Kategori
ASP.NET Core
Etkilenen API’ler
- Microsoft.AspNetCore.Hosting.EnvironmentName
- Microsoft.AspNetCore.Hosting.IApplicationLifetime
- Microsoft.AspNetCore.Hosting.IHostingEnvironment
- Microsoft.Extensions.Hosting.EnvironmentName
- Microsoft.Extensions.Hosting.IApplicationLifetime
- Microsoft.Extensions.Hosting.IHostingEnvironment
Barındırma: ObjectPoolProvider WebHostBuilder bağımlılıklarından kaldırıldı
Yürütme için ASP.NET Core daha fazla ödeme yapma kapsamında, ObjectPoolProvider ana bağımlılıklar kümesinden kaldırılmıştır. Artık bağlı olan belirli bileşenler kendisini ObjectPoolProvider ekler.
Tartışma için bkz. DotNet/aspnetcore # 5944.
Sunulan sürüm
3,0
Eski davranış
WebHostBuilder``ObjectPoolProviderdı kapsayıcısında varsayılan olarak sağlar.
Yeni davranış
WebHostBuilder Artık ObjectPoolProvider Varsayılan olarak dı kapsayıcısında sağlamaz.
Değişiklik nedeni
Bu değişiklik ASP.NET Core yürütmek için daha fazla ödeme yapmak üzere yapılmıştır.
Önerilen eylem
Bileşeniniz gerektiriyorsa ObjectPoolProvider , bağımlılıklarınızın aracılığıyla eklenmesi gerekir IServiceCollection .
Kategori
ASP.NET Core
Etkilenen API’ler
Yok
HTTP: DefaultHttpContext genişletilebilirliği kaldırıldı
ASP.NET Core 3,0 performans geliştirmelerinden bir parçası olarak, ' nin genişletilebilirliği DefaultHttpContext kaldırılmıştır. Sınıfı artık sealed . Daha fazla bilgi için bkz. DotNet/aspnetcore # 6504.
Birim testleriniz kullanıyorsa Mock<DefaultHttpContext> , Mock<HttpContext> veya new DefaultHttpContext() yerine kullanın.
Tartışma için bkz. DotNet/aspnetcore # 6534.
Sunulan sürüm
3,0
Eski davranış
Sınıflar öğesinden türetilebilir DefaultHttpContext .
Yeni davranış
Sınıflar öğesinden türetilemez DefaultHttpContext .
Değişiklik nedeni
Genişletilebilirlik, başlangıçta havuza izin verecek şekilde sağlandı HttpContext , ancak gereksiz karmaşıklık ve başka iyileştirmeler getirmiştir.
Önerilen eylem
Mock<DefaultHttpContext>Birim testlerinizde kullanıyorsanız, Mock<HttpContext> bunun yerine kullanmaya başlayın.
Kategori
ASP.NET Core
Etkilenen API’ler
Microsoft.AspNetCore.Http.DefaultHttpContext
HTTP: HeaderNames sabitleri statik ReadOnly olarak değiştirildi
ASP.NET Core 3,0 Preview 5 ' ten başlayarak, içindeki alanlar Microsoft.Net.Http.Headers.HeaderNames olarak değişir const static readonly .
Tartışma için bkz. DotNet/aspnetcore # 9514.
Sunulan sürüm
3,0
Eski davranış
Bu alanlar için kullanılır const .
Yeni davranış
Bu alanlar artık static readonly .
Değişiklik nedeni
Değişiklik:
- Değerlerin, gerektiğinde değer düzeltmeleri için derleme sınırları arasında gömülmesini önler.
- Daha hızlı başvuru eşitlik denetimleri sağlar.
Önerilen eylem
3,0 ile yeniden derleyin. Aşağıdaki yollarla bu alanları kullanan kaynak kodu bundan böyle devam edebilir:
- Öznitelik bağımsız değişkeni olarak
- Bir
caseswitchbildirimde olarak - Başka bir tanımlama
const
Son değişikliği geçici olarak çözmek için, kendi kendine tanımlanmış üst bilgi adı sabitleri veya dize sabit değerlerini kullanmaya geçin.
Kategori
ASP.NET Core
Etkilenen API’ler
Microsoft.Net.Http.Headers.HeaderNames
HTTP: yanıt gövdesi altyapı değişiklikleri
Bir HTTP yanıt gövdesini yedekleyen altyapı değişti. HttpResponseDoğrudan kullanıyorsanız, herhangi bir kod değişikliği yapmanız gerekmez. Sarmalandıysanız veya değiştiriyorsanız daha fazla bilgi edinin HttpResponse.Body HttpContext.Features .
Sunulan sürüm
3,0
Eski davranış
HTTP yanıt gövdesi ile ilişkili üç API vardı:
IHttpResponseFeature.BodyIHttpSendFileFeature.SendFileAsyncIHttpBufferingFeature.DisableResponseBuffering
Yeni davranış
HttpResponse.Body' Yi değiştirirseniz, IHttpResponseBodyFeature StreamResponseBodyFeature tüm beklenen API 'ler için varsayılan uygulamalar sağlamak üzere, kullanarak, verilen akışın çevresindeki bir sarmalayıcı ile tamamen değiştirilir. Özgün akışın geri ayarlanması bu değişikliği geri alır.
Değişiklik nedeni
Mosyon, yanıt gövdesi API 'Lerini tek bir yeni özellik arabirimi halinde birleştirmenize olanak sağlar.
Önerilen eylem
IHttpResponseBodyFeatureDaha önce, veya kullandığınızı kullanın IHttpResponseFeature.Body IHttpSendFileFeature IHttpBufferingFeature .
Kategori
ASP.NET Core
Etkilenen API’ler
- Microsoft.AspNetCore.Http.Features.IHttpBufferingFeature
- Microsoft.AspNetCore.Http.Features.IHttpResponseFeature.Body
- Microsoft.AspNetCore.Http.Features.IHttpSendFileFeature
HTTP: bazı tanımlama bilgisi SameSite Varsayılanları None olarak değiştirildi
SameSite , bazı siteler arası Istek sahteciliği (CSRF) saldırılarını azaltmaya yardımcı olabilecek tanımlama bilgilerine yönelik bir seçenektir. Bu seçenek başlangıçta tanıtıldığında, çeşitli ASP.NET Core API 'lerde tutarsız varsayılanlar kullanılmıştır. Tutarsızlık, sonuçları kafa karıştırıcı olarak yönlendirdi. ASP.NET Core 3,0 itibariyle, Bu varsayılanlar daha iyi hizalanmıştır. Bu özelliği bileşen başına temelinde kabul etmeniz gerekir.
Sunulan sürüm
3,0
Eski davranış
Benzer ASP.NET Core API 'Leri farklı varsayılan SameSiteMode değerler kullandı. Ve ' de HttpResponse.Cookies.Append(String, String) HttpResponse.Cookies.Append(String, String, CookieOptions) Varsayılan olarak SameSiteMode.None SameSiteMode.Lax , ve sırasıyla olarak görülen tutarsızlığa bir örnektir.
Yeni davranış
Etkilenen tüm API 'Ler varsayılan olarak SameSiteMode.None .
Değişiklik nedeni
Varsayılan değer, SameSite bir katılım özelliği oluşturmak için değiştirilmiştir.
Önerilen eylem
Tanımlama bilgilerini gösteren her bileşen, senaryoları için uygun olup olmadığına karar vermeniz gerekir SameSite . Etkilenen API 'lerin kullanımını gözden geçirin ve SameSite gerektiği şekilde yeniden yapılandırın.
Kategori
ASP.NET Core
Etkilenen API’ler
HTTP: tüm sunucularda zaman uyumlu GÇ devre dışı
ASP.NET Core 3,0 ' den başlayarak, zaman uyumlu sunucu işlemleri varsayılan olarak devre dışıdır.
Açıklamayı Değiştir
AllowSynchronousIO , ve gibi zaman uyumlu GÇ API 'Lerini sağlayan veya devre dışı bırakan her sunucuda bir seçenektir HttpRequest.Body.Read HttpResponse.Body.Write Stream.Flush . Bu API 'Ler, bir iş parçacığı kaynağı ve uygulama askıda kalıyor. ASP.NET Core 3,0 Preview 3 ' te başlayarak bu zaman uyumlu işlemler varsayılan olarak devre dışıdır.
Etkilenen sunucular:
- Kestrel
- HttpSys
- İşlem içi IIS
- TestServer
Şuna benzer hatalar beklenir:
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.
Her sunucu, AllowSynchronousIO Bu davranışı denetleyen bir seçeneğe sahiptir ve bunların tümü için varsayılan değer olarak kullanılır false .
Davranış, geçici bir risk azaltma olarak istek başına temelinde da geçersiz kılınabilir. Örnek:
var syncIOFeature = HttpContext.Features.Get<IHttpBodyControlFeature>();
if (syncIOFeature != null)
{
syncIOFeature.AllowSynchronousIO = true;
}
TextWriterİçinde zaman uyumlu API çağıran bir veya başka bir akışta sorun yaşıyorsanız Dispose , DisposeAsync bunun yerine yeni API 'yi çağırın.
Tartışma için bkz. DotNet/aspnetcore # 7644.
Sunulan sürüm
3,0
Eski davranış
HttpRequest.Body.Read, HttpResponse.Body.Write ve Stream.Flush Varsayılan olarak izin verilir.
Yeni davranış
Bu zaman uyumlu API 'Lere varsayılan olarak izin verilmez:
Şuna benzer hatalar beklenir:
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.
Değişiklik nedeni
Bu zaman uyumlu API 'Ler, bir iş parçacığı kaynağı ve uygulama askıda kalıyor. ASP.NET Core 3,0 Preview 3 ' te başlayarak, zaman uyumlu işlemler varsayılan olarak devre dışıdır.
Önerilen eylem
Yöntemlerin zaman uyumsuz sürümlerini kullanın. Davranış, geçici bir risk azaltma olarak istek başına temelinde da geçersiz kılınabilir.
var syncIOFeature = HttpContext.Features.Get<IHttpBodyControlFeature>();
if (syncIOFeature != null)
{
syncIOFeature.AllowSynchronousIO = true;
}
Kategori
ASP.NET Core
Etkilenen API’ler
Kimlik: Adddefaultuı yöntemi aşırı yüklemesi kaldırıldı
ASP.NET Core 3,0 ' den başlayarak ıdentitybuilderuıextensions. adddefaultuı (ıdentitybuilder, uıiframework) yöntem aşırı yüklemesi artık yok.
Sunulan sürüm
3.0
Değişiklik nedeni
Bu değişiklik, statik Web varlıkları özelliğini benimsemenin bir sonucudur.
Önerilen eylem
IdentityBuilderUIExtensions.AddDefaultUI(IdentityBuilder)İki bağımsız değişken alan aşırı yükleme yerine çağırın. Bootstrap 3 kullanıyorsanız, aşağıdaki satırı <PropertyGroup> proje dosyanızdaki bir öğeye de ekleyin:
<IdentityUIFrameworkVersion>Bootstrap3</IdentityUIFrameworkVersion>
Kategori
ASP.NET Core
Etkilenen API’ler
Identitybuilderuıextensions. Adddefaultuı (ıdentitybuilder, Uıiframework)
Kimlik: UI 'nin varsayılan önyükleme sürümü değişti
ASP.NET Core 3,0 ' den başlayarak, kimlik Kullanıcı arabirimi varsayılan önyükleme sürüm 4 ' ü kullanmaktır.
Sunulan sürüm
3,0
Eski davranış
services.AddDefaultIdentity<IdentityUser>().AddDefaultUI();Yöntem çağrısı,services.AddDefaultIdentity<IdentityUser>().AddDefaultUI(UIFramework.Bootstrap3);
Yeni davranış
services.AddDefaultIdentity<IdentityUser>().AddDefaultUI();Yöntem çağrısı,services.AddDefaultIdentity<IdentityUser>().AddDefaultUI(UIFramework.Bootstrap4);
Değişiklik nedeni
Bootstrap 4 ASP.NET Core 3,0 zaman dilimi sırasında yayınlandı.
Önerilen eylem
Varsayılan kimlik Kullanıcı arabirimini kullanırsanız ve Startup.ConfigureServices Aşağıdaki örnekte gösterildiği gibi içine eklediyseniz, bu değişiklikten etkilenmiş olursunuz:
services.AddDefaultIdentity<IdentityUser>().AddDefaultUI();
Aşağıdaki eylemlerden birini uygulayın:
Uygulamanızı geçiş kılavuzunukullanarak önyükleme 4 ' ü kullanacak şekilde geçirin.
Startup.ConfigureServicesBootstrap 3 ' ün kullanımını zorlamak için güncelleştirme. Örnek:services.AddDefaultIdentity<IdentityUser>().AddDefaultUI(UIFramework.Bootstrap3);
Kategori
ASP.NET Core
Etkilenen API’ler
Yok
Kimlik: Signınasync kimliği doğrulanmamış kimlik için özel durum oluşturur
Varsayılan olarak, SignInAsync olan sorumlular/kimlikler için bir özel durum IsAuthenticated oluşturur false .
Sunulan sürüm
3,0
Eski davranış
SignInAsync içindeki kimlikler dahil tüm sorumluları/kimlikleri kabul eder IsAuthenticated false .
Yeni davranış
Varsayılan olarak, SignInAsync olan sorumlular/kimlikler için bir özel durum IsAuthenticated oluşturur false . Bu davranışı bastırmak için yeni bir bayrak bulunur, ancak varsayılan davranış değişmiştir.
Değişiklik nedeni
Varsayılan olarak, bu sorumlular tarafından reddedildiği için eski davranış soruna neden oldu [Authorize] / RequireAuthenticatedUser() .
Önerilen eylem
ASP.NET Core 3,0 Preview 6 ' da, varsayılan olarak ' de bir RequireAuthenticatedSignIn bayrak vardır AuthenticationOptions true . falseEski davranışı geri yüklemek için bu bayrağı ayarlayın.
Kategori
ASP.NET Core
Etkilenen API’ler
Yok
Kimlik: SignInManager Oluşturucusu yeni parametreyi kabul ediyor
ASP.NET Core 3,0 ' den başlayarak, oluşturucuya yeni bir IUserConfirmation<TUser> parametre eklenmiştir SignInManager . Daha fazla bilgi için bkz. DotNet/aspnetcore # 8356.
Sunulan sürüm
3,0
Değişiklik nedeni
Değişiklik için mosyon, kimlik içinde yeni e-posta/onay akışları için destek eklemektir.
Önerilen eylem
El ile oluşturuyorsanız SignInManager , IUserConfirmation sağlama veya bağımlılık ekleme için bir uygulama sağlayın.
Kategori
ASP.NET Core
Etkilenen API’ler
Kimlik: UI statik Web varlıkları özelliğini kullanır
ASP.NET Core 3,0, statik bir Web varlıkları özelliği sunmuştur ve kimlik Kullanıcı arabirimi benimsemiştir.
Açıklamayı Değiştir
Statik Web varlıkları özelliğini benimseme kimlik UI 'sinin sonucu olarak:
- Çerçeve seçimi,
IdentityUIFrameworkVersionproje dosyanızdaki özelliği kullanılarak gerçekleştirilir. - Bootstrap 4, kimlik Kullanıcı arabirimi için varsayılan UI çerçevesidir. Bootstrap 3 yaşam sonuna ulaştı ve desteklenen bir sürüme geçirmeyi göz önünde bulundurmanız gerekir.
Sunulan sürüm
3,0
Eski davranış
Kimlik Kullanıcı arabirimi için varsayılan UI çerçevesi önyükleme 3 idi. UI çerçevesi, içindeki yöntem çağrısına bir parametre kullanılarak yapılandırılabilir AddDefaultUI Startup.ConfigureServices .
Yeni davranış
Kimlik Kullanıcı arabirimi için varsayılan UI çerçevesi önyükleme 4' dir. UI çerçevesi, yöntem çağrısı yerine proje dosyanızda yapılandırılmalıdır AddDefaultUI .
Değişiklik nedeni
UI çerçevesi yapılandırmasının MSBuild 'e taşınması için statik Web varlıkları özelliğini benimseme özelliği gereklidir. Hangi çerçevenin katıştırılması, çalışma zamanı kararı değil, derleme zamanı karardır.
Önerilen eylem
Yeni önyükleme 4 bileşenlerinin uyumlu olduğundan emin olmak için site Kullanıcı arabirimini gözden geçirin. Gerekirse, IdentityUIFrameworkVersion önyükleme 3 ' e dönmek için MSBuild özelliğini kullanın. Özelliği <PropertyGroup> proje dosyanızdaki bir öğeye ekleyin:
<IdentityUIFrameworkVersion>Bootstrap3</IdentityUIFrameworkVersion>
Kategori
ASP.NET Core
Etkilenen API’ler
IdentityBuilderUIExtensions.AddDefaultUI(IdentityBuilder, UIFramework)
Kestrel: bağlantı bağdaştırıcıları kaldırıldı
"Pubternal" API 'Lerini uygulamasına taşıma kapsamında public , bir kavramı IConnectionAdapter Kestrel öğesinden kaldırılmıştır. Bağlantı bağdaştırıcıları bağlantı ara yazılımı ile değiştiriliyor (ASP.NET Core işlem hattındaki HTTP ara hattına benzer ancak alt düzey bağlantılar için). HTTPS ve bağlantı günlüğü bağlantı bağdaştırıcılarından bağlantı ara yazılıma taşındı. Bu uzantı yöntemleri sorunsuz şekilde çalışmaya devam etmelidir, ancak uygulama ayrıntıları değişmiştir.
Daha fazla bilgi için bkz. DotNet/aspnetcore # 11412. Tartışma için bkz. DotNet/aspnetcore # 11475.
Sunulan sürüm
3,0
Eski davranış
Kestrel genişletilebilirlik bileşenleri kullanılarak oluşturulmuştur IConnectionAdapter .
Yeni davranış
Kestrel genişletilebilirlik bileşenleri, Ara yazılımolarak oluşturulur.
Değişiklik nedeni
Bu değişiklik, daha esnek bir genişletilebilirlik mimarisi sağlamaya yöneliktir.
Önerilen eylem
Tüm uygulamalarını, IConnectionAdapter buradagösterildiği gibi yeni ara yazılım düzenlerini kullanacak şekilde dönüştürün.
Kategori
ASP.NET Core
Etkilenen API’ler
Microsoft.AspNetCore.Server.Kestrel.Core.Adapter.Internal.IConnectionAdapter
Kestrel: boş HTTPS derlemesi kaldırıldı
Derleme Microsoft.AspNetCore.Server.Kestrel.Https kaldırıldı.
Sunulan sürüm
3,0
Değişiklik nedeni
ASP.NET Core 2,1 ' de, içeriği Microsoft.AspNetCore.Server.Kestrel.Https öğesine taşındı Microsoft.AspNetCore.Server.Kestrel.Core . Bu değişiklik öznitelikler kullanılarak kırılmamış bir şekilde gerçekleştirildi [TypeForwardedTo] .
Önerilen eylem
Microsoft.AspNetCore.Server.Kestrel.Https2,0 'ye başvuran Kitaplıklar tüm ASP.NET Core bağımlılıklarını 2,1 veya üzeri olarak güncelleştirmemelidir. Aksi takdirde, ASP.NET Core 3,0 uygulamasına yüklendiğinde bu uygulamalar kesintiye uğrabilirler.- ASP.NET Core 2,1 ve üstünü hedefleyen uygulamalar ve kitaplıklar, NuGet paketine doğrudan başvuruları kaldırmalıdır
Microsoft.AspNetCore.Server.Kestrel.Https.
Kategori
ASP.NET Core
Etkilenen API’ler
Yok
Kestrel: yeni koleksiyona taşınan artbilgisi üstbilgileri ıste
Önceki sürümlerde, istek gövdesi sonuna kadar okurken istek üstbilgileri koleksiyonuna HTTP/1.1 öbekli treyler üst bilgileri eklenmiş Kestrel. Bu davranış, üstbilgiler ve tanıtımları arasındaki belirsizlik hakkında kaygılara neden oldu. Tanıtım listesini yeni bir koleksiyona taşımak için karar yapıldı.
HTTP/2 istek fragmanları ASP.NET Core 2,2 ' de yoktu, ancak artık ASP.NET Core 3,0 ' de bu yeni koleksiyonda de kullanılabiliyor.
Bu treylara erişmek için yeni istek uzantısı yöntemleri eklenmiştir.
İstek gövdesinin tamamı okunduktan sonra HTTP/1.1 Treyi kullanılabilir.
HTTP/2 treyler istemciden alındıkları bir kez kullanılabilir. İstemci, tüm istek gövdesinin sunucu tarafından en az arabelleğe alınana kadar Treyi göndermez. Arabellek alanını boşaltmak için istek gövdesini okumanız gerekebilir. İstek gövdesini sonuna okuduğunuzda, Treyi her zaman kullanılabilir. Treyi, gövdenin sonunu işaret eden bir değer.
Sunulan sürüm
3,0
Eski davranış
İstek artbilgisi üst bilgileri HttpRequest.Headers koleksiyona eklenir.
Yeni davranış
Koleksiyonda istek Fragmanı üstbilgileri yok HttpRequest.Headers . Bunlara erişmek için aşağıdaki uzantı yöntemlerini kullanın HttpRequest :
GetDeclaredTrailers()-Gövdeden sonra beklenme hakkında bilgi sağlayan istek "artbilgisi" üst bilgisini alır.SupportsTrailers()-İsteğin treyler üst bilgilerini almayı destekleyip desteklemediğini gösterir.CheckTrailersAvailable()-İsteğin treyleri destekleyip desteklemediğini ve okuma için kullanılabilir olup olmadığını belirler.GetTrailer(string trailerName)-İstemciden istenen sondaki üstbilgiyi alır.
Değişiklik nedeni
Treyde gRPC gibi senaryolarda önemli bir özelliktir. İstek üst bilgilerinde tanıtımları birleştirme, kullanıcılar için kafa karıştırıcı.
Önerilen eylem
Treyler ile ilgili genişletme yöntemlerini kullanarak HttpRequest treyleri erişin.
Kategori
ASP.NET Core
Etkilenen API’ler
Kestrel: kaldırılan ve genel kullanıma açık olan taşıma soyutlamaları
"Pubternal" API 'lerinden uzaklaşma kapsamında, Kestrel aktarım katmanı API 'Leri kitaplıkta ortak bir arabirim olarak sunulur Microsoft.AspNetCore.Connections.Abstractions .
Sunulan sürüm
3,0
Eski davranış
- Taşıma ile ilgili soyutlamalar
Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractionskitaplıkta kullanılabilir. ListenOptions.NoDelayÖzellik kullanılabilir.
Yeni davranış
- Arabirim, kitaplıkta
IConnectionListenerMicrosoft.AspNetCore.Connections.Abstractionsen çok kullanılan işlevselliği kullanıma sunmak için kitaplıkta tanıtılmıştı...Transport.Abstractions. NoDelayArtık aktarım seçeneklerinde (LibuvTransportOptionsveSocketTransportOptions) kullanılabilir.SchedulingModeartık kullanılamıyor.
Değişiklik nedeni
ASP.NET Core 3,0, "pubternal" API 'Lerinden uzağa taşındı.
Önerilen eylem
Kategori
ASP.NET Core
Etkilenen API’ler
Yok
Yerelleştirme: ResourceManagerWithCultureStringLocalizer ve WithCulture artık kullanılmıyor olarak işaretlendi
ResourceManagerWithCultureStringLocalizer sınıfı ve withculture arabirim üyesi, genellikle yerelleştirme kullanıcıları için, özellikle kendi uygulamasını oluştururken karışıklık kaynaklarıdır IStringLocalizer . Bu öğeler kullanıcıya bir IStringLocalizer Örneğin "dil başına, kaynak başına" olan izlenimi verir. Gerçekte, örneklerin yalnızca "kaynak başına" olması gerekir. İçin aranan dil, yürütme zamanına göre belirlenir CultureInfo.CurrentUICulture . karışıklık kaynağını ortadan kaldırmak için, apı 'ler ASP.NET Core 3,0 Preview 3 ' te eski olarak işaretlendi. API 'Ler gelecek bir sürümde kaldırılacak.
Bağlam için bkz. DotNet/aspnetcore # 3324. Tartışma için bkz. DotNet/aspnetcore # 7756.
Sunulan sürüm
3.0
Eski davranış
Yöntemler olarak işaretlenmemiş Obsolete .
Yeni davranış
Yöntemler işaretlenir Obsolete .
Değişiklik nedeni
API 'Ler önerilmeyen bir kullanım durumunu temsil eder. Yerelleştirme tasarımı hakkında karışıklık vardı.
Önerilen eylem
ResourceManagerStringLocalizerBunun yerine kullanılması önerilir. Kültürün tarafından ayarlanmasına izin verin CurrentCulture . Bu seçenek değilse, bir ResourceManagerWithCultureStringLocalizerkopyası oluşturun ve kullanın.
Kategori
ASP.NET Core
Etkilenen API’ler
Günlüğe kaydetme: Debuggünlükçü sınıfı iç oluşturulmuş
ASP.NET Core 3,0 ' den önce DebugLogger erişim değiştiricisi idi public . ASP.NET Core 3,0 ' de, erişim değiştiricisi olarak değiştirilmiştir internal .
Sunulan sürüm
3,0
Değişiklik nedeni
Değişiklik şu şekilde yapılıyor:
- Gibi diğer günlükçü uygulamalarıyla tutarlılığı zorunlu tutun
ConsoleLogger. - API yüzeyini küçültün.
Önerilen eylem
AddDebug ILoggingBuilder Hata ayıklama günlüğünü etkinleştirmek için genişletme yöntemini kullanın. DebugLoggerProvider Ayrıca public hizmetin el ile kaydedilmesi gereken bir olaydır.
Kategori
ASP.NET Core
Etkilenen API’ler
Microsoft.Extensions.Logging.Debug.DebugLogger
MVC: zaman uyumsuz son ek, denetleyici eylem adlarından kırpılmakta
DotNet/aspnetcore # 4849adreslemesinin bir parçası olarak ASP.NET Core MVC, Async Varsayılan olarak eylem adlarından son eki kırpar. ASP.NET Core 3,0 ' den itibaren bu değişiklik hem yönlendirme hem de bağlantı üretimini etkiler.
Sunulan sürüm
3,0
Eski davranış
Aşağıdaki ASP.NET Core MVC denetleyicisini göz önünde bulundurun:
public class ProductController : Controller
{
public async IActionResult ListAsync()
{
var model = await DbContext.Products.ToListAsync();
return View(model);
}
}
Eylem aracılığıyla yönlendirilebilir Product/ListAsync . Bağlantı oluşturma, sonekin belirtilmesini gerektirir Async . Örnek:
<a asp-controller="Product" asp-action="ListAsync">List</a>
Yeni davranış
ASP.NET Core 3,0 ' de, eylem aracılığıyla yönlendirilebilir Product/List . Bağlantı oluşturma kodu Async son eki atmalıdır. Örnek:
<a asp-controller="Product" asp-action="List">List</a>
Bu değişiklik, özniteliği kullanılarak belirtilen adları etkilemez [ActionName] . Yeni davranış, içinde olarak ayarlanarak devre dışı MvcOptions.SuppressAsyncSuffixInActionNames bırakılabilir false Startup.ConfigureServices :
services.AddMvc(options =>
{
options.SuppressAsyncSuffixInActionNames = false;
});
Değişiklik nedeni
Kurala göre, zaman uyumsuz .NET yöntemleri ile sonlardır Async . Ancak, bir yöntem bir MVC eylemini tanımladığında, sonekin kullanılması istenmeyen bir işlemdir Async .
Önerilen eylem
Uygulamanız, adın sonekini koruyan MVC eylemlerine bağımlıysa Async , aşağıdaki azaltmaları aşağıdakilerden birini seçin:
[ActionName]Özgün adı korumak için özniteliğini kullanın.- Yeniden adlandırmayı tamamen devre dışı bırak
MvcOptions.SuppressAsyncSuffixInActionNamesfalseStartup.ConfigureServices:
services.AddMvc(options =>
{
options.SuppressAsyncSuffixInActionNames = false;
});
Kategori
ASP.NET Core
Etkilenen API’ler
Yok
MVC: JsonResult, Microsoft. AspNetCore. Mvc. Core 'a taşındı
JsonResult , Microsoft.AspNetCore.Mvc.Core derlemeye taşındı. Bu tür üzerindeMicrosoft.AspNetCore.Mvc.Formatters.Jstanımlanması için kullanılır. Bir derleme düzeyi [TypeForwardedTo] özniteliği, ' ye Microsoft.AspNetCore.Mvc.Formatters.Json , kullanıcıların çoğunluğunda bu sorunu gidermek için eklenmiştir. Üçüncü taraf kitaplıklar kullanan uygulamalar sorunlarla karşılaşabilir.
Sunulan sürüm
3,0 Preview 6
Eski davranış
2,2 tabanlı kitaplık kullanan bir uygulama başarıyla oluşturulur.
Yeni davranış
2,2 tabanlı kitaplık kullanan bir uygulama derleme hatası verir. Aşağıdaki metnin bir varyasyonunu içeren bir hata verilmiştir:
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'
Bu tür bir sorunun örneği için bkz. DotNet/aspnetcore # 7220.
Değişiklik nedeni
ASP.NET Core, ASPNET/Duyurular # 325bölümünde açıklandığı gibi bileşim düzeyinde değişir.
Önerilen eylem
2,2 sürümüne karşı derlenen kitaplıkların, Microsoft.AspNetCore.Mvc.Formatters.Json tüm tüketiciler için sorunu gidermek üzere yeniden derlenmesi gerekebilir. Etkileniyorsa kitaplık yazarına başvurun. ASP.NET Core 3,0 ' i hedeflemek için kitaplığın yeniden derlenmesi isteği.
Kategori
ASP.NET Core
Etkilenen API’ler
Microsoft.AspNetCore.Mvc.JsonResult
MVC: ön derleme aracı kullanım dışı
ASP.NET Core 1,1 ' de, Microsoft.AspNetCore.Mvc.Razor.ViewCompilation (MVC ön derleme aracı), Razor dosyalarının yayımlama zamanı derlemesi (. cshtml dosyaları) için destek eklemek üzere sunulmuştur. ASP.NET Core 2,1 ' de, Razor SDK , ön derleme aracının özelliklerini genişletmek üzere sunulmuştur. Razor SDK, Razor dosyalarının derleme ve yayımlama zamanı derlemesi için destek eklendi. SDK, uygulama başlatma zamanında geliştirirken derleme zamanında . cshtml dosyalarının doğruluğunu doğrular. Razor SDK varsayılan olarak açık olur ve kullanmaya başlamak için herhangi bir hareket gerekmez.
ASP.NET Core 3,0 ' de, ASP.NET Core 1,1-era MVC prederlemesini kaldırma aracı kaldırılmıştır. Önceki paket sürümleri, düzeltme eki sürümünde önemli hata ve güvenlik düzeltmeleri almaya devam edecektir.
Sunulan sürüm
3.0
Eski davranış
Microsoft.AspNetCore.Mvc.Razor.ViewCompilationPaket, MVC Razor görünümlerini önceden derlemek için kullanıldı.
Yeni davranış
Razor SDK, bu işlevselliği yerel olarak destekler. Microsoft.AspNetCore.Mvc.Razor.ViewCompilationPaket artık güncelleştirilmemiş.
Değişiklik nedeni
Razor SDK daha fazla işlevsellik sağlar ve derleme zamanında . cshtml dosyalarının doğruluğunu doğrular. SDK Ayrıca uygulama başlatma süresini geliştirir.
Önerilen eylem
ASP.NET Core 2,1 veya sonraki bir sürümü kullananlar için, Razor SDK 'sındaön derleme için yerel desteği kullanmak üzere güncelleştirin. Hatalar veya eksik özellikler Razor SDK 'ya geçişi engelliyorsa, DotNet/aspnetcore' da bir sorun açın.
Kategori
ASP.NET Core
Etkilenen API’ler
Hiçbiri
MVC: "Pubternal" türleri iç olarak değiştirildi
ASP.NET Core 3,0 ' de, MVC içindeki tüm "pubternal" türleri public desteklenen bir ad alanında ya da uygun şekilde güncelleştirildi internal .
Açıklamayı Değiştir
ASP.NET Core, "pubternal" türleri olarak belirtilir, public ancak bir .Internal -sonsabit ad alanında bulunur. Bu türler olsa public da, destek ilkesi yoktur ve bu değişiklikler önemli değişikliklere tabidir. Ne yazık ki, bu türlerin yanlışlıkla kullanılması yaygındır ve bu projelerde oluşan değişikliklere neden olacak ve Framework 'ün bakımını yapma yeteneğini sınırlandırmıştır.
Sunulan sürüm
3,0
Eski davranış
MVC içindeki bazı türler public , ancak bir .Internal ad alanında. Bu türlerin destek ilkesi yoktu ve değişiklikler ortadan kaldırıldı.
Yeni davranış
Bu tür türler desteklenen bir ad alanında olacak şekilde güncelleştirilir public veya olarak işaretlenir internal .
Değişiklik nedeni
"Pubternal" türlerinin yanlışlıkla kullanılması yaygındır ve bu projelerde oluşan değişikliklere neden olacak ve Framework 'ün bakımını yapma yeteneğini sınırlandırmıştır.
Önerilen eylem
Gerçekten olan public ve yeni ve desteklenen bir ad alanına taşınan türler kullanıyorsanız, başvurularınızı yeni ad alanlarıyla eşleşecek şekilde güncelleştirin.
Olarak işaretlenen türler kullanıyorsanız internal , alternatif bulmanız gerekir. Daha önce "pubternal" türleri genel kullanım için hiçbir şekilde desteklenmez. Bu ad alanlarında uygulamalarınız için kritik olan belirli türler varsa, DotNet/aspnetcore' da bir sorun yapın. İstenen türleri oluşturmak için dikkat edilmesi gereken noktalar public .
Kategori
ASP.NET Core
Etkilenen API’ler
Bu değişiklik aşağıdaki ad alanları türlerini içerir:
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: Web API 'SI uyumluluk dolgusu kaldırıldı
ASP.NET Core 3,0 ' den başlayarak, Microsoft.AspNetCore.Mvc.WebApiCompatShim paket artık kullanılamıyor.
Açıklamayı Değiştir
Microsoft.AspNetCore.Mvc.WebApiCompatShim(WebApiCompatShim) paketi, mevcut Web API uygulamalarının ASP.NET Core geçişini kolaylaştırmak için ASP.NET 4. x Web API 2 ile ASP.NET Core kısmi uyumluluk sağlar. Ancak, WebApiCompatShim kullanan uygulamalar, son ASP.NET Core sürümlerindeki API ile ilgili özelliklerden faydalanmalarından yararlanabilir. Bu tür özellikler, geliştirilmiş açık API belirtim oluşturma, standartlaştırılmış hata işleme ve istemci kodu oluşturma özelliklerini içerir. API çabalarını 3,0 ' de daha iyi odaklamak için WebApiCompatShim kaldırılmıştır. WebApiCompatShim kullanan mevcut uygulamalar, daha yeni modele geçirilmesi gerekir [ApiController] .
Sunulan sürüm
3,0
Değişiklik nedeni
Web API 'SI uyumluluk dolgusu bir geçiş aracıdır. ASP.NET Core eklenen yeni işlevlere Kullanıcı erişimini kısıtlar.
Önerilen eylem
Bu dolgunun kullanımını kaldırın ve ASP.NET Core kendi kendine benzer işlevlere doğrudan geçirin.
Kategori
ASP.NET Core
Etkilenen API’ler
Microsoft.AspNetCore.Mvc.WebApiCompatShim
Razor: RazorTemplateEngine API 'SI kaldırıldı
RazorTemplateEngine API 'si kaldırıldı ve ile değiştirildi RazorProjectEngine .
tartışma için bkz. GitHub sorunu dotnet/aspnetcore # 25215.
Sunulan sürüm
3.0
Eski davranış
Razor dosyalarının kodunu ayrıştırmak ve oluşturmak için bir şablon altyapısı oluşturulabilir ve kullanılabilir.
Yeni davranış
RazorProjectEngine oluşturulabilir ve RazorTemplateEngine Razor dosyalarının kodunu ayrıştırmak ve oluşturmak için aynı tür bilgileri sağlayabilir. RazorProjectEngine Ayrıca ek yapılandırma düzeyleri sağlar.
Değişiklik nedeni
RazorTemplateEngine var olan uygulamalarla çok sıkı şekilde bağlanmış. Bu sıkı bir Razor ayrıştırma/oluşturma işlem hattını düzgün bir şekilde yapılandırmaya çalışırken daha fazla soruya yol açmıştır.
Önerilen eylem
RazorProjectEngineYerine kullanın RazorTemplateEngine . Aşağıdaki örnekleri göz önünde bulundurun.
RazorProjectEngine oluşturma ve yapılandırma
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
});
Razor dosyası için kod oluşturma
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 Core
Etkilenen API’ler
Razor: çalışma zamanı derlemesi bir pakete taşındı
Razor görünümlerinin ve Razor Pages çalışma zamanı derlenmesi desteği ayrı bir pakete taşındı.
Sunulan sürüm
3,0
Eski davranış
Çalışma zamanı derlemesi ek paketlere gerek olmadan kullanılabilir.
Yeni davranış
İşlevsellik, Microsoft. AspNetCore. Mvc. Razor. RuntimeCompilation paketine taşınmıştır.
Aşağıdaki API 'Ler, Microsoft.AspNetCore.Mvc.Razor.RazorViewEngineOptions çalışma zamanı derlemesini desteklemek için daha önce ' de kullanılabilir. API 'Ler ile artık kullanılabilir Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.MvcRazorRuntimeCompilationOptions .
RazorViewEngineOptions.FileProvidersArtıkMvcRazorRuntimeCompilationOptions.FileProvidersRazorViewEngineOptions.AdditionalCompilationReferencesArtıkMvcRazorRuntimeCompilationOptions.AdditionalReferencePaths
Ayrıca, Microsoft.AspNetCore.Mvc.Razor.RazorViewEngineOptions.AllowRecompilingViewsOnFileChange kaldırılmıştır. Dosya değişikliklerinde yeniden derleme, pakete başvurarak varsayılan olarak etkindir Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation .
Değişiklik nedeni
Bu değişiklik, Roslyn 'de ASP.NET Core paylaşılan çerçeve bağımlılığını kaldırmak için gereklidir.
Önerilen eylem
Razor dosyalarının çalışma zamanı derlemesini veya yeniden derlemesini gerektiren uygulamalar aşağıdaki adımları almalıdır:
Pakete bir başvuru ekleyin
Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.Startup.ConfigureServicesİçin bir çağrı içerecek şekilde projenin metodunu güncelleştirinAddRazorRuntimeCompilation. Örnek:services.AddMvc() .AddRazorRuntimeCompilation();
Kategori
ASP.NET Core
Etkilenen API’ler
Microsoft.AspNetCore.Mvc.Razor.RazorViewEngineOptions
Oturum durumu: kullanılmayan API 'Ler kaldırıldı
Oturum tanımlama bilgilerini yapılandırmak için kullanılmayan API 'Ler kaldırılmıştır. Daha fazla bilgi için bkz. ASPNET/Duyurular # 257.
Sunulan sürüm
3,0
Değişiklik nedeni
Bu değişiklik, tanımlama bilgilerini kullanan özellikleri yapılandırmak için API 'lerde tutarlılığı zorlar.
Önerilen eylem
Kaldırılan API 'lerin kullanımını daha yeni değişikliklere geçirin. İçinde aşağıdaki örneği göz önünde bulundurun 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 Core
Etkilenen API’ler
- 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
Paylaşılan çerçeve: Microsoft.AspNetCore.App 'den kaldırılan derlemeler
ASP.NET Core 3,0 ' den başlayarak, ASP.NET Core paylaşılan framework ( Microsoft.AspNetCore.App ) yalnızca Microsoft tarafından tam olarak geliştirilen, desteklenen ve hizmet verebilir olan birinci taraf derlemeleri içerir.
Açıklamayı Değiştir
ASP.NET Core "platform" için sınırları yeniden tanımlayarak değişikliği düşünün. paylaşılan framework, GitHub aracılığıyla herkes tarafından kaynak tarafından oluşturulabilir ve .net Core paylaşılan çerçevelerinin mevcut avantajlarını uygulamalarınıza sunmaya devam edecektir. Bazı avantajlar, daha küçük dağıtım boyutu, merkezi düzeltme eki uygulama ve daha hızlı başlangıç süresi içerir.
Değişikliğin bir parçası olarak, bazı önemli değişiklikler ' de kullanıma sunulmuştur Microsoft.AspNetCore.App .
Sunulan sürüm
3.0
Eski davranış
Microsoft.AspNetCore.AppProje dosyasındaki bir öğe aracılığıyla başvurulan projeler <PackageReference> .
Ayrıca, Microsoft.AspNetCore.App aşağıdaki alt bileşenleri de içerir:
- Json.NET (
Newtonsoft.Json) - Entity Framework Core (ön eki olan derlemeler
Microsoft.EntityFrameworkCore.) - Roslyn (
Microsoft.CodeAnalysis)
Yeni davranış
Bir başvuru Microsoft.AspNetCore.App artık <PackageReference> Proje dosyasında bir öğe gerektirmez. .NET Core SDK, öğesinin kullanımını değiştiren adlı yeni bir öğeyi destekler <FrameworkReference> <PackageReference> .
Daha fazla bilgi için bkz. DotNet/aspnetcore # 3612.
Entity Framework Core NuGet paketleri olarak dağıtılır. Bu değişiklik, .NET 'teki diğer tüm veri erişim kitaplıklarıyla birlikte teslim modelini hizalar. Çeşitli .NET platformlarını destekleyerek sürmek devam etmek için en basit yolu Entity Framework Core sağlar. Entity Framework Core paylaşılan çerçevenin dışına taşınması, Microsoft tarafından geliştirilen, desteklenen ve hizmet verebilir kitaplığı olarak durumunu etkilemez. .NET Core destek ilkesi onu kapsamaya devam eder.
Json.NET ve Entity Framework Core ASP.NET Core ile çalışmaya devam eder. Ancak, paylaşılan çerçeveye dahil edilmezler.
Daha fazla bilgi için .NET Core 3,0 ' de JSON 'nin geleceğebakın. Ayrıca, paylaşılan çerçeveden kaldırılan ikili dosyaların tüm listesine bakın.
Değişiklik nedeni
bu değişiklik, tüketimini basitleştirir Microsoft.AspNetCore.App ve NuGet paketleri ile paylaşılan çerçeveler arasındaki yinelemeyi azaltır.
Bu değişiklik için mosyon hakkında daha fazla bilgi için Bu blog gönderisinebakın.
Önerilen eylem
ASP.NET Core 3,0 ' den başlayarak, artık projelerin NuGet paketleri olarak içindeki derlemeleri tüketmesi gerekli değildir Microsoft.AspNetCore.App . ASP.NET Core paylaşılan framework 'ün hedeflenmesini ve kullanımını basitleştirmek için, ASP.NET Core 1,0 ' den itibaren sevk edilen birçok NuGet paket artık üretilmez. Bu paketlerin sağladığı API 'Ler, ' a ' i kullanarak uygulamalar için hala kullanılabilir <FrameworkReference> Microsoft.AspNetCore.App . Ortak API örnekleri Kestrel, MVC ve Razor içerir.
bu değişiklik Microsoft.AspNetCore.App , ASP.NET Core 2. x ile başvurulan tüm ikili dosyalar için geçerlidir. Önemli özel durumlar şunlardır:
Microsoft.Extensionshedef .NET Standard devam eden kitaplıklar NuGet paketleri olarak kullanılabilir (bkz https://github.com/dotnet/extensions .).- ' nin parçası olmayan ASP.NET Core ekibi tarafından oluşturulan apı 'ler
Microsoft.AspNetCore.App. örneğin, aşağıdaki bileşenler NuGet paketleri olarak kullanılabilir:- Entity Framework Core
- Üçüncü taraf tümleştirme sağlayan API 'Ler
- Deneysel özellikler
- Paylaşılan çerçevede olması gereken gereksinimleri yerine getiren bağımlılıklara sahip API 'ler
- Json.NET desteğini sağlayan MVC uzantıları. apı, Json.NET ve MVC kullanımını desteklemek için NuGet paketi olarak sağlanır. daha fazla ayrıntı için ASP.NET Core geçiş kılavuzunabakın.
- signalr .net istemcisi .NET Standard desteklemeye devam eder ve NuGet bir paketolarak sevk edilir. Xamarin ve UWP gibi birçok .NET çalışma zamanı için kullanılması amaçlanmıştır.
Daha fazla bilgi için bkz. 3,0 ' de paylaşılan çerçeve derlemeleri için paketleri oluşturmayı durdurma. Tartışma için bkz. DotNet/aspnetcore # 3757.
Kategori
ASP.NET Core
Etkilenen API’ler
Paylaşılan çerçeve: Microsoft. AspNetCore. All kaldırıldı
ASP.NET Core 3,0 ' den başlayarak, Microsoft.AspNetCore.All metapackage ve eşleşen Microsoft.AspNetCore.All paylaşılan çerçeve artık üretilmez. Bu paket ASP.NET Core 2,2 ' de kullanılabilir ve ASP.NET Core 2,1 ' de hizmet güncelleştirmelerini almaya devam edecektir.
Sunulan sürüm
3,0
Eski davranış
Uygulamalar, Microsoft.AspNetCore.All Microsoft.AspNetCore.All .NET Core 'da paylaşılan çerçeveyi hedeflemek için metapackage kullanabilir.
Yeni davranış
.NET Core 3,0, paylaşılan bir Microsoft.AspNetCore.All çerçeve içermez.
Değişiklik nedeni
Microsoft.AspNetCore.AllMetapackage çok sayıda dış bağımlılığı içeriyordu.
Önerilen eylem
Çerçevesini kullanmak için projenizi geçirin Microsoft.AspNetCore.App . Daha önce ' de kullanılabilir olan bileşenler Microsoft.AspNetCore.All NuGet üzerinde hala kullanılabilir. Bu bileşenler artık, paylaşılan çerçeveye eklenmek yerine uygulamanızla birlikte dağıtılır.
Kategori
ASP.NET Core
Etkilenen API’ler
Yok
SignalR: HandshakeProtocol. Başarıkıandshakedata değişti
Handshakeprotocol. Fshandshakedata alanı kaldırılmıştır ve belirli bir el sıkışma yanıtı üreten bir yardımcı yöntemle değiştirilmiştir IHubProtocol .
Sunulan sürüm
3,0
Eski davranış
HandshakeProtocol.SuccessHandshakeData bir public static ReadOnlyMemory<byte> alandır.
Yeni davranış
HandshakeProtocol.SuccessHandshakeData , static GetSuccessfulHandshake(IHubProtocol protocol) belirtilen protokole göre döndüren bir yöntemle değiştirilmiştir ReadOnlyMemory<byte> .
Değişiklik nedeni
El sıkışma yanıtına , sabit olmayan ve seçilen protokole bağlı olarak değişen ek alanlar eklenmiştir.
Önerilen eylem
Yok. Bu tür kullanıcı kodundan kullanılmak üzere tasarlanmamıştır. Bu public , SignalR sunucusu ve istemcisi arasında paylaşılabilir. Ayrıca, .NET dilinde yazılmış müşteri SignalR istemcileri tarafından da kullanılabilir. SignalR kullanıcıları bu değişiklikten etkilenmemelidir.
Kategori
ASP.NET Core
Etkilenen API’ler
HandshakeProtocol.SuccessHandshakeData
SignalR: HubConnection ResetSendPing ve ResetTimeout yöntemleri kaldırıldı
ResetSendPingVe ResetTimeout yöntemleri, SignalR API 'sinden kaldırılmıştır HubConnection . Bu yöntemler başlangıçta yalnızca iç kullanıma yöneliktir, ancak ASP.NET Core 2,2 ' de genel kullanıma sunulmuştur. Bu yöntemler ASP.NET Core 3,0 Preview 4 sürümünden itibaren kullanılabilir olmayacaktır. Tartışma için bkz. DotNet/aspnetcore # 8543.
Sunulan sürüm
3,0
Eski davranış
API 'Ler kullanılabilir.
Yeni davranış
API 'Ler kaldırılır.
Değişiklik nedeni
Bu yöntemler başlangıçta yalnızca iç kullanıma yöneliktir, ancak ASP.NET Core 2,2 ' de genel kullanıma sunulmuştur.
Önerilen eylem
Bu yöntemleri kullanmayın.
Kategori
ASP.NET Core
Etkilenen API’ler
SignalR: HubConnectionContext oluşturucuları değişti
SignalR 'nin HubConnectionContext oluşturucuları, birden çok parametre yerine bir seçenek türünü kabul edecek şekilde değiştirilmiştir ve gelecekte prova ekleme seçeneklerine sahiptir. Bu değişiklik, iki Oluşturucuyu bir seçenek türü kabul eden tek bir Oluşturucu ile değiştirir.
Sunulan sürüm
3,0
Eski davranış
HubConnectionContext iki oluşturucuya sahiptir:
public HubConnectionContext(ConnectionContext connectionContext, TimeSpan keepAliveInterval, ILoggerFactory loggerFactory);
public HubConnectionContext(ConnectionContext connectionContext, TimeSpan keepAliveInterval, ILoggerFactory loggerFactory, TimeSpan clientTimeoutInterval);
Yeni davranış
İki Oluşturucu kaldırılmıştır ve bir Oluşturucu ile değiştirilmiştir:
public HubConnectionContext(ConnectionContext connectionContext, HubConnectionContextOptions contextOptions, ILoggerFactory loggerFactory)
Değişiklik nedeni
Yeni Oluşturucu yeni bir seçenekler nesnesi kullanır. Sonuç olarak, HubConnectionContext daha fazla Oluşturucu ve yeni değişiklikler yapılmadan daha sonra özellikleri genişletilebilir.
Önerilen eylem
Aşağıdaki oluşturucuyu kullanmak yerine:
HubConnectionContext connectionContext = new HubConnectionContext(
connectionContext,
keepAliveInterval: TimeSpan.FromSeconds(15),
loggerFactory,
clientTimeoutInterval: TimeSpan.FromSeconds(15));
Aşağıdaki oluşturucuyu kullanın:
HubConnectionContextOptions contextOptions = new HubConnectionContextOptions()
{
KeepAliveInterval = TimeSpan.FromSeconds(15),
ClientTimeoutInterval = TimeSpan.FromSeconds(15)
};
HubConnectionContext connectionContext = new HubConnectionContext(connectionContext, contextOptions, loggerFactory);
Kategori
ASP.NET Core
Etkilenen API’ler
- HubConnectionContext(ConnectionContext, TimeSpan, ILoggerFactory)
- HubConnectionContext(ConnectionContext, TimeSpan, ILoggerFactory, TimeSpan)
SignalR: JavaScript istemci paketi adı değiştirildi
ASP.NET Core 3,0 Preview 7 ' de, SignalR JavaScript istemci paketi adı ' dan ' a değiştirilmiştir @aspnet/signalr @microsoft/signalr . Ad değişikliği, SignalR 'nin Azure SignalR hizmeti sayesinde yalnızca ASP.NET Core uygulamalardan daha fazla yararlı olduğunu yansıtır.
Bu değişikliğe tepki vermek için, dosyalar, package.json require deyimler ve ECMAScript deyimleriylepackage.jsbaşvuruları değiştirin import . Bu yeniden adlandırma kapsamında hiçbir API değişmeyecektir.
Tartışma için bkz. DotNet/aspnetcore # 11637.
Sunulan sürüm
3,0
Eski davranış
İstemci paketi adı @aspnet/signalr .
Yeni davranış
İstemci paketinin adı @microsoft/signalr .
Değişiklik nedeni
Ad değişikliği, SignalR 'nin Azure SignalR hizmeti için teşekkürler ASP.NET Core uygulamalar ötesinde yararlı olduğunu açıklığa kavuşturar.
Önerilen eylem
Yeni pakete geçiş yapın @microsoft/signalr .
Kategori
ASP.NET Core
Etkilenen API’ler
Yok
SignalR: UseSignalR ve UseConnections yöntemleri kullanılmıyor olarak işaretlendi
Yöntemler UseConnections ve UseSignalR ve sınıflar ConnectionsRouteBuilder ve HubRouteBuilder ASP.NET Core 3,0 ' de eski olarak işaretlenir.
Sunulan sürüm
3,0
Eski davranış
SignalR hub yönlendirmesi veya kullanılarak yapılandırıldı UseSignalR UseConnections .
Yeni davranış
Yönlendirmeyi yapılandırmanın eski yolu kullanımdan kaldırılmıştır ve uç nokta yönlendirme ile değiştirilmiştir.
Değişiklik nedeni
Ara yazılım yeni uç nokta yönlendirme sistemine taşınıyor. Ara yazılım eklemenin eski yolu kullanımdan kaldırılıyor.
Önerilen eylem
Değiştir UseSignalR UseEndpoints :
Eski kod:
app.UseSignalR(routes =>
{
routes.MapHub<SomeHub>("/path");
});
Yeni kod:
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<SomeHub>("/path");
});
Kategori
ASP.NET Core
Etkilenen API’ler
- 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
Maça 'Lar: gereksiz olarak işaretlenen SpaServices ve NodeServices
ASP.NET Core 2,1 ' den bu yana aşağıdaki NuGet paketlerinin içeriği gereksizdir. Sonuç olarak, aşağıdaki paketler artık kullanılmıyor olarak işaretlenir:
Aynı nedenden dolayı, aşağıdaki NPM modülleri kullanım dışı olarak işaretlenmekte:
Önceki paketler ve NPM modülleri daha sonra .NET 5 ' te kaldırılacaktır.
Sunulan sürüm
3,0
Eski davranış
Kullanım dışı bırakılan paketler ve NPM modülleri, ASP.NET Core çeşitli Single-Page App (SPA) çerçeveleri ile tümleştirilecek şekilde tasarlanmıştır. Bu tür çerçeveler, Redux ile angular, tepki verme ve tepki verme içerir.
Yeni davranış
Microsoft. AspNetCore. SpaServices. Extensions NuGet paketinde yeni bir tümleştirme mekanizması bulunur. Paket, ASP.NET Core 2,1 ' den itibaren angular ve tepki verme projesi şablonlarına göre kalır.
Değişiklik nedeni
ASP.NET Core, angular, tepki verme ve Redux ile tepki verme gibi çeşitli Single-Page uygulama (SPA) çerçeveleri ile tümleştirmeyi destekler. Başlangıçta bu çerçevelerle tümleştirme, sunucu tarafı prerendering ve WebPack ile tümleştirme gibi senaryolar işlenen ASP.NET Core özel bileşenlerle oluşturulmuştur. Saat itibarıyla, sektör standartları değişmiştir. SPA çerçevelerinin her biri kendi standart komut satırı arabirimlerini serbest bıraktı. Örneğin, angular CLı ve oluşturma-tepki-uygulama.
ASP.NET Core 2,1 Mayıs 2018 ' de yayınlanmışsa, takım standartlara göre değişikliğe cevap verdi. SPA çerçevelerinin kendi araç zincirleriyle tümleştirmenin daha yeni ve kolay bir yolu sağlandı. Yeni tümleştirme mekanizması pakette bulunur Microsoft.AspNetCore.SpaServices.Extensions ve 2,1 ASP.NET Core sonrasında angular ve tepki verme projesi şablonlarına göre kalır.
Eski ASP.NET Core özgü bileşenlerin ilgisiz olduğunu ve önerilmediğini netleştirmek için:
- 2,1 öncesi tümleştirme mekanizması eski olarak işaretlenir.
- Destekleyici NPM paketleri kullanım dışı olarak işaretlenir.
Önerilen eylem
Bu paketleri kullanıyorsanız, işlevleri kullanmak için uygulamalarınızı güncelleştirin:
- Paketini yeniden yapın
Microsoft.AspNetCore.SpaServices.Extensions. - Kullanmakta olduğunuz SPA çerçeveleri tarafından sağlanıyor
Sunucu tarafı prerendering ve sık erişimli modül yeniden yükleme gibi özellikleri etkinleştirmek için ilgili SPA çerçevesine yönelik belgelere bakın. İçindeki işlev Microsoft.AspNetCore.SpaServices.Extensions kullanılmıyor ve not desteklenmeye devam edecek.
Kategori
ASP.NET Core
Etkilenen API’ler
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
Maça 'Lar: Spaservice ve NodeServices artık konsol günlükçüsü 'e geri düşmüyor
Microsoft.AspNetCore.SpaServices ve Microsoft.AspNetCore.NodeServices günlüğe kaydetme yapılandırılmadığı takdirde konsol günlükleri görüntülenmez.
Sunulan sürüm
3,0
Eski davranış
Microsoft.AspNetCore.SpaServices ve Microsoft.AspNetCore.NodeServices günlüğe kaydetme yapılandırılmadığında otomatik olarak bir konsol günlükçüsü oluşturmak için kullanılır.
Yeni davranış
Microsoft.AspNetCore.SpaServices ve Microsoft.AspNetCore.NodeServices günlüğe kaydetme yapılandırılmadığı takdirde konsol günlükleri görüntülenmez.
Değişiklik nedeni
Diğer ASP.NET Core paketlerinin günlüğe kaydetme işleminin nasıl uygulanacağını hizalamanız gerekir.
Önerilen eylem
Eski davranış gerekliyse konsol günlüğünü yapılandırmak için services.AddLogging(builder => builder.AddConsole()) Setup.ConfigureServices yönteminizi ekleyin.
Kategori
ASP.NET Core
Etkilenen API’ler
Yok
Hedef Framework: .NET Framework desteği bırakıldı
ASP.NET Core 3,0 ' den başlayarak, .NET Framework desteklenmeyen bir hedef çerçevedir.
Açıklamayı Değiştir
.NET Framework 4,8, .NET Framework son ana sürümüdür. Yeni ASP.NET Core uygulamalar .NET Core üzerinde oluşturulmalıdır. .NET Core 3,0 sürümünden itibaren, .NET Core 'un parçası olarak ASP.NET Core 3,0 ' yi düşünebilirsiniz.
.NET Framework ASP.NET Core kullanan müşteriler, 2,1 LTS sürümünükullanarak tam olarak desteklenen bir biçimde devam edebilir. 2,1 için destek ve bakım, en az 21 Ağustos 2021 tarihine kadar devam eder. Bu tarih, .net destek ilkesibaşına LTS sürümünün bildiriminden sonraki üç yıldır. .NET Framework üzerinde ASP.NET Core 2,1 paketleri için destek, diğer paket tabanlı ASP.net çerçeveleri için bakım ilkesinebenzer şekilde süresiz olarak genişletilir.
.NET Framework .NET Core 'a taşıma hakkında daha fazla bilgi için bkz. .NET Core 'A taşıma.
Microsoft.Extensions paketler (günlüğe kaydetme, bağımlılık ekleme ve yapılandırma gibi) ve Entity Framework Core etkilenmez. .NET Standard desteklemeye devam eder.
Bu değişiklik için mosyon hakkında daha fazla bilgi için, özgün blog gönderisinebakın.
Sunulan sürüm
3.0
Eski davranış
ASP.NET Core uygulamalar .NET Core veya .NET Framework üzerinde çalışabilir.
Yeni davranış
ASP.NET Core uygulamalar yalnızca .NET Core üzerinde çalıştırılabilir.
Önerilen eylem
Aşağıdaki eylemlerden birini uygulayın:
- Uygulamanızı ASP.NET Core 2,1 ' de saklayın.
- Uygulamanızı ve bağımlılıklarınızı .NET Core 'a geçirin.
Kategori
ASP.NET Core
Etkilenen API’ler
Yok
Core .NET kitaplıkları
- Rapor sürümünü rapor alan API'ler artık dosya sürümünü değil ürün bildiriyor
- Özel EncoderFallbackBuffer örnekleri yineleyici olarak geri dönmüyor
- Kayan nokta biçimlendirme ve ayrıştırma davranışı değişiklikleri
- Kayan nokta ayrıştırma işlemleri artık başarısız olmaz veya OverflowException'a neden olmaz
- InvalidAsynchronousStateException başka bir derlemeye taşındı
- Kötü oluşturulmuş UTF-8 byte dizilerini değiştirme Unicode yönergelerini izler
- TypeDescriptionProviderAttribute başka bir derlemeye taşındı
- ZipArchiveEntry artık tutarsız giriş boyutlarına sahip arşivleri işlemez
- FieldInfo.SetValue statik, yalnızca init alanları için özel durum oluşturur
- IEnumerable'ın alma yöntemine GroupCollection'ın <T> geçirmesi için belirsizliklerin hafifletilmaları gerekir
Sürümü şimdi rapor eden API 'Ler rapor ürünü ve dosya sürümü değil
.NET Core sürümlerini döndüren API 'lerin birçoğu, artık dosya sürümü yerine ürün sürümünü döndürüyor.
Açıklamayı Değiştir
.NET Core 2,2 ve önceki sürümlerde,,, Environment.Version RuntimeInformation.FrameworkDescription ve .NET Core derlemeleri için dosya özellikleri iletişim kutusu gibi yöntemler dosya sürümünü yansıtır. .NET Core 3,0 ile başlayarak ürün sürümünü yansıtmaktadır.
Aşağıdaki şekilde, Windows Gezgini dosya özellikleri iletişim kutusunda gösterildiği gibi .net Core 2,2 (solda) ve .net Core 3,0 (sağdaki) System.Runtime.dll derlemesi için sürüm bilgilerinde yer alan farklar gösterilmektedir.

Sunulan sürüm
3,0
Önerilen eylem
Yok. Bu değişiklik, sürüm algılamayı obtuse yerine sezgisel hale getirir.
Kategori
Core .NET kitaplıkları
Etkilenen API’ler
Özel EncoderFallbackBuffer örnekleri özyinelemeli olarak geri dönemez
Özel EncoderFallbackBuffer örnekler yinelemeli olarak geri dönemez. Uygulamasının uygulanması, EncoderFallbackBuffer.GetNextChar() hedef kodlamaya dönüştürülebilir bir karakter sırası ile sonuçlanmalıdır. Aksi takdirde, bir özel durum oluşur.
Açıklamayı Değiştir
Bir karakterden bayta dönüştürme işlemi sırasında, çalışma zamanı hatalı biçimlendirilmiş veya dönüştürülebilir UTF-16 dizileri algılar ve bu karakterleri EncoderFallbackBuffer.Fallback yöntemine sağlar. FallbackYöntemi, orijinal olmayan veriler için hangi karakterlerin yerine geçmeli olduğunu belirler ve bu karakterler bir döngüde çağırarak boşaltılır EncoderFallbackBuffer.GetNextChar .
Çalışma zamanı daha sonra bu değiştirme karakterlerini hedef kodlamaya dönüştürme girişiminde bulunur. Bu işlem başarılı olursa, çalışma zamanı özgün giriş dizesinde bıraktığınız yerden kodlamaya devam eder.
Daha önce, özel uygulamaları EncoderFallbackBuffer.GetNextChar() hedef kodlamaya dönüştürülebilir olmayan karakter dizileri döndürebilir. Değiştirilen karakterler hedef kodlamaya dönüştürülemiyorsa, çalışma zamanı EncoderFallbackBuffer.Fallback yöntemi değiştirme karakterleriyle bir kez çağırır ve EncoderFallbackBuffer.GetNextChar() yöntemin yeni bir değiştirme sırası döndürmesini bekliyor. Bu işlem, çalışma zamanı sonunda iyi biçimlendirilmiş, dönüştürülebilir bir değiştirme veya en fazla özyineleme sayısına ulaşılana kadar devam eder.
.NET Core 3,0 ile başlayarak, özel uygulamalarının EncoderFallbackBuffer.GetNextChar() hedef kodlamaya dönüştürülebilir karakter dizilerini döndürmesi gerekir. Değiştirilen karakterler hedef kodlamaya dönüştürülemiyorsa, bir oluşturulur ArgumentException . Çalışma zamanı artık örneğe özyinelemeli çağrılar yapmayacaktır EncoderFallbackBuffer .
Bu davranış yalnızca aşağıdaki koşulların üçü de karşılandığında geçerlidir:
- Çalışma zamanı, hatalı biçimlendirilmiş bir UTF-16 sırası veya hedef kodlamaya dönüştürülemeyen bir UTF-16 sırası algılar.
- Özel bir EncoderFallback belirtildi.
- Özel EncoderFallback bir hatalı oluşturulmuş veya DÖNÜŞTÜRÜLEBILIR UTF-16 sırasını değiştirme girişimleri.
Sunulan sürüm
3,0
Önerilen eylem
Çoğu geliştirici herhangi bir işlem yapması gerekli değildir.
Bir uygulama özel bir EncoderFallback ve sınıfı kullanıyorsa EncoderFallbackBuffer , uygulama EncoderFallbackBuffer.Fallback Fallback çalışma zamanı tarafından ilk kez çağrıldığında, uygulamanın, geri dönüş arabelleğini, hedef kodlamaya doğrudan dönüştürülebilir UTF-16 verileriyle doldurmasıdır.
Kategori
Core .NET kitaplıkları
Etkilenen API’ler
Kayan nokta biçimlendirme ve ayrıştırma davranışı değişti
Kayan nokta ayrıştırma ve biçimlendirme davranışı ( Double ve Single türlerine göre) artık IEEE uyumludur. Bu, .NET 'teki kayan nokta türleri davranışının diğer IEEE uyumlu dillerle eşleşmesini sağlar. Örneğin, double.Parse("SomeLiteral") her zaman C# ' nin ürettiği ile eşleşmelidir double x = SomeLiteral .
Açıklamayı Değiştir
.NET Core 2,2 ve önceki sürümlerinde, ve ile biçimlendirme ve,, Double.ToString Single.ToString ve ile Double.Parse ayrıştırma Double.TryParse , Single.Parse Single.TryParse IEEE uyumlu değildir. Sonuç olarak, bir değerin desteklenen herhangi bir standart veya özel biçim dizesiyle gidiş dönüş olacağını garanti etmek olanaksızdır. Bazı girişler için, biçimlendirilen bir değeri Ayrıştırma girişimi başarısız olabilir ve diğerleri için ayrıştırılmış değer özgün değere eşit değildir.
.NET Core 3,0 ile başlayarak, kayan nokta ayrıştırma ve biçimlendirme işlemleri IEEE 754 ile uyumludur.
Aşağıdaki tabloda, .NET Core 2,2 ve .NET Core 3,1 arasındaki iki kod parçacığı ve çıktının nasıl değiştiği gösterilmektedir.
| Kod parçacığı | .NET Core 2,2 çıkışı | .NET Core 3,1 çıkışı |
|---|---|---|
Console.WriteLine((-0.0).ToString()); |
0 | -0 |
var value = -3.123456789123456789;Console.WriteLine(value == double.Parse(value.ToString())); |
False |
True |
Daha fazla bilgi için bkz. .NET Core 3,0 blog gönderisine kayan nokta ayrıştırma ve biçimlendirme geliştirmeleri .
Sunulan sürüm
3.0
Önerilen eylem
.NET Core 3,0 blog gönderisine ilişkin kayan nokta ayrıştırma ve biçimlendirme geliştirmelerinden oluşan mevcut kodun olası etkisi , önceki davranışı sürdürmek istiyorsanız kodunuzda yapabileceğiniz bazı değişiklikler önerisinde bulunur.
- Biçimlendirme açısından bazı farklılıklar için, farklı bir biçim dizesi belirterek önceki davranışa denk olan davranışı sağlayabilirsiniz.
- Ayrıştırmayla ilgili farklılıklar için, önceki davranışa geri dönebilen bir mekanizma yoktur.
Kategori
Core .NET kitaplıkları
Etkilenen API’ler
Kayan nokta ayrıştırma işlemleri artık başarısız olmaz veya bir OverflowException oluşturmaz
Kayan nokta ayrıştırma yöntemleri, OverflowException false sayısal değeri Single veya kayan nokta türü aralığının dışında olan bir dizeyi ayrıştırdıklarında artık bir veya döndürmez Double .
Açıklamayı Değiştir
.NET Core 2,2 ve önceki sürümlerinde, Double.Parse ve yöntemleri kendi Single.Parse OverflowException türü aralığının dışında bir değer oluşturur. Double.TryParseVe Single.TryParse yöntemleri, false Aralık dışı sayısal değerlerin dize temsillerine yönelik döndürülür.
.NET Core 3,0 ile başlayarak,, Double.Parse , Double.TryParse Single.Parse ve Single.TryParse yöntemleri Aralık dışı sayısal dizeler ayrıştırılırken artık başarısız olmaz. Bunun yerine, Double ayrıştırma yöntemleri Double.PositiveInfinity , aşan değerler için döndürülür Double.MaxValue ve ' Double.NegativeInfinity den küçük değerler için geri döner Double.MinValue . Benzer şekilde, Single ayrıştırma yöntemleri Single.PositiveInfinity , aşan değerler için döndürülür Single.MaxValue ve ' Single.NegativeInfinity den küçük değerler için geri döner Single.MinValue .
Bu değişiklik, geliştirilmiş IEEE 754:2008 uyumluluğu için yapılmıştır.
Sunulan sürüm
3,0
Önerilen eylem
Bu değişiklik, kodunuzun ikisini de iki şekilde etkileyebilir:
Kodunuz, OverflowException bir taşma oluştuğunda yürütülmesi için işleyicisine bağlıdır. Bu durumda,
catchifadesini kaldırmalı ve gerekli koduIf, veya olup olmadığını test eden bir deyime yerleştirmeniz gerekir Double.IsInfinity Single.IsInfinitytrue.Kodunuz, kayan nokta değerlerinin değil olduğunu varsayar
Infinity. Bu durumda, ve ' ın kayan nokta değerlerini denetlemek için gerekli kodu eklemelisinizPositiveInfinityNegativeInfinity.
Kategori
Core .NET kitaplıkları
Etkilenen API’ler
InvalidAsynchronousStateException başka bir derlemeye taşındı
InvalidAsynchronousStateExceptionSınıf taşınmış.
Açıklamayı Değiştir
.NET Core 2,2 ve önceki sürümlerinde, InvalidAsynchronousStateException sınıfı System. ComponentModel. TypeConverter derlemesinde bulunur.
.NET Core 3,0 ile başlayarak, System. ComponentModel. ilkel derleme derlemesinde bulunur.
Sunulan sürüm
3,0
Önerilen eylem
Bu değişiklik yalnızca, InvalidAsynchronousStateException gibi bir yöntemi çağırarak Assembly.GetType ya da türün belirli bir derlemede olduğunu varsayan bir aşırı yüklemesi çağırarak yüklemesi için yansıma kullanan uygulamaları etkiler Activator.CreateInstance . Bu durumda, yöntem çağrısında başvurulan derlemeyi, türün yeni derleme konumunu yansıtacak şekilde güncelleştirin.
Kategori
Core .NET kitaplıkları
Etkilenen API’ler
Yok.
Hatalı biçimlendirilmiş UTF-8 bayt dizilerini değiştirme Unicode yönergelerine uyar
Sınıf, UTF8Encoding bir bayt karakter dönüştürme işlemi sırasında hatalı biçimlendirilmiş BIR UTF-8 bayt dizisiyle karşılaştığında, bu diziyi çıkış dizesindeki ' ' (U + FFFD DEĞIŞTIRME karakteri) karakteriyle değiştirir. .NET Core 3,0, .NET Core 'un önceki sürümlerinden ve .NET Framework dönüştürme işlemi sırasında bu değişikliği gerçekleştirmek için en iyi Unicode yöntemi izleyerek farklıdır.
Bu, yeni ve türleri dahil olmak üzere .NET genelinde UTF-8 işlemesini geliştirmenin daha büyük bir çaba parçasıdır System.Text.Unicode.Utf8 System.Text.Rune . UTF8EncodingTüre, Yeni tanıtılan türlerle tutarlı bir çıkış üretmesi için, bu tür gelişmiş hata işleme mekanizması verildi.
Açıklamayı Değiştir
.NET Core 3,0 ile başlayarak, baytları karakterlere dönüştürme sırasında UTF8Encoding sınıf, Unicode en iyi uygulamalarına göre karakter değiştirme işlemini gerçekleştirir. Kullanılan değiştirme mekanizması, U + FFFD Substitution alt bölümlerinin başlığı altında bulunan başlık Içindeki Unicode standart, sürüm 12,0, sec. 3,9 (PDF) ile açıklanmıştır.
Bu davranış yalnızca , giriş bayt dizisi hatalı biçimlendirilmiş UTF-8 verileri içerdiğinde geçerlidir. Ek olarak, UTF8Encoding örneği ile oluşturulmuşsa throwOnInvalidBytes: true , UTF8Encoding örnek U + FFFD yerini almak yerine geçersiz giriş üzerinde throw olmaya devam edecektir. Oluşturucu hakkında daha fazla bilgi için UTF8Encoding bkz UTF8Encoding(Boolean, Boolean) ..
Aşağıdaki tabloda, bu değişikliğin geçersiz bir 3 bayt girişi ile etkisi gösterilmektedir:
| Hatalı biçimlendirilmiş 3 baytlık giriş | .NET Core 3,0 öncesi çıkış | .NET Core 3,0 ile başlayan çıkış |
|---|---|---|
[ ED A0 90 ] |
[ FFFD FFFD ] (2 karakterlik çıkış) |
[ FFFD FFFD FFFD ] (3 karakterlik çıkış) |
3-char çıktısı, daha önce bağlantılı Unicode standart PDF 'nin 3-9 tablosuna göre tercih edilen çıktıdır.
Sunulan sürüm
3,0
Önerilen eylem
Geliştiricinin bölümünde herhangi bir eylem gerekmez.
Kategori
Core .NET kitaplıkları
Etkilenen API’ler
TypeDescriptionProviderAttribute başka bir derlemeye taşındı
TypeDescriptionProviderAttributeSınıf taşınmış.
Açıklamayı Değiştir
.NET Core 2,2 ve önceki sürümlerinde, TypeDescriptionProviderAttribute sınıfı System. ComponentModel. TypeConverter derlemesinde bulunur.
.NET Core 3,0 ile başlayarak, System. ObjectModel derlemesinde bulunur.
Sunulan sürüm
3,0
Önerilen eylem
Bu değişiklik yalnızca, TypeDescriptionProviderAttribute Assembly.GetType veya Activator.CreateInstance türü belirli bir derlemede olduğunu varsayan bir aşırı yüklemesi çağırarak, türü yüklemek için yansıma kullanan uygulamaları etkiler. Bu durumda, yöntem çağrısında başvurulan derleme, türün yeni derleme konumunu yansıtacak şekilde güncellenmelidir.
Kategori
Windows Forms
Etkilenen API’ler
Yok.
ZipArchiveEntry artık tutarsız giriş boyutlarına sahip arşivleri işliyor
ZIP arşivi, merkezi dizinde ve yerel üstbilgide Sıkıştırılmış boyut ve sıkıştırılmamış boyut listesini de listeler. Giriş verilerinin kendisi de boyutunu gösterir. .NET Core 2,2 ve önceki sürümlerinde, bu değerler hiçbir şekilde tutarlılık denetimi yapılmadı. .NET Core 3,0 ' den itibaren artık kullanıma sunulmuştur.
Açıklamayı Değiştir
.NET Core 2,2 ve önceki sürümlerinde, ZipArchiveEntry.Open() Yerel üst bilgi ZIP dosyasının orta üst bilgisiyle kabul etmese bile başarılı olur. Verilerin uzunluğu, merkezi Dizin/yerel üst bilgisinde listelenen sıkıştırılmamış dosya boyutunu aşsa bile, sıkıştırılan akışın sonuna ulaşılana kadar veriler açılır.
.NET Core 3,0 ' den itibaren ZipArchiveEntry.Open() Yöntem, yerel üst bilgi ve orta üstbilginin bir girdinin sıkıştırılmış ve sıkıştırılmamış boyutlarında kabul ettiğini denetler. Aksi takdirde, InvalidDataException Bu, arşiv 'in yerel üst bilgisi ve/veya ZIP dosyasının merkezi diziniyle uyumlu olmayan veri tanımlayıcısı liste boyutlarıdır. Bir girişi okurken, sıkıştırması açılmış veriler üst bilgide listelenen sıkıştırılmamış dosya boyutuna kesilir.
Bu değişiklik, ZipArchiveEntry verilerin boyutunu doğru bir şekilde temsil ettiğinden ve yalnızca o miktarda veri okunduğunuzdan emin olmak için yapılmıştır.
Sunulan sürüm
3.0
Önerilen eylem
Bu sorunları gösteren herhangi bir ZIP arşivini yeniden paketleyin.
Kategori
Core .NET kitaplıkları
Etkilenen API’ler
- ZipArchiveEntry.Open()
- ZipFileExtensions.ExtractToDirectory
- ZipFileExtensions.ExtractToFile
- ZipFile.ExtractToDirectory
FieldInfo. SetValue statik, yalnızca init alanları için özel durum oluşturur
.NET Core 3,0 ' den başlayarak, çağırarak statik, alan üzerinde bir değer ayarlamaya çalıştığınızda bir özel durum oluşturulur InitOnly System.Reflection.FieldInfo.SetValue .
Açıklamayı Değiştir
3,0 ' dan önceki .NET Core .NET Framework ve sürümlerinde, öğesini çağırarak, sabit bir statik alanın değerini, başlatıldıktan sonra (C# dilinde ReadOnly) ayarlayabilirsiniz System.Reflection.FieldInfo.SetValue . Ancak böyle bir alanın bu şekilde ayarlanması, hedef çerçeveye ve iyileştirme ayarlarına bağlı olarak öngörülemeyen davranışlara neden oldu.
.NET Core 3,0 ve sonraki sürümlerinde, SetValue bir statik, alanı çağırdığınızda bir InitOnly System.FieldAccessException özel durum oluşturulur.
İpucu
Bir InitOnly alan, yalnızca bildirildiği sırada veya kapsayan sınıf için oluşturucuda ayarlanabilir bir alandır. Diğer bir deyişle, başlatıldıktan sonra sabittir.
Sunulan sürüm
3,0
Önerilen eylem
InitOnlyStatik bir oluşturucuda statik, alanları başlatın. Bu hem dinamik hem de dinamik olmayan türler için geçerlidir.
Alternatif olarak, FieldAttributes.InitOnly alanından özniteliğini kaldırabilir ve ardından öğesini çağırabilirsiniz FieldInfo.SetValue .
Kategori
Core .NET kitaplıkları
Etkilenen API’ler
- FieldInfo.SetValue(Object, Object)
- FieldInfo.SetValue(Object, Object, BindingFlags, Binder, CultureInfo)
GroupCollection 'ı IEnumerable alan genişletme yöntemlerine geçirme, <T> Kesinleştirme gerektirir
Bir üzerinde alan bir genişletme yöntemi çağrılırken IEnumerable<T> GroupCollection , türü bir cast kullanarak kesinleştirmeniz gerekir.
Açıklamayı Değiştir
.NET Core 3,0 ' den başlayarak System.Text.RegularExpressions.GroupCollection , IEnumerable<KeyValuePair<String,Group>> onun da dahil olduğu diğer türlere ek olarak uygular IEnumerable<Group> . Bu, alan bir genişletme yöntemi çağrılırken belirsizliğe neden olur IEnumerable<T> . Örneğin, bu tür bir genişletme yöntemini bir örnek üzerinde çağırırsanız, GroupCollection Örneğin, Enumerable.Count Aşağıdaki derleyici hatasını görürsünüz:
CS1061: ' GroupCollection ', ' Count ' için bir tanım içermiyor ve ' GroupCollection ' türünde bir ilk bağımsız değişken kabul eden hiçbir erişilebilir genişletme metodu bulunamadı (bir using yönergeniz veya derleme başvurunuz eksik olabilir mi?)
Önceki .NET sürümlerinde hiçbir belirsizlik yoktu ve derleyici hatası yok.
Sunulan sürüm
3,0
Değişiklik nedeni
Bu, istemeden bir değişikliğeneden oldu. Bu bir süre içinde olduğu için, bu dosyayı döndürmeyi planlıyoruz. Ayrıca, bu tür bir değişikliğin kendisi de kırılırdı.
Önerilen eylem
GroupCollectionÖrnekler için, bir cast ile kabul eden genişletme yöntemlerine yapılan çağrıları belirsizliğini ortadan kaldırma IEnumerable<T> .
// Without a cast - causes CS1061.
match.Groups.Count(_ => true)
// With a disambiguating cast.
((IEnumerable<Group>)m.Groups).Count(_ => true);
Kategori
Core .NET kitaplıkları
Etkilenen API’ler
Kabul eden herhangi bir genişletme yöntemi IEnumerable<T> etkilenir. Örneğin:
- 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
- Yöntemlerin çoğu,
System.Linq.EnumerableÖrneğin, System.Linq.Enumerable.Count - System.Linq.ParallelEnumerable.AsParallel
- System.Linq.Queryable.AsQueryable
Şifreleme
- BEGIN TRUSTED CERTIFICATE söz dizimi artık Linux'ta desteklenmiyor
- ZarfCms varsayılan olarak AES-256 şifrelemesi
- RSAOpenSsl anahtar oluşturma için minimum boyut artırıldı
- .NET Core 3.0, OpenSSL 1.1.x yerine OpenSSL 1.0.x'i tercih eder
- CryptoStream.Dispose yalnızca yazarken son bloğu dönüştürer
Linux üzerinde kök sertifikalar için "GÜVENILEN SERTIFIKA Başlat" söz dizimi artık desteklenmiyor
Linux ve diğer UNIX benzeri sistemler (macOS değil) üzerindeki kök sertifikalar iki biçimde sunulabilir: standart BEGIN CERTIFICATE PEM üstbilgisi ve OpenSSL 'e özgü BEGIN TRUSTED CERTIFICATE PEM üstbilgisi. İkinci sözdizimi, .NET Core 'un sınıfıyla uyumluluk sorunlarına neden olan ek yapılandırmaya izin verir System.Security.Cryptography.X509Certificates.X509Chain . BEGIN TRUSTED CERTIFICATEkök sertifika içerikleri artık .NET Core 3,0 ' den başlayarak zincir altyapısı tarafından yüklenmez.
Açıklamayı Değiştir
Daha önce, hem BEGIN CERTIFICATE hem de BEGIN TRUSTED CERTIFICATE sözdizimleri kök güven listesini doldurmak için kullanılmıştır. BEGIN TRUSTED CERTIFICATESözdizimi kullanılmışsa ve dosyada ek seçenekler belirtilmişse, X509Chain zincir güvenine açıkça izin verilmediğini () bildirmiş olabilir X509ChainStatusFlags.ExplicitDistrust . Ancak, sertifika BEGIN CERTIFICATE daha önce yüklenmiş bir dosyadaki söz dizimi ile de belirtildiyse, zincir güvenine izin verilir.
.NET Core 3,0 ' den başlayarak BEGIN TRUSTED CERTIFICATE içerikler artık okunamaz. Sertifika aynı zamanda standart bir sözdizimi aracılığıyla belirtilmemişse BEGIN CERTIFICATE , X509Chain köke güvenilir () bağlı değildir X509ChainStatusFlags.UntrustedRoot .
Sunulan sürüm
3.0
Önerilen eylem
Çoğu uygulama bu değişiklikten etkilenmez, ancak izin sorunları nedeniyle kök sertifika kaynaklarını görmeyen uygulamalar, UntrustedRoot yükseltmeden sonra beklenmeyen hatalara neden olabilir.
Birçok Linux dağıtımı (veya distroı), kök sertifikaları iki konuma Yazar: tek bir sertifika dosya dizini ve tek bir dosya birleştirme. Bazı bilgisayarlarda, dosya BEGIN TRUSTED CERTIFICATE birleştirme standart söz dizimini kullandığında, tek başına sertifika dosya dizini söz dizimini kullanır BEGIN CERTIFICATE . Tüm özel kök sertifikalarının BEGIN CERTIFICATE bu konumlardan en az birine kadar eklendiğinden ve her iki konumdan de uygulamanız tarafından okunkullanılabildiğinden emin olun.
Tipik dizin /etc/SSL/certs/ ' dir ve tipik birleştirilmiş dosya /etc/SSL/CERT.exe pedolur. openssl version -d /Etc/SSL/ öğesinden farklı olabilecek platforma özgü kökü öğrenmek için komutunu kullanın. Örneğin, Ubuntu 18,04 ' de, Dizin /usr/lib/SSL/certs/ olur ve dosya /usr/lib/SSL/CERT.exeşeklinde olur. Ancak, /usr/lib/SSL/certs/ , /etc/SSL/certs/ ve /usr/lib/SSL/CERT.exe için bir oluşturmaksızın yok.
$ 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
Şifreleme
Etkilenen API’ler
EnvelopedCms varsayılan değer AES-256 şifrelemesi
Tarafından kullanılan varsayılan simetrik şifreleme algoritması, EnvelopedCms TripleDES 'TEN AES-256 ' e değişmiştir.
Açıklamayı Değiştir
Önceki sürümlerde, EnvelopedCms bir Oluşturucu aşırı yüklemesi aracılığıyla simetrik şifreleme algoritması belirtmeden verileri şifrelemek için kullanıldığında, veriler TripleDES/3DES/3DEA/DES3-engelleyebilecek algoritmayla şifrelenir.
.net Core 3,0 ile başlayarak ( System. Security. Cryptography. Pkcs NuGet paketinin sürümü 4.6.0 aracılığıyla), varsayılan algoritma, algoritma modernleştirme için AES-256 olarak değiştirilmiştir ve varsayılan seçeneklerin güvenliğini artırır. İleti alıcı sertifikasında bir (EC olmayan) Diffie-Hellman ortak anahtar varsa, CryptographicException temel platformdaki sınırlamalar nedeniyle şifreleme işlemi başarısız olabilir.
Aşağıdaki örnek kodda, veriler .NET Core 2,2 veya önceki sürümlerde çalışıyorsa üç aylık dönem ile şifrelenir. .NET Core 3,0 veya üzeri sürümlerde çalışıyorsa, AES-256 ile şifrelenir.
EnvelopedCms cms = new EnvelopedCms(content);
cms.Encrypt(recipient);
return cms.Encode();
Sunulan sürüm
3.0
Önerilen eylem
Değişiklik tarafından olumsuz bir şekilde etkilenmiyorsanız, EnvelopedCms Bu tür bir parametre içeren bir oluşturucuda, şifreleme algoritması tanımlayıcısını açıkça belirterek TripleDES şifrelemesini geri yükleyebilirsiniz AlgorithmIdentifier :
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
Şifreleme
Etkilenen API’ler
RSAOpenSsl anahtar üretimi için en düşük boyut arttı
Linux üzerinde yeni RSA anahtarları oluşturmak için en düşük boyut, 384 bitten 512 bit 'e artmıştır.
Açıklamayı Değiştir
.NET Core 3,0 ' den itibaren, LegalKeySizes Linux üzerinde, ve Linux ÜZERINDE RSA örneklerinde özelliği tarafından raporlanan en düşük yasal anahtar boyutu RSA.Create RSAOpenSsl 384 ' RSACryptoServiceProvider den 512 ' ye yükselmiştir.
Sonuç olarak, .NET Core 2,2 ve önceki sürümlerde, gibi bir yöntem çağrısı RSA.Create(384) başarılı olur. .NET Core 3,0 ve sonraki sürümlerinde Yöntem çağrısı, RSA.Create(384) boyutun çok küçük olduğunu belirten bir özel durum oluşturur.
Bu değişiklik, Linux üzerinde şifreleme işlemlerini gerçekleştiren OpenSSL, 1.0.2 ve 1.1.0 sürümleri arasında en düşük bir değer oluşturduğundan yapılmıştır. .NET Core 3,0, OpenSSL 1.1. x-1.0. x ' i tercih eder ve bildirilen en düşük sürüm, bu yeni daha yüksek bağımlılık sınırlamasını yansıtacak şekilde tetiklenir.
Sunulan sürüm
3.0
Önerilen eylem
Etkilenen API 'lerden herhangi birini çağırırsanız, oluşturulan anahtarların boyutunun en düşük sağlayıcıdan daha az olmadığından emin olun.
Not
384-bit RSA zaten güvenli değil (512 bit RSA olarak). NIST özel yayını 800-57 1. Bölüm düzeltme 4gibi modern öneriler, yeni oluşturulan anahtarlar için en düşük boyut olarak 2048 bit önerilir.
Kategori
Şifreleme
Etkilenen API’ler
.NET Core 3,0 OpenSSL 1.1. x ile OpenSSL 1.0. x tercih eder
Birden çok Linux dağıtımı arasında çalışarak Linux için .NET Core, hem OpenSSL 1.0. x hem de OpenSSL 1.1. x ' i destekleyebilir. .NET Core 2,1 ve .NET Core 2,2 önce 1.0. x için arama yapın ve ardından 1.1. x ' e geri dönün ve .NET Core 3,0, önce 1.1. x için arama yapar. Yeni şifreleme standartları desteği eklemek için bu değişiklik yapılmıştır.
Bu değişiklik, .NET Core 'da OpenSSL 'e özgü birlikte çalışma türleriyle platform birlikte çalışabilirliğine yönelik kitaplıkları veya uygulamaları etkileyebilir.
Açıklamayı Değiştir
.NET Core 2,2 ve önceki sürümlerinde, çalışma zamanı OpenSSL 1.0. x sürümünü 1.1. x üzerinden yüklemeyi tercih eder. Bu, IntPtr SafeHandle OpenSSL ile birlikte çalışabilirlik için ve türlerinin libşifre ile kullanıldığı anlamına gelir. bu nedenle. 1.0.0/libşifre. so. 1.0/libşifre. so. 10 tercihe göre.
.NET Core 3,0 ile başlayarak, çalışma zamanı OpenSSL 1.0. x üzerinden OpenSSL 1.1. x yüklemesini tercih eder, bu IntPtr nedenle SafeHandle OpenSSL ile birlikte çalışabilirlik için ve türleri libşifre ile birlikte kullanılır. bu nedenle. 1.1/libşifre. so. 11/libşifre. so. 1.1.0/libşifre. bu. Sonuç olarak, OpenSSL ile birlikte çalışan kitaplıklar ve uygulamalar, .NET Core 2,1 veya .NET Core 2,2 ' den yükseltirken .NET Core tarafından sunulan değerlerle uyumsuz işaretçilere sahip olabilir.
Sunulan sürüm
3.0
Önerilen eylem
OpenSSL ile doğrudan işlem yapan kitaplıklar ve uygulamaların, .NET Core çalışma zamanı ile aynı OpenSSL sürümünü kullandığından emin olmak için dikkatli olması gerekir.
IntPtr SafeHandle Doğrudan OpenSSL Ile .NET Core şifreleme türlerinden veya kullanan tüm kitaplıklar veya uygulamalar SafeEvpPKeyHandle.OpenSslVersion , işaretçilerin uyumlu olduğundan emin olmak için yeni özellik ile birlikte kullandıkları kitaplığın sürümünü karşılaştırmalıdır.
Kategori
Şifreleme
Etkilenen API’ler
- 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, son bloğu yalnızca yazma sırasında dönüştürür
CryptoStream.Disposeİşlemleri tamamlaması için kullanılan yöntemi, CryptoStream okurken artık son bloğu dönüştürmeyi denemeyebilir.
Açıklamayı Değiştir
Önceki .NET sürümlerinde, bir kullanıcı modunda kullanırken tamamlanmamış bir okuma gerçekleştirdiyse CryptoStream Read , Dispose Yöntem bir özel durum oluşturabilir (örneğin, doldurma ile AES kullanırken). Son blok dönüştürülürken, ancak veriler eksik olduğundan özel durum oluşturuldu.
.NET Core 3,0 ve sonraki sürümlerinde, Dispose artık okuma sırasında son bloğu dönüştürmeyi denemeyecek ve bu da tamamlanmamış okumaların yapılmasına izin vermez.
Değişiklik nedeni
Bu değişiklik, bir özel durum yakalamak zorunda kalmadan bir ağ işlemi iptal edildiğinde şifre akışından tamamlanmamış okuma işlemleri yapılmasını sağlar.
Sunulan sürüm
3.0
Önerilen eylem
Çoğu uygulama bu değişiklikten etkilenmemelidir.
Uygulamanız tamamlanmamış bir okuma durumunda daha önce bir özel durum yakalandığında, bu catch bloğu silebilirsiniz.
Uygulamanız, karma senaryolarda son bloğunun dönüştürülmesini kullanıyorsa, tüm akışın atılmadan önce okunduğunuzdan emin olmanız gerekebilir.
Kategori
Şifreleme
Etkilenen API’ler
Entity Framework Core
Entity Framework Core yeni değişiklikler
Genelleştirme
"C" yerel ayarı, sabit yerel ayara eşlenir
.NET Core 2,2 ve önceki sürümleri, "C" yerel ayarını en_US_POSIX yerel ayarıyla eşleyen varsayılan ıCU davranışına bağımlıdır. Büyük/küçük harfe duyarsız dize karşılaştırmaları desteklemediğinden en_US_POSIX yerel ayarı istenmeyen harmanlama davranışına sahiptir. Bazı Linux dağıtımları varsayılan yerel ayar olarak "C" yerel ayarını ayarlamadığı için, kullanıcılar beklenmeyen davranışlarla karşılaşıyor.
Açıklamayı Değiştir
.NET Core 3,0 ile başlayarak, "C" yerel ayar eşlemesi en_US_POSIX yerine sabit yerel ayarı kullanacak şekilde değiştirilmiştir. Sabit eşleme için "C" yerel ayarı Windows 'a tutarlılık için de uygulanır.
"C" öğesini en_US_POSIX kültür ile eşleme, müşteri karışıklığına neden oldu, çünkü en_US_POSIX büyük/küçük harfe duyarsız sıralama/arama dizesi işlemlerini desteklemez "C" yerel ayarı bazı Linux dışı bir yerel ayar olarak kullanıldığından, müşteriler bu işletim sistemlerinde bu istenmeyen davranışla karşılaşmıştır.
Sunulan sürüm
3.0
Önerilen eylem
Bu değişikliğin farkından daha fazla hiçbir şey yok. Bu değişiklik yalnızca "C" yerel ayar eşlemesini kullanan uygulamaları etkiler.
Kategori
Genelleştirme
Etkilenen API’ler
Tüm harmanlama ve kültür API 'Leri bu değişiklikten etkilenir.
MSBuild
Kaynak bildirimi dosya adı değişikliği
.NET Core 3,0 ' den başlayarak, MSBuild varsayılan durumda kaynak dosyaları için farklı bir bildirim dosyası adı oluşturur.
Sunulan sürüm
3,0
Açıklamayı Değiştir
.NET Core 3,0 ' den önce LogicalName ManifestResourceName DependentUpon Proje dosyasındaki bir öğe için bir, veya meta veri belirtilmemişse, EmbeddedResource MSBuild, düzende bir bildirim dosyası adı oluşturdu <RootNamespace>.<ResourceFilePathFromProjectRoot>.resources . RootNamespaceProje dosyasında tanımlanmamışsa, varsayılan olarak proje adı olur. Örneğin, kök proje dizininde Form1. resx adlı bir kaynak dosyası için oluşturulan bildirim adı Myprojem. Form1. resourcesidi.
.NET Core 3,0 ' den itibaren, bir kaynak dosyası aynı ada sahip bir kaynak dosya (örneğin, Form1. resx ve Form1.cs) ile birlikte bulunuyorsa MSBuild, kaynak dosyasındaki tür bilgilerini kullanarak bildirim dosyası adını oluşturur <Namespace>.<ClassName>.resources . Ad alanı ve sınıf adı, birlikte bulunan kaynak dosyadaki ilk türden ayıklanır. Örneğin, Form1.cs adlı bir kaynak dosyayla birlikte bulunan Form1. resx adlı bir kaynak dosyası Için üretilen bildirim adı MyNamespace. Form1. resources' dir. Önemli şey, dosya adının ilk bölümünün .NET Core 'un önceki sürümleriyle ( MyProjectyerineMyNamespace ) farklı olmasıdır.
Not
LogicalName ManifestResourceName DependentUpon Proje dosyasındaki bir öğe üzerinde, veya meta veriler belirtilmişse, EmbeddedResource Bu değişiklik bu kaynak dosyasını etkilemez.
Bu son değişiklik, EmbeddedResourceUseDependentUponConvention özelliğin .NET Core projelerine eklenmesiyle birlikte sunulmuştur. Varsayılan olarak, kaynak dosyaları .NET Core proje dosyasında açık olarak listelenmez, bu nedenle DependentUpon oluşturulan . resources dosyasının adını belirtmek için meta verileri yoktur. , EmbeddedResourceUseDependentUponConvention true Varsayılan olan olarak ayarlandığında, MSBuild, birlikte bulunan bir kaynak dosyayı arar ve bu dosyadan bir ad alanı ve sınıf adı ayıklar. EmbeddedResourceUseDependentUponConventionOlarak ayarlarsanız false , MSBuild, bildirim adını, RootNamespace ve göreli dosya yolunu birleştiren önceki davranışa göre oluşturur.
Önerilen eylem
Çoğu durumda, geliştiricinin bölümünde herhangi bir eylem gerekmez ve uygulamanız çalışmaya devam etmelidir. Ancak, bu değişiklik uygulamanızı kopararsa şunlardan birini yapabilirsiniz:
Kodunuzu, yeni bildirim adını beklediği şekilde değiştirin.
Yeni adlandırma kuralını,
EmbeddedResourceUseDependentUponConventionproje dosyanızda olarak ayarlayarak geri çevirinfalse.<PropertyGroup> <EmbeddedResourceUseDependentUponConvention>false</EmbeddedResourceUseDependentUponConvention> </PropertyGroup>
Kategori
MSBuild
Etkilenen API’ler
Yok
Ağ
HttpRequestMessage.Version varsayılan değeri 1.1 olarak değiştirildi
Özelliğin System.Net.Http.HttpRequestMessage.Version varsayılan değeri 2,0'dan 1,1'e değiştirildi.
Sürüm tanıtıldı
3,0
Açıklamayı değiştir
.NET Core 1.0 ile 2.0 arasında, System.Net.Http.HttpRequestMessage.Version özelliğin varsayılan değeri 1.1'dir. .NET Core 2.1 ile başlayarak 2.1 olarak değiştirildi.
.NET Core 3.0 ile başlayarak, System.Net.Http.HttpRequestMessage.Version özellik tarafından döndürülen varsayılan sürüm numarası bir kez daha 1.1'dir.
Önerilen eylem
Varsayılan değeri 2.0 olarak System.Net.Http.HttpRequestMessage.Version döndüren özellik bağlıysa kodunuzu güncelleştirin.
Kategori
Ağ
Etkilenen API’ler
Visual Basic
Microsoft. VisualBasic. sabitleri. Vbyeni satır artık kullanılmıyor
Microsoft.VisualBasic.Constants.vbNewLineSabit, .NET Core 3,0 ' den itibaren [ eski ] olarak işaretlendi.
Sunulan sürüm
3,0
Açıklamayı Değiştir
.NET Core 3,0 ile başlayarak, eski öznitelik Microsoft.VisualBasic.Constants.vbNewLine sabitine uygulandı. Constant kullanımı bir derleyici uyarısı oluşturur. .NET Core 'un .NET Framework ve önceki sürümlerinde, eski olarak işaretlenmemiştir.
Bu değişiklik, çok platformlu geliştirme için bir dil olarak Visual Basic desteklemek üzere yapılmıştır. vbNewLineSabit, \r\n Windows 'ta yeni satır karakteri dizisi ile eşdeğerdir. UNIX tabanlı sistemlerde, yeni satır karakteri \n .
Önerilen eylem
İçin kullanılmayan öznitelik iletisi vbNewLine aşağıdaki öneriyi içerir:
Bir satır başı ve satır besleme için kullanın vbCrLf . Geçerli platformun yeni satır için kullanın Environment.NewLine .
Kategori
Visual Basic