.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

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.

.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.WelcomePage
  • Microsoft.AspNetCore.DiagnosticsViewPage.Views.AttributeValue
  • Microsoft.AspNetCore.DiagnosticsViewPage.Views.BaseView
  • Microsoft.AspNetCore.DiagnosticsViewPage.Views.HelperResult
  • Microsoft.AspNetCore.Mvc.Formatters.Xml.ProblemDetails21Wrapper
  • Microsoft.AspNetCore.Mvc.Formatters.Xml.ValidationProblemDetails21Wrapper
  • Microsoft.AspNetCore.Mvc.Razor.Compilation.ViewsFeatureProvider
  • Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageArgumentBinder
  • Microsoft.AspNetCore.Routing.IRouteValuesAddressMetadata
  • Microsoft.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.OutputFormatterCanWriteContext
  • Microsoft.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.FormCollectionModelBinder
  • Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FormFileModelBinder
  • Microsoft.AspNetCore.Mvc.ModelBinding.Binders.HeaderModelBinder
  • Microsoft.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.XmlDataContractSerializerInputFormatter
  • Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerInputFormatter(System.Boolean)
  • Microsoft.AspNetCore.Mvc.Formatters.XmlDataContractSerializerInputFormatter(MvcOptions)
  • Microsoft.AspNetCore.Mvc.Formatters.XmlSerializerInputFormatter
  • Microsoft.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.CookieDomain
  • Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.CookieName
  • Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.CookiePath
  • Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.RequireSsl
  • Microsoft.AspNetCore.Mvc.ApiBehaviorOptions.AllowInferringBindingSourceForCollectionTypesAsFromQuery
  • Microsoft.AspNetCore.Mvc.ApiBehaviorOptions.SuppressUseValidationProblemDetailsForInvalidModelStateResponses
  • Microsoft.AspNetCore.Mvc.CookieTempDataProviderOptions.CookieName
  • Microsoft.AspNetCore.Mvc.CookieTempDataProviderOptions.Domain
  • Microsoft.AspNetCore.Mvc.CookieTempDataProviderOptions.Path
  • Microsoft.AspNetCore.Mvc.DataAnnotations.MvcDataAnnotationsLocalizationOptions.AllowDataAnnotationsLocalizationForEnumDisplayAttributes
  • Microsoft.AspNetCore.Mvc.Formatters.Xml.MvcXmlOptions.AllowRfc7807CompliantProblemDetailsFormat
  • Microsoft.AspNetCore.Mvc.MvcOptions.AllowBindingHeaderValuesToNonStringModelTypes
  • Microsoft.AspNetCore.Mvc.MvcOptions.AllowCombiningAuthorizeFilters
  • Microsoft.AspNetCore.Mvc.MvcOptions.AllowShortCircuitingValidationWhenNoValidatorsArePresent
  • Microsoft.AspNetCore.Mvc.MvcOptions.AllowValidatingTopLevelNodes
  • Microsoft.AspNetCore.Mvc.MvcOptions.InputFormatterExceptionPolicy
  • Microsoft.AspNetCore.Mvc.MvcOptions.SuppressBindingUndefinedValueToEnumType
  • Microsoft.AspNetCore.Mvc.MvcViewOptions.AllowRenderingMaxLengthAttribute
  • Microsoft.AspNetCore.Mvc.MvcViewOptions.SuppressTempDataAttributePrefix
  • Microsoft.AspNetCore.Mvc.RazorPages.RazorPagesOptions.AllowAreas
  • Microsoft.AspNetCore.Mvc.RazorPages.RazorPagesOptions.AllowDefaultHandlingForOptionsRequests
  • Microsoft.AspNetCore.Mvc.RazorPages.RazorPagesOptions.AllowMappingHeadRequestsToGetHandler

Yöntemler


"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 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ı.

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.Internal
  • Microsoft.AspNetCore.Builder.Internal
  • Microsoft.AspNetCore.DataProtection.Cng.Internal
  • Microsoft.AspNetCore.DataProtection.Internal
  • Microsoft.AspNetCore.Hosting.Internal
  • Microsoft.AspNetCore.Http.Internal
  • Microsoft.AspNetCore.Mvc.Core.Infrastructure
  • Microsoft.AspNetCore.Mvc.Core.Internal
  • Microsoft.AspNetCore.Mvc.Cors.Internal
  • Microsoft.AspNetCore.Mvc.DataAnnotations.Internal
  • Microsoft.AspNetCore.Mvc.Formatters.Internal
  • Microsoft.AspNetCore.Mvc.Formatters.Json.Internal
  • Microsoft.AspNetCore.Mvc.Formatters.Xml.Internal
  • Microsoft.AspNetCore.Mvc.Internal
  • Microsoft.AspNetCore.Mvc.ModelBinding.Internal
  • Microsoft.AspNetCore.Mvc.Razor.Internal
  • Microsoft.AspNetCore.Mvc.RazorPages.Internal
  • Microsoft.AspNetCore.Mvc.TagHelpers.Internal
  • Microsoft.AspNetCore.Mvc.ViewFeatures.Internal
  • Microsoft.AspNetCore.Rewrite.Internal
  • Microsoft.AspNetCore.Routing.Internal
  • Microsoft.AspNetCore.Server.Kestrel.Core.Adapter.Internal
  • Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
  • Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure
  • Microsoft.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ış.

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 .

Geçiş kılavuzunabakın.

Kategori

ASP.NET Core

Etkilenen API’ler


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

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:

Kategori

ASP.NET Core

Etkilenen API’ler


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 .

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.

Bunun yerine bir başvuru ekleyin Microsoft.AspNetCore.Authorization.Policy ya da kullanın AddAuthorizationCore .

Kategori

ASP.NET Core

Etkilenen API’ler

Microsoft.Extensions.DependencyInjection.AuthorizationServiceCollectionExtensions.AddAuthorization(IServiceCollection, Action<AuthorizationOptions>)


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.

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 .

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.

Ö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.

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.

Uygulamanız veya kitaplığınız tarafından kullanılan türleri kopyalayın.

Kategori

ASP.NET Core

Etkilenen API’ler


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.

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.

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:

https://github.com/dotnet/aspnetcore/blob/5cb615fcbe8559e49042e93394008077e30454c0/src/Templating/src/Microsoft.DotNet.Web.ProjectTemplates/content/EmptyWeb-CSharp/Program.cs#L20-L22

ASP.NET Core 3,0:

https://github.com/dotnet/aspnetcore/blob/b1ca2c1155da3920f0df5108b9fedbe82efaa11c/src/ProjectTemplates/Web.ProjectTemplates/content/EmptyWeb-CSharp/Program.cs#L19-L24

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.

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.

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:

  • UseHttpsRedirection UseHsts Projenizin yöntemine ve öğesinden gelen çağrıları kaldırın Startup.Configure ve uygulamayı yeniden dağıtın.

  • web.config dosyanızda, ASPNETCORE_HTTPS_PORT ortam 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ır ASPNETCORE_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.

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ı):

Yeni türler:

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


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.

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.

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.

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 case switch bildirimde 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.Body
  • IHttpSendFileFeature.SendFileAsync
  • IHttpBufferingFeature.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.

IHttpResponseBodyFeatureDaha önce, veya kullandığınızı kullanın IHttpResponseFeature.Body IHttpSendFileFeature IHttpBufferingFeature .

Kategori

ASP.NET Core

Etkilenen API’ler


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.

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.

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.

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ı.

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() .

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.

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

SignInManager<TUser>


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, IdentityUIFrameworkVersion proje 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.

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.

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] .

  • 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ı.

Treyler ile ilgili genişletme yöntemlerini kullanarak HttpRequest treyleri erişin.

Kategori

ASP.NET Core

Etkilenen API’ler

HttpRequest.Headers


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.Abstractions kitaplıkta kullanılabilir.
  • ListenOptions.NoDelayÖzellik kullanılabilir.

Yeni davranış

  • Arabirim, kitaplıkta IConnectionListener Microsoft.AspNetCore.Connections.Abstractions en ç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 ( LibuvTransportOptions ve SocketTransportOptions ) kullanılabilir.
  • SchedulingMode artık kullanılamıyor.

Değişiklik nedeni

ASP.NET Core 3,0, "pubternal" API 'Lerinden uzağa taşındı.

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ı.

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.

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 .

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.SuppressAsyncSuffixInActionNames false Startup.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.

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.

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.

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.Internal
  • Microsoft.AspNetCore.Mvc.DataAnnotations.Internal
  • Microsoft.AspNetCore.Mvc.Formatters.Internal
  • Microsoft.AspNetCore.Mvc.Formatters.Json.Internal
  • Microsoft.AspNetCore.Mvc.Formatters.Xml.Internal
  • Microsoft.AspNetCore.Mvc.Internal
  • Microsoft.AspNetCore.Mvc.ModelBinding.Internal
  • Microsoft.AspNetCore.Mvc.Razor.Internal
  • Microsoft.AspNetCore.Mvc.RazorPages.Internal
  • Microsoft.AspNetCore.Mvc.TagHelpers.Internal
  • Microsoft.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.

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.

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.FileProviders Artık MvcRazorRuntimeCompilationOptions.FileProviders
  • RazorViewEngineOptions.AdditionalCompilationReferences Artık MvcRazorRuntimeCompilationOptions.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.

Razor dosyalarının çalışma zamanı derlemesini veya yeniden derlemesini gerektiren uygulamalar aşağıdaki adımları almalıdır:

  1. Pakete bir başvuru ekleyin Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation .

  2. Startup.ConfigureServicesİçin bir çağrı içerecek şekilde projenin metodunu güncelleştirin AddRazorRuntimeCompilation . Ö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.

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


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.

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:
  • 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.

Ç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.

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.

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.

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


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.

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.

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


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.

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


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.

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.

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ı

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.

Ürün sürümü bilgilerinde fark

Sunulan sürüm

3,0

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

Ç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

.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

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, catch ifadesini kaldırmalı ve gerekli kodu If , veya olup olmadığını test eden bir deyime yerleştirmeniz gerekir Double.IsInfinity Single.IsInfinity true .

  • Kodunuz, kayan nokta değerlerinin değil olduğunu varsayar Infinity . Bu durumda, ve ' ın kayan nokta değerlerini denetlemek için gerekli kodu eklemelisiniz PositiveInfinity NegativeInfinity .

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

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

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

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

Bu sorunları gösteren herhangi bir ZIP arşivini yeniden paketleyin.

Kategori

Core .NET kitaplıkları

Etkilenen API’ler


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

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


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ı.

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:


Şifreleme

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

Ç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

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

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

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


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

Ç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

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.

Ç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ı, EmbeddedResourceUseDependentUponConvention proje dosyanızda olarak ayarlayarak geri çevirin false .

    <PropertyGroup>
      <EmbeddedResourceUseDependentUponConvention>false</EmbeddedResourceUseDependentUponConvention>
    </PropertyGroup>
    

Kategori

MSBuild

Etkilenen API’ler

Yok


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.

Varsayılan değeri 2.0 olarak System.Net.Http.HttpRequestMessage.Version döndüren özellik bağlıysa kodunuzu güncelleştirin.

Kategori

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 .

İç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

Etkilenen API’ler