Kompatibilitástörő változások a .NET Core 3.0-ban
Ha a .NET Core, ASP.NET Core vagy EF Core 3.0-s verziójára migrál, a cikkben felsorolt kompatibilitástörő változások hatással lehetnek az alkalmazásra.
ASP.NET Core
- Elavult antiforgery, CORS, Diagnostics, MVC és Routing API-k el lettek távolítva
- "Pubternal" API-k el lettek távolítva
- Hitelesítés: Google+ elavulás
- Hitelesítés: A HttpContext.Authentication tulajdonság el lett távolítva
- Hitelesítés: A Newtonsoft.Json-típusok lecserélve
- Hitelesítés: OAuthHandler ExchangeCodeAsync-aláírás módosult
- Engedélyezés: Az AddAuthorization túlterhelése átkerült egy másik szerelvényre
- Engedélyezés: Az IAllowAnonymous el lett távolítva az AuthorizationFilterContext.Filters fájlból
- Engedélyezés: Az IAuthorizationPolicyProvider-implementációk új módszert igényelnek
- Gyorsítótárazás: A CompactOnMemoryPressure tulajdonság el lett távolítva
- Gyorsítótárazás: A Microsoft.Extensions.Caching.SqlServer új SqlClient-csomagot használ
- Gyorsítótárazás: A ResponseCaching "pubternal" típusai belsőre változtak
- Adatvédelem: A DataProtection.Blobs új Azure Storage API-kat használ
- Üzemeltetés: Az AspNetCoreModule V1 el lett távolítva a Windows Hosting Bundle csomagból
- Üzemeltetés: Az általános gazdagép korlátozza az indítási konstruktorinjektálást
- Üzemeltetés: A HTTPS-átirányítás engedélyezve van a folyamaton kívüli IIS-alkalmazásokhoz
- Üzemeltetés: Az IHostingEnvironment és az IApplicationLifetime típusok lecserélve
- Üzemeltetés: Az ObjectPoolProvider el lett távolítva a WebHostBuilder-függőségekből
- HTTP: DefaultHttpContext bővíthetőség eltávolítva
- HTTP: A HeaderNames mezők statikus írásvédettre változtak
- HTTP: Válasz törzsinfrastruktúra változásai
- HTTP: Néhány cookie SameSite alapértelmezett értéke módosult
- HTTP: A szinkron I/O alapértelmezés szerint le van tiltva
- Identitás: Az AddDefaultUI metódus túlterhelése el lett távolítva
- Identitás: A felhasználói felület bootstrap-verziójának módosítása
- Identitás: A SignInAsync kivételt jelez a hitelesítés nélküli identitás esetében
- Identitás: A SignInManager konstruktor új paramétert fogad el
- Identitás: A felhasználói felület statikus webes objektumok funkciót használ
- Kestrel: Csatlakozás ion adapterek el lettek távolítva
- Kestrel: Üres HTTPS-szerelvény el lett távolítva
- Kestrel: Új gyűjteménybe áthelyezett pótkocsifejlécek kérése
- Kestrel: Transzport absztrakciós réteg változásai
- Honosítás: Elavultként megjelölt API-k
- Naplózás: Belső hibakeresési naplóosztály
- MVC: A vezérlőművelet aszinkron utótagja el lett távolítva
- MVC: JsonResult a Microsoft.AspNetCore.Mvc.Core-ba költözött
- MVC: Az előre összeállított eszköz elavult
- MVC: A típusok belsőre változtak
- MVC: A webes API-kompatibilitási shim el lett távolítva
- Razor: RazorTemplateEngine API el lett távolítva
- Razor: Futtatókörnyezet fordítása csomagba helyezve
- Munkamenet állapota: Elavult API-k el lettek távolítva
- Megosztott keretrendszer: A szerelvény eltávolítása a Microsoft.AspNetCore.App
- Megosztott keretrendszer: Microsoft.AspNetCore.All el lett távolítva
- SignalR: HandshakeProtocol.SuccessHandshakeData lecserélve
- SignalR: Hub Csatlakozás ion metódusok el lettek távolítva
- SignalR: Hub Csatlakozás ionContext konstruktorok módosultak
- SignalR: JavaScript-ügyfélcsomag nevének módosítása
- SignalR: Elavult API-k
- SLA-k: Elavultként megjelölt SpaServices és NodeServices
- SLA-k: SpaServices és NodeServices konzolnaplózó alapértelmezett módosítása
- Cél keretrendszer: .NET-keretrendszer nem támogatott
Elavult antiforgery, CORS, Diagnostics, MVC és Routing API-k el lettek távolítva
A ASP.NET Core 2.2 elavult tagjai és kompatibilitási kapcsolói el lettek távolítva.
Bevezetett verzió
3,0
A változás oka
Az API-felület fejlesztése idővel.
Javasolt művelet
Miközben a .NET Core 2.2-t célozza, kövesse az elavult buildüzenetekben található útmutatást az új API-k bevezetéséhez.
Kategória
ASP.NET Core
Érintett API-k
A következő típusok és tagok elavultként lettek megjelölve ASP.NET Core 2.1 és 2.2 esetében:
Típusok
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
Konstruktorok
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.Binders.CollectionModelBinder'1 (IModelBinder)
- Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ComplexTypeModelBinder(IDictionary'2)
Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DictionaryModelBinder`2(IModelBinder,IModelBinder)
Microsoft.AspNetCore.Mvc.ModelBinding.Binders.DoubleModelBinder(System.Globalization.NumberStyles)
Microsoft.AspNetCore.Mvc.ModelBinding.Binders.FloatModelBinder(System.Globalization.NumberStyles)
Microsoft.AspNetCore.Mvc.ModelBinding.Binders.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.TagHelpers.ImageTagHelper(IHostingEnvironment,IMemoryCache,HtmlEncoder,IUrlHelperFactory)
Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper(IHostingEnvironment,IMemoryCache,HtmlEncoder,JavaScriptEncoder,IUrlHelperFactory)
Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper(IHostingEnvironment,IMemoryCache,HtmlEncoder,JavaScriptEncoder,IUrlHelperFactory)
Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.RazorPageAdapter(RazorPageBase)
Tulajdonságok
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
Módszerek
Microsoft.AspNetCore.Mvc.LocalRedirectResult.ExecuteResult(ActionContext)
Microsoft.AspNetCore.Mvc.RedirectResult.ExecuteResult(ActionContext)
Microsoft.AspNetCore.Mvc.RedirectToActionResult.ExecuteResult(ActionContext)
Microsoft.AspNetCore.Mvc.RedirectToPageResult.ExecuteResult(ActionContext)
Microsoft.AspNetCore.Mvc.RedirectToRouteResult.ExecuteResult(ActionContext)
Microsoft.AspNetCore.Mvc.ModelBinding.ParameterBinder.BindModelAsync(ActionContext,IValueProvider,ParameterDescriptor)
- Microsoft.AspNetCore.Mvc.ModelBinding.ParameterBinder.BindModelAsync(ActionContext,IValueProvider,ParameterDescriptor,Object)
"Pubternal" API-k el lettek távolítva
A ASP.NET Core nyilvános API-felületének jobb fenntartása érdekében a névterek legtöbb típusa *.Internal
(más néven "pubternal" API-k) valóban belsővé váltak. Az ilyen névterek tagjai soha nem voltak nyilvános elérésű API-kként támogatva. Az API-k kisebb kiadásokban is megtörhetnek, és gyakran így is tették. Ezektől az API-któl függő kód megszakad, amikor ASP.NET Core 3.0-ra frissít.
További információ: dotnet/aspnetcore#4932 és dotnet/aspnetcore#11312.
Bevezetett verzió
3,0
Régi viselkedés
Az érintett API-k a hozzáférés-módosítóval vannak megjelölve public
, és névterekben *.Internal
léteznek.
Új viselkedés
Az érintett API-k a belső hozzáférés-módosítóval vannak megjelölve, és a továbbiakban nem használhatók a szerelvényen kívüli kódok.
A változás oka
Ezeknek "pubternal" az API-knak az útmutatása az volt, hogy:
- Értesítés nélkül változhat.
- Nem tartoznak a .NET-szabályzatok hatálya alá, hogy megakadályozzák a kompatibilitástörő változásokat.
Az API-k public
elhagyása (még a *.Internal
névterekben is) zavaró volt az ügyfelek számára.
Javasolt művelet
Hagyja abba ezeknek az API-knak a "pubternal" használatát. Ha kérdése van a másodlagos API-kkal kapcsolatban, nyisson meg egy problémát a dotnet/aspnetcore adattárban.
Vegyük például az alábbi HTTP-kérések pufferelési kódját egy ASP.NET Core 2.2-projektben. A EnableRewind
bővítménymetódus a Microsoft.AspNetCore.Http.Internal
névtérben létezik.
HttpContext.Request.EnableRewind();
Egy ASP.NET Core 3.0-projektben cserélje le a EnableRewind
hívást a EnableBuffering
bővítménymetódus hívására. A kérések pufferelése a korábbiakhoz hasonlóan működik. EnableBuffering
meghívja a now API-t internal
.
HttpContext.Request.EnableBuffering();
Kategória
ASP.NET Core
Érintett API-k
A névtérnévben szegmenst Microsoft.AspNetCore.*
Internal
tartalmazó összes API és Microsoft.Extensions.*
névtér. Példa:
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
Hitelesítés: A Google+ elavult és lecserélt
A Google már 2019. január 28-tól leállítja a Google+ bejelentkezést az alkalmazásokhoz.
Módosítás leírása
ASP.NET 4.x és ASP.NET Core a Google+ bejelentkezési API-kkal hitelesíti a Google-fiók felhasználóit a webalkalmazásokban. Az érintett NuGet-csomagok a Microsoft.AspNetCore.Authentication.Google for ASP.NET Core és a Microsoft.Owin.Security.Google for Microsoft.Owin
ASP.NET Web Forms és MVC.
A Google helyettesítő API-k más adatforrást és formátumot használnak. Az alábbiakban ismertetett kockázatcsökkentések és megoldások figyelembe veszik a strukturális változásokat. Az alkalmazásoknak ellenőrizniük kell, hogy az adatok továbbra is megfelelnek-e a követelményeknek. A nevek, e-mail-címek, profilhivatkozások és profilképek például a korábbiaktól eltérő értékeket adhatnak meg.
Bevezetett verzió
Minden verzió. Ez a módosítás kívül esik ASP.NET Core-ra.
Javasolt művelet
Owin ASP.NET Webes űrlapokkal és MVC-vel
A 3.1.0-s és újabb verziók esetében Microsoft.Owin
az alábbiakban egy ideiglenes kockázatcsökkentést ismertetünk. Az alkalmazásoknak végre kell hajtaniuk a tesztelést a kockázatcsökkentéssel az adatformátum változásainak ellenőrzéséhez. A 4.0.1-es verziót javítással tervezik kiadni Microsoft.Owin
. A korábbi verziót használó alkalmazásoknak a 4.0.1-es verzióra kell frissülnie.
ASP.NET Core 1.x
Az Owin ASP.NET Webes űrlapokkal és MVC-vel kapcsolatos kockázatcsökkentés ASP.NET Core 1.x-hez igazítható. A NuGet-csomag javításai nem tervezettek, mert az 1.x elérte az élettartam végét.
ASP.NET Core 2.x
A 2.x verzió esetén Microsoft.AspNetCore.Authentication.Google
cserélje le a meglévő hívását AddGoogle
Startup.ConfigureServices
a következő kódra:
.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");
});
A február 2.1-i és 2.2-i javítások az előző újrakonfigurálást beépítették új alapértelmezettként. Az ASP.NET Core 2.0-hoz nem tervezünk javítást , mivel az az élettartam végéhez ért.
ASP.NET Core 3.0
A ASP.NET Core 2.x-hez megadott kockázatcsökkentés a Core 3.0 ASP.NET is használható. A jövőbeli 3.0-s előzetes verziókban a Microsoft.AspNetCore.Authentication.Google
csomag eltávolítható. A felhasználókat ehelyett a rendszer átirányítja Microsoft.AspNetCore.Authentication.OpenIdConnect
. Az alábbi kód bemutatja, hogyan lehet lecserélni a AddOpenIdConnect
következőre AddGoogle
Startup.ConfigureServices
: . Ez a csere ASP.NET Core 2.0-s és újabb verziójával használható, és szükség szerint ASP.NET Core 1.x-hez is alkalmazható.
.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();
Kategória
ASP.NET Core
Érintett API-k
Microsoft.AspNetCore.Authentication.Google
Hitelesítés: A HttpContext.Authentication tulajdonság el lett távolítva
Az elavult Authentication
tulajdonság HttpContext
el lett távolítva.
Módosítás leírása
A dotnet/aspnetcore#6504 részeként az elavult Authentication
tulajdonság HttpContext
el lett távolítva. A Authentication
tulajdonság 2.0 óta elavult. Megjelent egy migrálási útmutató a kód áttelepítéséhez az elavult tulajdonság használatával az új helyettesítő API-kba. A régi ASP.NET Core 1.x hitelesítési veremhez kapcsolódó fennmaradó fel nem használt osztályok/API-k el lettek távolítva a véglegesítési dotnet/aspnetcore@d7a7c65.
További információért lásd: dotnet/aspnetcore#6533.
Bevezetett verzió
3,0
A változás oka
ASP.NET Core 1.0 API-kat bővítménymetelyek váltották fel a Microsoft.AspNetCore.Authentication.AuthenticationHttpContextExtensions.
Javasolt művelet
Tekintse meg a migrálási útmutatót.
Kategória
ASP.NET Core
Érintett API-k
- Microsoft.AspNetCore.Http.Authentication.AuthenticateInfo
- Microsoft.AspNetCore.Http.Authentication.AuthenticationManager
- Microsoft.AspNetCore.Http.Authentication.AuthenticationProperties
- Microsoft.AspNetCore.Http.Features.Authentication.AuthenticateContext
- Microsoft.AspNetCore.Http.Features.Authentication.ChallengeBehavior
- Microsoft.AspNetCore.Http.Features.Authentication.ChallengeContext
- Microsoft.AspNetCore.Http.Features.Authentication.DescribeSchemesContext
- Microsoft.AspNetCore.Http.Features.Authentication.IAuthenticationHandler
- Microsoft.AspNetCore.Http.Features.Authentication.IHttpAuthenticationFeature.Handler
- Microsoft.AspNetCore.Http.Features.Authentication.SignInContext
- Microsoft.AspNetCore.Http.Features.Authentication.SignOutContext
- Microsoft.AspNetCore.Http.HttpContext.Authentication
Hitelesítés: A Newtonsoft.Json-típusok lecserélve
A ASP.NET Core 3.0-ban Newtonsoft.Json
a hitelesítési API-kban használt típusok típusok lettek lecserélve típusokra System.Text.Json
. A következő esetek kivételével a hitelesítési csomagok alapszintű használata nem változik:
- Az OAuth-szolgáltatókból származó osztályok, például az aspnet-contribtól származó osztályok.
- Speciális jogcímmanipulációs implementációk.
További információ: dotnet/aspnetcore#7105. További információért lásd: dotnet/aspnetcore#7289.
Bevezetett verzió
3,0
Javasolt művelet
A származtatott OAuth-implementációk esetében a leggyakoribb változás az, hogy a felülbírálást az itt látható módon kell lecserélni JObject.Parse
JsonDocument.Parse
.CreateTicketAsync
JsonDocument
implementálja.IDisposable
Az alábbi lista az ismert változásokat vázolja fel:
- ClaimAction.Run(JObject, ClaimsIdentity, String) lesz
ClaimAction.Run(JsonElement userData, ClaimsIdentity identity, string issuer)
. Az összes származtatott implementációClaimAction
hasonló hatással van. - ClaimActionCollectionMapExtensions.MapCustomJson(ClaimActionCollection, String, Func<JObject,String>) Lesz
MapCustomJson(this ClaimActionCollection collection, string claimType, Func<JsonElement, string> resolver)
- ClaimActionCollectionMapExtensions.MapCustomJson(ClaimActionCollection, String, String, Func<JObject,String>) Lesz
MapCustomJson(this ClaimActionCollection collection, string claimType, string valueType, Func<JsonElement, string> resolver)
- OAuthCreatingTicketContext eltávolított egy régi konstruktort, a másikat
JObject
JsonElement
pedig a . AUser
tulajdonság ésRunClaimActions
a metódus frissült, hogy megfeleljen. - Success(JObject) most a helyett egy típusparamétert
JsonDocument
JObject
fogad el. AResponse
tulajdonság frissült a megfelelőre.OAuthTokenResponse
most már eldobható, és el kell dobni.OAuthHandler
A származtatott OAuth-implementációknakExchangeCodeAsync
nem kell megsemmisítenie az vagyOAuthTokenResponse
.JsonDocument
- UserInformationReceivedContext.User áttért a helyről
JObject
a másikraJsonDocument
. - TwitterCreatingTicketContext.User áttért a helyről
JObject
a másikraJsonElement
. - A TwitterHandler.CreateTicketAsync(ClaimsIdentity,AuthenticationProperties,AccessToken,JObject) utolsó paramétere a következőre
JObject
JsonElement
módosult: . A helyettesítési módszer a következő TwitterHandler.CreateTicketAsync(ClaimsIdentity, AuthenticationProperties, AccessToken, JsonElement): .
Kategória
ASP.NET Core
Érintett API-k
- Microsoft.AspNetCore.Authentication.Facebook
- Microsoft.AspNetCore.Authentication.Google
- Microsoft.AspNetCore.Authentication.MicrosoftAccount
- Microsoft.AspNetCore.Authentication.OAuth
- Microsoft.AspNetCore.Authentication.OpenIdConnect
- Microsoft.AspNetCore.Authentication.Twitter
Hitelesítés: OAuthHandler ExchangeCodeAsync-aláírás módosult
A ASP.NET Core 3.0-ban az aláírás a OAuthHandler.ExchangeCodeAsync
következőről módosult:
protected virtual System.Threading.Tasks.Task<Microsoft.AspNetCore.Authentication.OAuth.OAuthTokenResponse> ExchangeCodeAsync(string code, string redirectUri) { throw null; }
Címzett:
protected virtual System.Threading.Tasks.Task<Microsoft.AspNetCore.Authentication.OAuth.OAuthTokenResponse> ExchangeCodeAsync(Microsoft.AspNetCore.Authentication.OAuth.OAuthCodeExchangeContext context) { throw null; }
Bevezetett verzió
3,0
Régi viselkedés
Az code
és redirectUri
a sztringek külön argumentumként lettek átadva.
Új viselkedés
Code
és RedirectUri
olyan tulajdonságok OAuthCodeExchangeContext
, amelyek a OAuthCodeExchangeContext
konstruktoron keresztül állíthatók be. Az új OAuthCodeExchangeContext
típus az egyetlen argumentum, amely a következőnek lett átadva OAuthHandler.ExchangeCodeAsync
:
A változás oka
Ez a módosítás lehetővé teszi, hogy a további paramétereket nem feltörhető módon adja meg. Nincs szükség új ExchangeCodeAsync
túlterhelések létrehozására.
Javasolt művelet
Hozzon létre egy OAuthCodeExchangeContext
megfelelő code
és redirectUri
értékekkel rendelkezőt. Meg kell adni egy AuthenticationProperties példányt. Ez az egyetlen OAuthCodeExchangeContext
példány több argumentum helyett átadható OAuthHandler.ExchangeCodeAsync
.
Kategória
ASP.NET Core
Érintett API-k
OAuthHandler<TOptions>.ExchangeCodeAsync(String, String)
Engedélyezés: Az AddAuthorization túlterhelése átkerült egy másik szerelvényre
A korábban Microsoft.AspNetCore.Authorization
használt alapvető AddAuthorization
metódusokat átnevezték a következőreAddAuthorizationCore
: . A régi AddAuthorization
metódusok továbbra is léteznek, de inkább a Microsoft.AspNetCore.Authorization.Policy
szerelvényben vannak. A mindkét módszert használó alkalmazásoknak nincs hatása. Vegye figyelembe, hogy Microsoft.AspNetCore.Authorization.Policy
a megosztott keretrendszerben most már nem önálló csomagként, hanem a megosztott keretrendszerben tárgyaltak szerint: A szerelvényeket eltávolították a Microsoft.AspNetCore.App.
Bevezetett verzió
3,0
Régi viselkedés
AddAuthorization
metódusok léteztek a következőben: Microsoft.AspNetCore.Authorization
.
Új viselkedés
AddAuthorization
metódusok léteznek a következőben Microsoft.AspNetCore.Authorization.Policy
: . AddAuthorizationCore
a régi metódusok új neve.
A változás oka
AddAuthorization
jobb metódusnév az engedélyezéshez szükséges összes általános szolgáltatás hozzáadásához.
Javasolt művelet
Adjon hozzá egy hivatkozást, Microsoft.AspNetCore.Authorization.Policy
vagy használja AddAuthorizationCore
helyette.
Kategória
ASP.NET Core
Érintett API-k
Engedélyezés: Az IAllowAnonymous el lett távolítva az AuthorizationFilterContext.Filters fájlból
A Core 3.0 ASP.NET esetében az MVC nem ad hozzá AllowAnonymousFilters attribútumokata vezérlők és a műveleti metódusok által felderített [AllowAnonymous] attribútumokhoz. Ezt a módosítást helyileg kezelik a származékok AuthorizeAttributeesetében, de ez egy kompatibilitástörő változás az implementációk és IAuthorizationFilter az implementációk esetébenIAsyncAuthorizationFilter. A [TypeFilter] attribútumba burkolt implementációk népszerűek és támogatottak az erősen gépelt, attribútumalapú engedélyezés elérésére, ha konfigurációra és függőséginjektálásra is szükség van.
Bevezetett verzió
3,0
Régi viselkedés
IAllowAnonymous az AuthorizationFilterContext.Filters gyűjteményben jelent meg . A felület jelenlétének tesztelése érvényes módszer volt a szűrő felülbírálásához vagy letiltásához az egyes vezérlő metódusokon.
Új viselkedés
IAllowAnonymous
már nem jelenik meg a AuthorizationFilterContext.Filters
gyűjteményben. IAsyncAuthorizationFilter
a régi viselkedéstől függő implementációk általában időszakos HTTP 401 jogosulatlan vagy HTTP 403 Tiltott válaszokat okoznak.
A változás oka
Új végpont-útválasztási stratégia jelent meg a ASP.NET Core 3.0-ban.
Javasolt művelet
Keresse meg a végpont metaadatait IAllowAnonymous
. Példa:
var endpoint = context.HttpContext.GetEndpoint();
if (endpoint?.Metadata?.GetMetadata<IAllowAnonymous>() != null)
{
}
Erre a technikára egy példa látható ebben a HasAllowAnonymous metódusban.
Kategória
ASP.NET Core
Érintett API-k
Egyik sem
Engedélyezés: Az IAuthorizationPolicyProvider-implementációk új módszert igényelnek
A ASP.NET Core 3.0-ban egy új GetFallbackPolicyAsync
metódus lett hozzáadva.IAuthorizationPolicyProvider
Ezt a tartalék szabályzatot az engedélyezési köztes szoftver használja, ha nincs megadva szabályzat.
További információ: dotnet/aspnetcore#9759.
Bevezetett verzió
3,0
Régi viselkedés
Az implementációkhoz IAuthorizationPolicyProvider
nem volt szükség metódusra GetFallbackPolicyAsync
.
Új viselkedés
A végrehajtáshoz IAuthorizationPolicyProvider
szükség van egy metódusra GetFallbackPolicyAsync
.
A változás oka
Új metódusra volt szükség ahhoz, hogy az új AuthorizationMiddleware
használhassa, ha nincs megadva szabályzat.
Javasolt művelet
Adja hozzá a GetFallbackPolicyAsync
metódust a implementációkhoz IAuthorizationPolicyProvider
.
Kategória
ASP.NET Core
Érintett API-k
Microsoft.AspNetCore.Authorization.IAuthorizationPolicyProvider
Gyorsítótárazás: A CompactOnMemoryPressure tulajdonság el lett távolítva
A ASP.NET Core 3.0 kiadás eltávolította az elavult MemoryCacheOptions API-kat.
Módosítás leírása
Ez a változás az aspnet/Caching#221 nyomon követése. További információért lásd: dotnet/extensions#1062.
Bevezetett verzió
3,0
Régi viselkedés
MemoryCacheOptions.CompactOnMemoryPressure
tulajdonság elérhető volt.
Új viselkedés
A MemoryCacheOptions.CompactOnMemoryPressure
tulajdonság el lett távolítva.
A változás oka
A gyorsítótár automatikus tömörítése problémákat okozott. A váratlan viselkedés elkerülése érdekében a gyorsítótárat csak szükség esetén kell tömöríteni.
Javasolt művelet
A gyorsítótár tömörítéséhez szükség esetén lekérte és MemoryCache
meghívhatja Compact
a gyorsítótárat.
Kategória
ASP.NET Core
Érintett API-k
MemoryCacheOptions.CompactOnMemoryPressure
Gyorsítótárazás: A Microsoft.Extensions.Caching.SqlServer új SqlClient-csomagot használ
A Microsoft.Extensions.Caching.SqlServer
csomag csomag helyett System.Data.SqlClient
az új Microsoft.Data.SqlClient
csomagot fogja használni. Ez a változás enyhe viselkedésbeli törést okozhat. További információ: Az új Microsoft.Data.SqlClient bemutatása.
Bevezetett verzió
3,0
Régi viselkedés
A Microsoft.Extensions.Caching.SqlServer
csomag használta a System.Data.SqlClient
csomagot.
Új viselkedés
Microsoft.Extensions.Caching.SqlServer
most már használja a Microsoft.Data.SqlClient
csomagot.
A változás oka
Microsoft.Data.SqlClient
egy új csomag, amely a System.Data.SqlClient
. Mostantól minden új funkció itt fog működni.
Javasolt művelet
Az ügyfeleknek nem kell aggódniuk a kompatibilitástörő változás miatt, kivéve, ha a Microsoft.Extensions.Caching.SqlServer
csomag által visszaadott és típusokra System.Data.SqlClient
öntött típusokat használták. Ha például valaki a régi Sql Csatlakozás ion típust adja DbConnection
meg, akkor az új Microsoft.Data.SqlClient.SqlConnection
típusra kell módosítania a leadást.
Kategória
ASP.NET Core
Érintett API-k
Egyik sem
Gyorsítótárazás: A ResponseCaching "pubternal" típusai belsőre változtak
A ASP.NET Core 3.0-ban a ResponseCaching
"pubternal" típusok módosultak internal
.
Emellett a metódus részeként a szolgáltatások alapértelmezett implementációi IResponseCachingPolicyProvider
IResponseCachingKeyProvider
és a továbbiakban nem lesznek hozzáadva a AddResponseCaching
szolgáltatásokhoz.
Módosítás leírása
A ASP.NET Core-ban a "pubternal" típusúak deklarálva public
vannak, de a névtér utótagja .Internal
. Bár ezek a típusok nyilvánosak, nem rendelkeznek támogatási szabályzattal, és kompatibilitástörő változásoknak vannak kitéve. Sajnos az ilyen típusok véletlen használata gyakori volt, ami a projektek kompatibilitástörő változásait eredményezte, és korlátozta a keretrendszer fenntartásának képességét.
Bevezetett verzió
3,0
Régi viselkedés
Ezek a típusok nyilvánosan láthatóak voltak, de nem támogatottak.
Új viselkedés
Ezek a típusok most már internal
.
A változás oka
A internal
hatókör jobban tükrözi a nem támogatott szabályzatot.
Javasolt művelet
Az alkalmazás vagy tár által használt másolási típusok.
Kategória
ASP.NET Core
Érintett API-k
Microsoft.AspNetCore.ResponseCaching.Internal.CachedResponse
Microsoft.AspNetCore.ResponseCaching.Internal.CachedVaryByRules
Microsoft.AspNetCore.ResponseCaching.Internal.IResponseCache
Microsoft.AspNetCore.ResponseCaching.Internal.IResponseCacheEntry
Microsoft.AspNetCore.ResponseCaching.Internal.IResponseCachingKeyProvider
Microsoft.AspNetCore.ResponseCaching.Internal.IResponseCachingPolicyProvider
Microsoft.AspNetCore.ResponseCaching.Internal.MemoryResponseCache
Microsoft.AspNetCore.ResponseCaching.Internal.ResponseCachingContext
Microsoft.AspNetCore.ResponseCaching.Internal.ResponseCachingKeyProvider
Microsoft.AspNetCore.ResponseCaching.Internal.ResponseCachingPolicyProvider
- Microsoft.AspNetCore.ResponseCaching.ResponseCachingMiddleware.ResponseCachingMiddleware(RequestDelegate, IOptions<ResponseCachingOptions>, ILoggerFactory, IResponseCachingPolicyProvider, IResponseCache, IResponseCachingKeyProvider)
Adatvédelem: A DataProtection.Blobs új Azure Storage API-kat használ
Azure.Extensions.AspNetCore.DataProtection.Blobs
az Azure Storage-kódtáraktól függ. Ezek a kódtárak átnevezték a szerelvényeket, csomagokat és névtereket. A ASP.NET Core 3.0-tól Azure.Extensions.AspNetCore.DataProtection.Blobs
kezdve az új Azure.Storage.
előtagú API-kat és csomagokat használja.
Az Azure Storage API-kkal kapcsolatos kérdésekért használja a következőt https://github.com/Azure/azure-storage-net: . A probléma megvitatásához lásd: dotnet/aspnetcore#19570.
Bevezetett verzió
3,0
Régi viselkedés
A csomag a WindowsAzure.Storage
NuGet-csomagra hivatkozott.
A csomag a Microsoft.Azure.Storage.Blob
NuGet-csomagra hivatkozik.
Új viselkedés
A csomag a Azure.Storage.Blob
NuGet-csomagra hivatkozik.
A változás oka
Ez a módosítás lehetővé teszi Azure.Extensions.AspNetCore.DataProtection.Blobs
a javasolt Azure Storage-csomagokra való migrálást.
Javasolt művelet
Ha továbbra is a régebbi Azure Storage API-kat kell használnia a ASP.NET Core 3.0-val, adjon hozzá közvetlen függőséget a WindowsAzure.Storage vagy a Microsoft.Azure.Storage csomaghoz. Ez a csomag az új Azure.Storage
API-k mellett telepíthető.
A frissítés sok esetben csak az using
új névterek használatára vonatkozó utasítások módosításával jár:
- 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;
Kategória
ASP.NET Core
Érintett API-k
Egyik sem
Üzemeltetés: Az AspNetCoreModule V1 el lett távolítva a Windows Hosting Bundle csomagból
A ASP.NET Core 3.0-tól kezdve a Windows Hosting Bundle nem tartalmazza az AspNetCoreModule (ANCM) V1-et.
Az ANCM V2 visszamenőlegesen kompatibilis az ANCM OutOfProcess szolgáltatással, és ASP.NET Core 3.0-alkalmazásokhoz ajánlott.
További információért lásd: dotnet/aspnetcore#7095.
Bevezetett verzió
3,0
Régi viselkedés
Az ANCM V1 a Windows hosting csomag része.
Új viselkedés
Az ANCM V1 nem része a Windows Hosting Bundle csomagnak.
A változás oka
Az ANCM V2 visszamenőlegesen kompatibilis az ANCM OutOfProcess szolgáltatással, és ASP.NET Core 3.0-alkalmazásokhoz ajánlott.
Javasolt művelet
Használja az ANCM V2-t ASP.NET Core 3.0-alkalmazásokkal.
Ha ancm V1 szükséges, akkor a ASP.NET Core 2.1 vagy 2.2 Windows Hosting Bundle használatával telepíthető.
Ez a módosítás megszakítja ASP.NET Core 3.0-alkalmazásokat, amelyek:
- Kifejezetten az ANCM V1 és a
<AspNetCoreModuleName>AspNetCoreModule</AspNetCoreModuleName>
. - Egyéni web.config fájllal rendelkezik.
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
Kategória
ASP.NET Core
Érintett API-k
Egyik sem
Üzemeltetés: Az általános gazdagép korlátozza az indítási konstruktorinjektálást
Az általános gazdagép csak az osztálykonstruktorinjektáláshoz Startup
támogatja az IHostEnvironment
, IWebHostEnvironment
és IConfiguration
. A használt WebHost
alkalmazások nem változnak.
Módosítás leírása
A Core 3.0 ASP.NET előtt konstruktorinjektálás használható az Startup
osztály konstruktorának tetszőleges típusaihoz. A ASP.NET Core 3.0-ban a webes verem vissza lett írva az általános gazdagéptárra. A módosítás a sablonok Program.cs fájljában látható:
ASP.NET Core 2.x:
ASP.NET Core 3.0:
Host
Egy függőséginjektáló (DI) tárolót használ az alkalmazás létrehozásához. WebHost
Két tárolót használ: egyet a gazdagéphez, egyet az alkalmazáshoz. Ennek eredményeképpen a konstruktor már nem támogatja az Startup
egyéni szolgáltatásinjektálást. Csak IHostEnvironment
, IWebHostEnvironment
és IConfiguration
beadható. Ez a módosítás megakadályozza az olyan DI-problémákat, mint például egy egyszeri szolgáltatás duplikált létrehozása.
Bevezetett verzió
3,0
A változás oka
Ez a változás a webes veremnek az általános gazdagéptárra való replatformálásának következménye.
Javasolt művelet
Szolgáltatások injektálása a Startup.Configure
metódus-aláírásba. Példa:
public void Configure(IApplicationBuilder app, IOptions<MyOptions> options)
Kategória
ASP.NET Core
Érintett API-k
Egyik sem
Üzemeltetés: A HTTPS-átirányítás engedélyezve van a folyamaton kívüli IIS-alkalmazásokhoz
A ASP.NET Core Modul (ANCM) 13.0.19218.0-s verziója az IIS folyamaton kívüli üzemeltetéséhez lehetővé teszi a meglévő HTTPS-átirányítási funkciót ASP.NET Core 3.0 és 2.2 alkalmazásokhoz.
További információért lásd: dotnet/AspNetCore#15243.
Bevezetett verzió
3,0
Régi viselkedés
A ASP.NET Core 2.1 projektsablon először a HTTPS köztes szoftveres metódusok ( például UseHttpsRedirection és UseHsts. A HTTPS-átirányítás engedélyezéséhez hozzá kellett adni a konfigurációt, mivel a fejlesztés alatt álló alkalmazások nem használják az alapértelmezett 443-as portot. A HTTP Strict Transport Security (HSTS) csak akkor aktív, ha a kérés már HTTPS-t használ. A Localhost alapértelmezés szerint ki van hagyva.
Új viselkedés
A ASP.NET Core 3.0-ban továbbfejlesztettük az IIS HTTPS-forgatókönyvet. A fejlesztéssel egy alkalmazás felderítheti a kiszolgáló HTTPS-portját, és UseHttpsRedirection
alapértelmezés szerint dolgozhat. A folyamaton belüli összetevő a szolgáltatással IServerAddresses
végzett portfelderítést, amely csak ASP.NET Core 3.0-alkalmazásokat érinti, mert a folyamatközi kódtár verziószámozott a keretrendszerrel. A folyamaton kívüli összetevő úgy módosult, hogy automatikusan hozzáadja a környezeti változót ASPNETCORE_HTTPS_PORT
. Ez a változás ASP.NET Core 2.2- és 3.0-alkalmazásokat is érintett, mivel a folyamaton kívüli összetevő globálisan meg van osztva. ASP.NET Core 2.1-es alkalmazásokra nincs hatással, mert alapértelmezés szerint az ANCM korábbi verzióját használják.
Az előző viselkedés ASP.NET Core 3.0.1 és 3.1.0 Preview 3 verzióban módosult, hogy megfordítsa a ASP.NET Core 2.x viselkedésváltozását. Ezek a módosítások csak a folyamaton kívüli IIS-alkalmazásokat érintik.
A fentiekben leírtaknak megfelelően a ASP.NET Core 3.0.0 telepítésekor a köztes szoftver is aktiválva lett ASP.NET UseHttpsRedirection
Core 2.x-alkalmazásokban. A Core 3.0.1 és a 3.1.0 Preview 3 ASP.NET AZ ANCM-ben módosítás történt, így a telepítésük már nem érinti ASP.NET Core 2.x-alkalmazásokat. A ASPNETCORE_HTTPS_PORT
ASP.NET Core 3.0.0-s verziójában az ANCM által kitöltött környezeti változót a ASP.NET Core 3.0.1 és 3.1.0 Előzetes verzióban módosítottuk ASPNETCORE_ANCM_HTTPS_PORT
. UseHttpsRedirection
ezen kiadásokban is frissült, hogy megértse az új és a régi változókat is. ASP.NET Core 2.x nem frissül. Ennek eredményeképpen visszaáll az alapértelmezett letiltás korábbi viselkedésére.
A változás oka
Továbbfejlesztett ASP.NET Core 3.0 funkció.
Javasolt művelet
Nincs szükség műveletre, ha azt szeretné, hogy minden ügyfél HTTPS-t használjon. Ha engedélyezni szeretné, hogy egyes ügyfelek HTTP-t használhassanak, hajtsa végre az alábbi lépések egyikét:
Távolítsa el a projekt
Startup.Configure
metódusára irányuló ésUseHsts
onnan érkező hívásokatUseHttpsRedirection
, és telepítse újra az alkalmazást.A web.config fájlban állítsa a
ASPNETCORE_HTTPS_PORT
környezeti változót üres sztringre. Ez a változás közvetlenül a kiszolgálón fordulhat elő az alkalmazás ismételt üzembe helyezése nélkül. Példa:<aspNetCore processPath="dotnet" arguments=".\WebApplication3.dll" stdoutLogEnabled="false" stdoutLogFile="\\?\%home%\LogFiles\stdout" > <environmentVariables> <environmentVariable name="ASPNETCORE_HTTPS_PORT" value="" /> </environmentVariables> </aspNetCore>
UseHttpsRedirection
továbbra is a következő lehet:
- Manuálisan aktiválva a ASP.NET Core 2.x-ben úgy, hogy a környezeti változót a
ASPNETCORE_HTTPS_PORT
megfelelő portszámra állítja (a legtöbb éles forgatókönyvben 443). - ASP.NET Core 3.x-ben inaktiválva üres sztringértékkel definiálva
ASPNETCORE_ANCM_HTTPS_PORT
. Ez az érték ugyanúgy van beállítva, mint az előző példábanASPNETCORE_HTTPS_PORT
.
A ASP.NET Core 3.0.0-s alkalmazásokat futtató gépeknek telepíteniük kell a ASP.NET Core 3.0.1 futtatókörnyezetet a ASP.NET Core 3.1.0 Preview 3 ANCM telepítése előtt. Ez biztosítja, hogy UseHttpsRedirection
a ASP.NET Core 3.0-alkalmazások továbbra is a várt módon működjenek.
A Azure-alkalmazás Service-ben az ANCM a futtatókörnyezettől eltérő ütemezésben üzemel globális jellege miatt. Az ANCM üzembe helyezése az Azure-ban történt ezekkel a módosításokkal ASP.NET Core 3.0.1 és 3.1.0 telepítése után.
Kategória
ASP.NET Core
Érintett API-k
HttpsPolicyBuilderExtensions.UseHttpsRedirection(IApplicationBuilder)
Üzemeltetés: Elavult és lecserélt IHostingEnvironment és IApplicationLifetime típusok
Új típusok lettek bevezetve a meglévők IHostingEnvironment
és IApplicationLifetime
a típusok helyére.
Bevezetett verzió
3,0
Régi viselkedés
Két különböző IHostingEnvironment
és IApplicationLifetime
típusú volt az és Microsoft.AspNetCore.Hosting
a Microsoft.Extensions.Hosting
.
Új viselkedés
A régi típusok elavultként lettek megjelölve, és új típusok lettek lecserélve.
A változás oka
Amikor Microsoft.Extensions.Hosting
a ASP.NET Core 2.1-ben bevezették, bizonyos típusokat a rendszer a IHostingEnvironment
IApplicationLifetime
következőből Microsoft.AspNetCore.Hosting
másolt ki. Egyes ASP.NET Core 3.0-s módosítások miatt az alkalmazások a névtereket és Microsoft.AspNetCore.Hosting
a Microsoft.Extensions.Hosting
névtereket is tartalmazzák. Az ismétlődő típusok bármilyen használata "félreérthető hivatkozás" fordítóhibát okoz, ha mindkét névtérre hivatkozik.
Javasolt művelet
A régi típusok minden használatát lecserélte az újonnan bevezetett típusokra az alábbiak szerint:
Elavult típusok (figyelmeztetés):
- Microsoft.Extensions.Hosting.IHostingEnvironment
- Microsoft.AspNetCore.Hosting.IHostingEnvironment
- Microsoft.Extensions.Hosting.IApplicationLifetime
- Microsoft.AspNetCore.Hosting.IApplicationLifetime
- Microsoft.Extensions.Hosting.EnvironmentName
- Microsoft.AspNetCore.Hosting.EnvironmentName
Új típusok:
- Microsoft.Extensions.Hosting.IHostEnvironment
Microsoft.AspNetCore.Hosting.IWebHostEnvironment : IHostEnvironment
- Microsoft.Extensions.Hosting.IHostApplicationLifetime
- Microsoft.Extensions.Hosting.Environments
Az új IHostEnvironment
IsDevelopment
és IsProduction
a bővítménymetelyek a Microsoft.Extensions.Hosting
névtérben találhatók. Előfordulhat, hogy ezt a névteret hozzá kell adni a projekthez.
Kategória
ASP.NET Core
Érintett API-k
- Microsoft.AspNetCore.Hosting.EnvironmentName
- Microsoft.AspNetCore.Hosting.IApplicationLifetime
- Microsoft.AspNetCore.Hosting.IHostingEnvironment
- Microsoft.Extensions.Hosting.EnvironmentName
- Microsoft.Extensions.Hosting.IApplicationLifetime
- Microsoft.Extensions.Hosting.IHostingEnvironment
Üzemeltetés: Az ObjectPoolProvider el lett távolítva a WebHostBuilder-függőségekből
Annak részeként, hogy a ASP.NET Core nagyobb fizetést biztosít a játékért, a rendszer eltávolította a ObjectPoolProvider
fő függőségi csoportból. A függőben lévő ObjectPoolProvider
egyes összetevők most maguk is hozzáadják őket.
További információért lásd: dotnet/aspnetcore#5944.
Bevezetett verzió
3,0
Régi viselkedés
WebHostBuilder
alapértelmezés szerint a DI-tárolóban.ObjectPoolProvider
Új viselkedés
WebHostBuilder
a DI-tárolóban alapértelmezés szerint nem biztosít ObjectPoolProvider
.
A változás oka
Ez a módosítás azért történt, hogy a ASP.NET Core több fizetést biztosítson a játékért.
Javasolt művelet
Ha az összetevő megköveteli ObjectPoolProvider
, azt hozzá kell adni a függőségeihez a IServiceCollection
segítségével.
Kategória
ASP.NET Core
Érintett API-k
Egyik sem
HTTP: DefaultHttpContext bővíthetőség eltávolítva
Az ASP.NET Core 3.0 teljesítménybeli fejlesztéseinek részeként a bővíthetőség el DefaultHttpContext
lett távolítva. Az osztály most már sealed
. További információ: dotnet/aspnetcore#6504.
Ha az egységtesztek használják Mock<DefaultHttpContext>
, használja Mock<HttpContext>
vagy new DefaultHttpContext()
helyette.
További információért lásd: dotnet/aspnetcore#6534.
Bevezetett verzió
3,0
Régi viselkedés
Az osztályok származhatnak a .-ból DefaultHttpContext
.
Új viselkedés
Az osztályok nem származhatnak a forrásból DefaultHttpContext
.
A változás oka
A bővíthetőség kezdetben lehetővé tette a HttpContext
készletezést, de szükségtelen összetettséget vezetett be, és akadályozta az egyéb optimalizálásokat.
Javasolt művelet
Ha az egységteszteken dolgozik Mock<DefaultHttpContext>
, kezdje el használni Mock<HttpContext>
.
Kategória
ASP.NET Core
Érintett API-k
Microsoft.AspNetCore.Http.DefaultHttpContext
HTTP: A HeaderNames állandók statikus írásvédettre változtak
A ASP.NET Core 3.0 5 előzetes verziójától Microsoft.Net.Http.Headers.HeaderNames kezdve a mezők a következőre const
static readonly
változtak: .
További információért lásd: dotnet/aspnetcore#9514.
Bevezetett verzió
3,0
Régi viselkedés
Ezek a mezők korábban .const
Új viselkedés
Ezek a mezők most már static readonly
.
A változás oka
A változás:
- Megakadályozza, hogy az értékek beágyazódhassanak a szerelvényhatárokba, és szükség esetén értékkorrekciókat is lehetővé tesz.
- Gyorsabb referencia-egyenlőségi ellenőrzéseket tesz lehetővé.
Javasolt művelet
Újrafordítás a 3.0-ra. Az alábbi mezőket használó forráskód már nem használható:
- Attribútumargumentumként
- Utasításként
case
switch
- Másik definiálásakor
const
A kompatibilitástörő változás megkerüléséhez váltson ön által definiált fejlécnév-állandókra vagy sztringkonstansokra.
Kategória
ASP.NET Core
Érintett API-k
Microsoft.Net.Http.Headers.HeaderNames
HTTP: Válasz törzsinfrastruktúra változásai
Módosult a HTTP-válasz törzsét tartalmazó infrastruktúra. Ha közvetlenül használja HttpResponse
, nem kell módosítania a kódokat. Olvassa el a további tudnivalókat, ha sortörést, cserét HttpResponse.Body
vagy hozzáférést keres HttpContext.Features
.
Bevezetett verzió
3,0
Régi viselkedés
A HTTP-válasz törzséhez három API volt társítva:
IHttpResponseFeature.Body
IHttpSendFileFeature.SendFileAsync
IHttpBufferingFeature.DisableResponseBuffering
Új viselkedés
Ha lecseréli a elemet HttpResponse.Body
, az a teljes IHttpResponseBodyFeature
helyére egy burkolót ad az adott stream körül, és StreamResponseBodyFeature
az összes várt API alapértelmezett implementációit biztosítja. Az eredeti stream visszaállítása visszaállítja ezt a módosítást.
A változás oka
A motiváció az, hogy a válasz törzs API-jait egyetlen új funkciófelületbe egyesítse.
Javasolt művelet
Használja IHttpResponseBodyFeature
a korábban használt IHttpResponseFeature.Body
, IHttpSendFileFeature
vagy IHttpBufferingFeature
.
Kategória
ASP.NET Core
Érintett API-k
- Microsoft.AspNetCore.Http.Features.IHttpBufferingFeature
- Microsoft.AspNetCore.Http.Features.IHttpResponseFeature.Body
- Microsoft.AspNetCore.Http.Features.IHttpSendFileFeature
HTTP: Néhány cookie SameSite alapértelmezett értéke Nincs értékre módosult
SameSite
a cookie-k egyik lehetősége, amely segíthet enyhíteni a helyek közötti kérelemhamisítási (CSRF-) támadásokat. A beállítás kezdeti bevezetésekor a rendszer inkonzisztens alapértelmezett értékeket használt a különböző ASP.NET Core API-kban. Az inkonzisztencia zavaros eredményeket eredményezett. A Core 3.0 ASP.NET ezek az alapértelmezett értékek jobban igazodnak egymáshoz. Ezt a funkciót összetevőnként kell választania.
Bevezetett verzió
3,0
Régi viselkedés
A hasonló ASP.NET Core API-k eltérő alapértelmezett SameSiteMode értékeket használtak. Példa az inkonzisztencia látható HttpResponse.Cookies.Append(String, String)
, és HttpResponse.Cookies.Append(String, String, CookieOptions)
, amely alapértelmezés szerint SameSiteMode.None
és SameSiteMode.Lax
, illetve.
Új viselkedés
Az összes érintett API alapértelmezés szerint a következő.SameSiteMode.None
A változás oka
Az alapértelmezett érték úgy módosult, hogy egy bejelentkezési funkciót hozzon SameSite
létre.
Javasolt művelet
Minden olyan összetevőnek, amely cookie-kat bocsát ki, el kell döntenie, hogy megfelelő-e SameSite
a forgatókönyveihez. Tekintse át az érintett API-k használatát, és szükség szerint konfigurálja SameSite
újra.
Kategória
ASP.NET Core
Érintett API-k
HTTP: A szinkron I/O le van tiltva minden kiszolgálón
A ASP.NET Core 3.0-tól kezdve a szinkron kiszolgálóműveletek alapértelmezés szerint le vannak tiltva.
Módosítás leírása
AllowSynchronousIO
az egyes kiszolgálókon olyan beállítás, amely engedélyezi vagy letiltja a szinkron IO API-kat, például HttpRequest.Body.Read
a , HttpResponse.Body.Write
és Stream.Flush
. Ezek az API-k már régóta a szálak éhezésének és az alkalmazások lefagyásának forrása. A ASP.NET Core 3.0 3. előzetes verziójától kezdve ezek a szinkron műveletek alapértelmezés szerint le vannak tiltva.
Érintett kiszolgálók:
- Kestrel
- HttpSys
- Folyamatban lévő IIS
- TestServer
A következőhöz hasonló hibák várhatók:
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.
Minden kiszolgáló rendelkezik egy AllowSynchronousIO
olyan beállítással, amely vezérli ezt a viselkedést, és az alapértelmezett érték most az false
összes kiszolgálón.
A viselkedés kérésenként felülbírált is lehet ideiglenes megoldásként. Példa:
var syncIOFeature = HttpContext.Features.Get<IHttpBodyControlFeature>();
if (syncIOFeature != null)
{
syncIOFeature.AllowSynchronousIO = true;
}
Ha problémát tapasztal egy TextWriter
vagy egy másik streamben, amely szinkron API-t Dispose
hív meg, hívja inkább az új DisposeAsync
API-t.
További információért lásd: dotnet/aspnetcore#7644.
Bevezetett verzió
3,0
Régi viselkedés
HttpRequest.Body.Read
, HttpResponse.Body.Write
és Stream.Flush
alapértelmezés szerint engedélyezve voltak.
Új viselkedés
Ezek a szinkron API-k alapértelmezés szerint nem engedélyezettek:
A következőhöz hasonló hibák várhatók:
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.
A változás oka
Ezek a szinkron API-k már régóta a szálak éhezésének és az alkalmazások lefagyásának forrása. A ASP.NET Core 3.0 3. előzetes verziójától kezdve a szinkron műveletek alapértelmezés szerint le vannak tiltva.
Javasolt művelet
Használja a metódusok aszinkron verzióit. A viselkedés kérésenként felülbírált is lehet ideiglenes megoldásként.
var syncIOFeature = HttpContext.Features.Get<IHttpBodyControlFeature>();
if (syncIOFeature != null)
{
syncIOFeature.AllowSynchronousIO = true;
}
Kategória
ASP.NET Core
Érintett API-k
Identitás: Az AddDefaultUI metódus túlterhelése el lett távolítva
A ASP.NET Core 3.0-tól kezdve az IdentityBuilderUIExtensions.AddDefaultUI(IdentityBuilder,UIFramework) metódus túlterhelése már nem létezik.
Bevezetett verzió
3,0
A változás oka
Ez a változás a statikus webes eszközök funkció bevezetésének eredménye.
Javasolt művelet
Hívás IdentityBuilderUIExtensions.AddDefaultUI(IdentityBuilder) a túlterhelés helyett, amely két argumentumot vesz igénybe. Ha a Bootstrap 3-at használja, adja hozzá a következő sort a projektfájl egyik <PropertyGroup>
eleméhez is:
<IdentityUIFrameworkVersion>Bootstrap3</IdentityUIFrameworkVersion>
Kategória
ASP.NET Core
Érintett API-k
IdentityBuilderUIExtensions.AddDefaultUI(IdentityBuilder,UIFramework)
Identitás: A felhasználói felület alapértelmezett Bootstrap-verziója módosult
A ASP.NET Core 3.0-tól kezdődően az identitás felhasználói felülete alapértelmezés szerint a Bootstrap 4-es verziójának használatát használja.
Bevezetett verzió
3,0
Régi viselkedés
A services.AddDefaultIdentity<IdentityUser>().AddDefaultUI();
metódushívás ugyanaz volt, mint a services.AddDefaultIdentity<IdentityUser>().AddDefaultUI(UIFramework.Bootstrap3);
Új viselkedés
A services.AddDefaultIdentity<IdentityUser>().AddDefaultUI();
metódushívás ugyanaz, mint a services.AddDefaultIdentity<IdentityUser>().AddDefaultUI(UIFramework.Bootstrap4);
A változás oka
A Bootstrap 4 ASP.NET Core 3.0-s időkeret alatt jelent meg.
Javasolt művelet
Ez a változás akkor érinti, ha az alapértelmezett identitáskezelő felületet használja, és hozzáadta az alábbi példában Startup.ConfigureServices
látható módon:
services.AddDefaultIdentity<IdentityUser>().AddDefaultUI();
Válasszon a következő lehetőségek közül:
Migrálja az alkalmazást a Bootstrap 4 használatára a migrálási útmutatójuk használatával.
Frissítés
Startup.ConfigureServices
a Bootstrap 3 használatának kényszerítéséhez. Példa:services.AddDefaultIdentity<IdentityUser>().AddDefaultUI(UIFramework.Bootstrap3);
Kategória
ASP.NET Core
Érintett API-k
Egyik sem
Identitás: A SignInAsync kivételt jelez a hitelesítés nélküli identitás esetében
Alapértelmezés szerint kivételt jelent az olyan tagok/ identitások esetében, SignInAsync
amelyekben IsAuthenticated
a rendszer szerepel false
.
Bevezetett verzió
3,0
Régi viselkedés
SignInAsync
elfogad minden tagot/ identitást, beleértve azokat az identitásokat is, amelyekben IsAuthenticated
az .false
Új viselkedés
Alapértelmezés szerint kivételt jelent az olyan tagok/ identitások esetében, SignInAsync
amelyekben IsAuthenticated
a rendszer szerepel false
. Van egy új jelző, amely letiltja ezt a viselkedést, de az alapértelmezett viselkedés megváltozott.
A változás oka
A régi viselkedés azért volt problémás, mert a rendszer alapértelmezés szerint elutasította [Authorize]
/ RequireAuthenticatedUser()
ezeket a tagokat.
Javasolt művelet
A ASP.NET Core 3.0 6 előzetes verziójában alapértelmezés szerint van egy RequireAuthenticatedSignIn
jelző AuthenticationOptions
true
. Állítsa be ezt a jelzőt false
a régi viselkedés visszaállításához.
Kategória
ASP.NET Core
Érintett API-k
Egyik sem
Identitás: A SignInManager konstruktor új paramétert fogad el
A ASP.NET Core 3.0-tól kezdve egy új IUserConfirmation<TUser>
paraméter lett hozzáadva a SignInManager
konstruktorhoz. További információ: dotnet/aspnetcore#8356.
Bevezetett verzió
3,0
A változás oka
A változás motivációja az volt, hogy támogatást adjon az új e-mail/ megerősítő folyamatokhoz az Identitásban.
Javasolt művelet
Ha manuálisan hoz létre egy SignInManager
, adjon meg egy implementációt IUserConfirmation
, vagy ragadjon meg egyet a függőséginjektálásból.
Kategória
ASP.NET Core
Érintett API-k
Identitás: A felhasználói felület statikus webes objektumok funkciót használ
ASP.NET Core 3.0 bevezetett egy statikus webes objektum funkciót, és az Identity felhasználói felülete elfogadta.
Módosítás leírása
Az Identitás felhasználói felülete a statikus webes objektumok funkciójának bevezetése miatt:
- A keretrendszer kiválasztása a
IdentityUIFrameworkVersion
projektfájlban lévő tulajdonság használatával történik. - A Bootstrap 4 az identitás felhasználói felületének alapértelmezett felhasználói felületi keretrendszere. A Bootstrap 3 elérte az élettartam végét, ezért érdemes megfontolni a támogatott verzióra való migrálást.
Bevezetett verzió
3,0
Régi viselkedés
Az identitás felhasználói felületének alapértelmezett felhasználói felületi keretrendszere a Bootstrap 3 volt. A felhasználói felület keretrendszere paraméterrel konfigurálható a metódushíváshoz.AddDefaultUI
Startup.ConfigureServices
Új viselkedés
Az identitás felhasználói felületének alapértelmezett felhasználói felületi keretrendszere a Bootstrap 4. A felhasználói felület keretrendszerét a metódushívás helyett a AddDefaultUI
projektfájlban kell konfigurálni.
A változás oka
A statikus webes eszközök funkciójának bevezetéséhez a felhasználói felület keretrendszerének konfigurációja az MSBuildre való áttéréshez szükséges. Az a döntés, hogy melyik keretrendszer beágyazása buildelési döntés, nem futtatókörnyezeti döntés.
Javasolt művelet
Tekintse át a webhely felhasználói felületét, és győződjön meg arról, hogy az új Bootstrap 4-összetevők kompatibilisek. Szükség esetén az IdentityUIFrameworkVersion
MSBuild tulajdonság használatával térjen vissza a Bootstrap 3-ra. Adja hozzá a tulajdonságot a projektfájl egyik <PropertyGroup>
eleméhez:
<IdentityUIFrameworkVersion>Bootstrap3</IdentityUIFrameworkVersion>
Kategória
ASP.NET Core
Érintett API-k
IdentityBuilderUIExtensions.AddDefaultUI(IdentityBuilder, UIFramework)
Kestrel: Csatlakozás ion adapterek el lettek távolítva
A "pubternal" API-k public
áthelyezésének részeként az egyik IConnectionAdapter
fogalom el lett távolítva a Kestrelből. Csatlakozás ion-adapterek cseréje kapcsolati köztes szoftverre történik (hasonló a HTTP köztes szoftverhez a ASP.NET Core-folyamatban, de alacsonyabb szintű kapcsolatok esetén). A HTTPS és a kapcsolatnaplózás átkerült a kapcsolati adapterekről a kapcsolat köztes szoftverére. Ezeknek a bővítménymetenek továbbra is zökkenőmentesen kell működniük, de a megvalósítás részletei megváltoztak.
További információ: dotnet/aspnetcore#11412. További információért lásd: dotnet/aspnetcore#11475.
Bevezetett verzió
3,0
Régi viselkedés
A Kestrel bővíthetőségi IConnectionAdapter
összetevői a .
Új viselkedés
A Kestrel bővíthetőségi összetevői köztes szoftverként jönnek létre.
A változás oka
A módosítás célja, hogy rugalmasabb bővíthetőségi architektúrát biztosítson.
Javasolt művelet
Alakítsa át az összes implementációt IConnectionAdapter
az új köztes szoftverminta használatára az itt látható módon.
Kategória
ASP.NET Core
Érintett API-k
Microsoft.AspNetCore.Server.Kestrel.Core.Adapter.Internal.IConnectionAdapter
Kestrel: Üres HTTPS-szerelvény el lett távolítva
A szerelvény Microsoft.AspNetCore.Server.Kestrel.Https el lett távolítva.
Bevezetett verzió
3,0
A változás oka
A ASP.NET Core 2.1-ben a tartalom Microsoft.AspNetCore.Server.Kestrel.Https
át lett helyezve a következőre Microsoft.AspNetCore.Server.Kestrel.Core: . Ezt a módosítást attribútumok használatával [TypeForwardedTo]
, nem feltörhető módon hajtották végre.
Javasolt művelet
- A 2.0-ra hivatkozó
Microsoft.AspNetCore.Server.Kestrel.Https
kódtáraknak az összes ASP.NET Core-függőséget 2.1-s vagy újabb verzióra kell frissítenie. Ellenkező esetben megszakadhatnak, ha betöltenek egy ASP.NET Core 3.0-alkalmazásba. - Az ASP.NET Core 2.1-et és újabb verziót célzó alkalmazásoknak és kódtáraknak el kell távolítaniuk a
Microsoft.AspNetCore.Server.Kestrel.Https
NuGet-csomagra mutató közvetlen hivatkozásokat.
Kategória
ASP.NET Core
Érintett API-k
Egyik sem
Kestrel: Új gyűjteménybe áthelyezett pótkocsifejlécek kérése
A korábbi verziókban a Kestrel HTTP/1.1-beli, darabolt pótkocsifejléceket adott hozzá a kérelemfejlécek gyűjteményéhez, amikor a kérelem törzsét a végéig felolvasták. Ez a viselkedés aggályokat okozott a fejlécek és a pótkocsik közötti kétértelműség miatt. Úgy döntöttek, hogy áthelyezik a pótkocsikat egy új gyűjteménybe.
A HTTP/2 kérelem-pótkocsik nem voltak elérhetők ASP.NET Core 2.2-ben, de most már az ASP.NET Core 3.0 új gyűjteményében is elérhetők.
Új kérelemkiterjesztési módszerek lettek hozzáadva ezeknek a pótkocsiknak a eléréséhez.
A HTTP/1.1 pótkocsik a teljes kérelemtörzs elolvasása után érhetők el.
A HTTP/2-pótkocsik az ügyféltől való beérkezés után érhetők el. Az ügyfél csak akkor küldi el a pótkocsikat, ha a teljes kérelemtörzset legalább puffereli a kiszolgáló. Előfordulhat, hogy a pufferterület felszabadításához be kell olvasnia a kérés törzsét. A pótkocsik mindig elérhetők, ha a kérelem törzsét a végéig olvassa el. A pótkocsik a test végét jelölik.
Bevezetett verzió
3,0
Régi viselkedés
A kérelem-utánfutó fejlécei hozzá lesznek adva a HttpRequest.Headers
gyűjteményhez.
Új viselkedés
A kérelem-pótkocsi fejlécei nem szerepelnek a HttpRequest.Headers
gyűjteményben. A következő bővítménymetelyeket HttpRequest
használva érheti el őket:
GetDeclaredTrailers()
- Lekéri a "Trailer" kérés fejlécét, amely felsorolja, hogy mely pótkocsik várhatók a törzs után.SupportsTrailers()
– Jelzi, hogy a kérelem támogatja-e a pótkocsi fejléceinek fogadását.CheckTrailersAvailable()
- Meghatározza, hogy a kérelem támogatja-e a pótkocsikat, és hogy elérhetők-e olvasásra.GetTrailer(string trailerName)
– Lekéri a kért záró fejlécet a válaszból.
A változás oka
A pótkocsik kulcsfontosságú funkciók az olyan helyzetekben, mint a gRPC. A pótkocsik egyesítése a fejlécek kéréséhez zavaró volt a felhasználók számára.
Javasolt művelet
A pótkocsival kapcsolatos bővítménymetszeti módszereket HttpRequest
használva érheti el a pótkocsikat.
Kategória
ASP.NET Core
Érintett API-k
Kestrel: A közlekedési absztrakciók el lettek távolítva és nyilvánossá lettek
A "pubternal" API-któl való eltávolodás részeként a Kestrel átviteli réteg API-k nyilvános felületként jelennek meg a Microsoft.AspNetCore.Connections.Abstractions
könyvtárban.
Bevezetett verzió
3,0
Régi viselkedés
- A tárban
Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions
közlekedéssel kapcsolatos absztrakciók érhetők el. - A
ListenOptions.NoDelay
tulajdonság elérhető volt.
Új viselkedés
- A
IConnectionListener
kódtárban bevezettük azMicrosoft.AspNetCore.Connections.Abstractions
interfészt, hogy elérhetővé tegye a leggyakrabban használt funkciókat a...Transport.Abstractions
tárból. - Ez
NoDelay
már elérhető a szállítási lehetőségek (LibuvTransportOptions
ésSocketTransportOptions
). SchedulingMode
már nem érhető el.
A változás oka
ASP.NET Core 3.0 elmozdult a "pubternal" API-któl.
Javasolt művelet
Kategória
ASP.NET Core
Érintett API-k
Egyik sem
Honosítás: ResourceManagerWithCultureStringLocalizer és WithCulture megjelölt elavult
A ResourceManagerWithCultureStringLocalizer osztály és a WithCulture felületi tag gyakran összetéveszthető a honosítás felhasználói számára, különösen a saját IStringLocalizer
megvalósítás létrehozásakor. Ezek az elemek azt a benyomást keltik a felhasználóban, hogy egy IStringLocalizer
példány "nyelvenkénti, erőforrásonkénti". A valóságban a példányoknak csak "erőforrásonként" kell lenniük. A keresett nyelvet a CultureInfo.CurrentUICulture
végrehajtási időpont határozza meg. A félreértések forrása érdekében az API-k elavultként lettek megjelölve ASP.NET Core 3.0 Preview 3-as verziójában. Az API-k egy későbbi kiadásban lesznek eltávolítva.
A környezetről lásd: dotnet/aspnetcore#3324. További információért lásd: dotnet/aspnetcore#7756.
Bevezetett verzió
3,0
Régi viselkedés
A metódusok nincsenek megjelölve .Obsolete
Új viselkedés
A metódusok meg vannak jelölve Obsolete
.
A változás oka
Az API-k nem ajánlott használati esetet jelentettek. Zavart okozott a honosítás tervezése.
Javasolt művelet
A javaslat inkább a használat ResourceManagerStringLocalizer
. Hagyja, hogy a kultúra legyen beállítva a CurrentCulture
. Ha ez nem lehetőség, hozza létre és használja a ResourceManagerWithCultureStringLocalizer egy példányát.
Kategória
ASP.NET Core
Érintett API-k
Naplózás: Belső hibakeresési naplóosztály
A Core 3.0 DebugLogger
ASP.NET előtt a hozzáférési módosító a .public
A ASP.NET Core 3.0-ban a hozzáférés-módosító a következőre internal
változott: .
Bevezetett verzió
3,0
A változás oka
A módosítás a következőre történik:
- Konzisztenciának kényszerítése más naplózási implementációkkal, például
ConsoleLogger
. - Csökkentse az API felületét.
Javasolt művelet
A bővítménymetódus használatával engedélyezheti a AddDebugILoggingBuilder
hibakeresési naplózást. DebugLoggerProvider abban az esetben is public
, ha a szolgáltatást manuálisan kell regisztrálni.
Kategória
ASP.NET Core
Érintett API-k
Microsoft.Extensions.Logging.Debug.DebugLogger
MVC: A vezérlő műveleti neveiből levágott Async utótag
A dotnet/aspnetcore#4849 címzés részeként ASP.NET Core MVC alapértelmezés szerint levágja a műveletnevek utótagjátAsync
. A ASP.NET Core 3.0-tól kezdve ez a változás mind az útválasztásra, mind a kapcsolatgenerálásra hatással van.
Bevezetett verzió
3,0
Régi viselkedés
Vegye figyelembe a következő ASP.NET Core MVC-vezérlőt:
public class ProductController : Controller
{
public async IActionResult ListAsync()
{
var model = await DbContext.Products.ToListAsync();
return View(model);
}
}
A művelet a következővel Product/ListAsync
irányítható: . A csatolás létrehozásához meg kell adni az Async
utótagot. Példa:
<a asp-controller="Product" asp-action="ListAsync">List</a>
Új viselkedés
A ASP.NET Core 3.0-ban a művelet a következővel érhető el Product/List
: . A hivatkozásgenerálási kódnak kihagynia kell az Async
utótagot. Példa:
<a asp-controller="Product" asp-action="List">List</a>
Ez a módosítás nem érinti az [ActionName]
attribútummal megadott neveket. Az új viselkedés letiltható a következő beállítással MvcOptions.SuppressAsyncSuffixInActionNames
false
Startup.ConfigureServices
:
services.AddMvc(options =>
{
options.SuppressAsyncSuffixInActionNames = false;
});
A változás oka
Konvenció szerint az aszinkron .NET-metódusok utótaggal Async
vannak elvégzve. Ha azonban egy metódus MVC-műveletet határoz meg, nem kívánatos az Async
utótag használata.
Javasolt művelet
Ha az alkalmazás a név utótagját Async
megőrző MVC-műveletektől függ, válasszon az alábbi megoldások közül:
- Az attribútummal
[ActionName]
megőrizhető az eredeti név. - Tiltsa le az átnevezést teljes egészében a következő beállítással
MvcOptions.SuppressAsyncSuffixInActionNames
false
Startup.ConfigureServices
:
services.AddMvc(options =>
{
options.SuppressAsyncSuffixInActionNames = false;
});
Kategória
ASP.NET Core
Érintett API-k
Egyik sem
MVC: JsonResult a Microsoft.AspNetCore.Mvc.Core-ba költözött
JsonResult
átkerült a Microsoft.AspNetCore.Mvc.Core
szerelvénybe. Ez a típus a Microsoft.AspNetCore.Mvc.Formatters.Json fájlban volt definiálva. A rendszer hozzáad egy szerelvényszintű [TypeForwardedTo] attribútumot a probléma megoldásához Microsoft.AspNetCore.Mvc.Formatters.Json
a felhasználók többsége számára. A külső kódtárakat használó alkalmazások problémákba ütközhetnek.
Bevezetett verzió
3.0 – 6. előzetes verzió
Régi viselkedés
Egy 2.2-alapú kódtárat használó alkalmazás sikeresen buildel.
Új viselkedés
A 2.2-alapú kódtárat használó alkalmazások fordítása sikertelen. A következő szövegvariációt tartalmazó hiba jelenik meg:
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'
Ilyen problémára példa: dotnet/aspnetcore#7220.
A változás oka
Platformszintű változások a ASP.NET Core összetételében az aspnet/Announcements#325 szakaszban leírtak szerint.
Javasolt művelet
Előfordulhat, hogy a 2.2-es verzióra Microsoft.AspNetCore.Mvc.Formatters.Json
lefordított kódtáraknak újra kell fordítaniuk a problémát az összes felhasználó számára. Ha ez jelentkezik, forduljon a tár szerzőéhez. Kérje meg a kódtár újrafordítását ASP.NET Core 3.0-s verziójának megcélzásához.
Kategória
ASP.NET Core
Érintett API-k
Microsoft.AspNetCore.Mvc.JsonResult
MVC: Az előre összeállított eszköz elavult
A ASP.NET Core 1.1-ben bevezették az Microsoft.AspNetCore.Mvc.Razor.ViewCompilation
(MVC előkompilációs eszköz) csomagot, amely támogatja a Razor-fájlok (.cshtml-fájlok ) közzétételi idő szerinti fordítását. A ASP.NET Core 2.1-ben bevezették a Razor SDK-t , hogy az előre összeállított eszköz funkcióival bővüljön. A Razor SDK támogatja a Razor-fájlok buildelési és közzétételi idejű fordítását. Az SDK ellenőrzi a .cshtml-fájlok helyességét a buildeléskor, miközben az alkalmazás indítási ideje javul. A Razor SDK alapértelmezés szerint be van kapcsolva, és nincs szükség kézmozdulatra a használat megkezdéséhez.
A ASP.NET Core 3.0-ban a ASP.NET Core 1.1-korÚ MVC előkompilációs eszköz el lett távolítva. A korábbi csomagverziók továbbra is fontos hiba- és biztonsági javításokat kapnak a javítás kiadásában.
Bevezetett verzió
3,0
Régi viselkedés
A Microsoft.AspNetCore.Mvc.Razor.ViewCompilation
csomag az MVC Razor-nézetek előzetes fordítására szolgál.
Új viselkedés
A Razor SDK natív módon támogatja ezt a funkciót. A Microsoft.AspNetCore.Mvc.Razor.ViewCompilation
csomag már nem frissül.
A változás oka
A Razor SDK további funkciókat biztosít, és ellenőrzi a .cshtml-fájlok helyességét a buildeléskor. Az SDK emellett javítja az alkalmazások indítási idejét.
Javasolt művelet
A ASP.NET Core 2.1 vagy újabb verzió felhasználói számára frissítsen a Razor SDK natív támogatásának használatára. Ha a hibák vagy hiányzó funkciók megakadályozzák a Razor SDK-ba való migrálást, nyisson meg egy problémát a dotnet/aspnetcore webhelyen.
Kategória
ASP.NET Core
Érintett API-k
Egyik sem
MVC: A "Pubternal" típusúak belsőre változtak
A ASP.NET Core 3.0-ban az MVC összes "pubternal" típusát egy támogatott névtérre frissítettük public
, vagy internal
szükség szerint.
Módosítás leírása
A ASP.NET Core-ban a "pubternal" típusok deklarálva public
vannak, de - .Internal
utótaggal rendelkező névtérben találhatók. Bár ezek a típusok public
nem rendelkeznek támogatási szabályzattal, és kompatibilitástörő változásoknak vannak kitéve. Sajnos az ilyen típusok véletlen használata gyakori volt, ami a projektek kompatibilitástörő változásait eredményezte, és korlátozta a keretrendszer fenntartásának képességét.
Bevezetett verzió
3,0
Régi viselkedés
Az MVC egyes típusai csak névtérben .Internal
voltakpublic
. Ezek a típusok nem voltak támogatási szabályzattal, és kompatibilitástörő változásoknak voltak kitéve.
Új viselkedés
Az összes ilyen típus frissítve van, hogy egy támogatott névtérben legyenpublic
, vagy megjelölve legyen.internal
A változás oka
A "pubternal" típusúak véletlen használata gyakori volt, ami a projektek kompatibilitástörő változásait eredményezte, és korlátozta a keretrendszer fenntartásának képességét.
Javasolt művelet
Ha olyan típusokat használ, amelyek valóban valódivá public
váltak, és át lettek helyezve egy új, támogatott névtérbe, frissítse a hivatkozásokat az új névtereknek megfelelően.
Ha olyan típusokat használ, amelyek megjelölése internal
meg lett jelölve, alternatívát kell találnia. A korábban "pubternális" típusokat soha nem támogatták nyilvános használatra. Ha bizonyos névterek kritikus fontosságúak az alkalmazások számára, küldjön egy problémát a dotnet/aspnetcore webhelyen. Megfontolhatók a kért típusok public
.
Kategória
ASP.NET Core
Érintett API-k
Ez a módosítás a következő névterek típusait tartalmazza:
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: A webes API-kompatibilitási shim el lett távolítva
A ASP.NET Core 3.0-tól kezdve a Microsoft.AspNetCore.Mvc.WebApiCompatShim
csomag már nem érhető el.
Módosítás leírása
A Microsoft.AspNetCore.Mvc.WebApiCompatShim
(WebApiCompatShim) csomag részleges kompatibilitást biztosít ASP.NET Core-ban a ASP.NET 4.x Web API 2-vel, hogy egyszerűbb legyen a meglévő Webes API-implementációk áttelepítése ASP.NET Core-ba. A WebApiCompatShim-et használó alkalmazások azonban nem élvezik az API-val kapcsolatos funkciók használatát a legutóbbi ASP.NET Core-kiadásokban. Ilyen funkciók például a továbbfejlesztett Open API-specifikációk létrehozása, a szabványosított hibakezelés és az ügyfélkódok létrehozása. A 3.0-s API-erőfeszítések jobb összpontosítása érdekében a WebApiCompatShim el lett távolítva. A WebApiCompatShim-et használó meglévő alkalmazásoknak az újabb [ApiController]
modellbe kell migrálniuk.
Bevezetett verzió
3,0
A változás oka
A Webes API kompatibilitási shim egy migrálási eszköz volt. Korlátozza a felhasználók hozzáférését az ASP.NET Core-ban hozzáadott új funkciókhoz.
Javasolt művelet
Távolítsa el a shim használatát, és migráljon közvetlenül a ASP.NET Core hasonló funkcióira.
Kategória
ASP.NET Core
Érintett API-k
Microsoft.AspNetCore.Mvc.WebApiCompatShim
Razor: RazorTemplateEngine API el lett távolítva
Az RazorTemplateEngine
API el lett távolítva, és lecserélődött a következőre Microsoft.AspNetCore.Razor.Language.RazorProjectEngine
: .
További információért tekintse meg a GitHub dotnet/aspnetcore#25215-ös problémáját.
Bevezetett verzió
3,0
Régi viselkedés
Sablonmotor hozható létre és használható a Razor-fájlok kódjának elemzéséhez és létrehozásához.
Új viselkedés
RazorProjectEngine
létrehozható, és ugyanazokat az információkat adja meg, mint RazorTemplateEngine
a Razor-fájlok elemzéséhez és létrehozásához. RazorProjectEngine
emellett további konfigurációs szinteket is biztosít.
A változás oka
RazorTemplateEngine
túl szorosan kapcsolódik a meglévő implementációkhoz. Ez a szoros összekapcsolás további kérdéseket eredményezett a Razor-elemzési/létrehozási folyamat megfelelő konfigurálásakor.
Javasolt művelet
Használja RazorProjectEngine
ahelyett, hogy RazorTemplateEngine
. Vegye figyelembe az alábbi példákat.
A RazorProjectEngine létrehozása és konfigurálása
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
});
Kód létrehozása Razor-fájlhoz
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();
Kategória
ASP.NET Core
Érintett API-k
RazorTemplateEngine
RazorTemplateEngineOptions
Razor: Futtatókörnyezet fordítása csomagba helyezve
A Razor-nézetek futásidejű fordításának támogatása és a Razor Pages külön csomagba került.
Bevezetett verzió
3,0
Régi viselkedés
A futtatókörnyezet fordítása további csomagok nélkül érhető el.
Új viselkedés
A funkció át lett helyezve a Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation csomagba.
Az alábbi API-k korábban a futtatókörnyezet fordításának Microsoft.AspNetCore.Mvc.Razor.RazorViewEngineOptions
támogatásához voltak elérhetők. Az API-k mostantól elérhetők a következőn keresztül: Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.MvcRazorRuntimeCompilationOptions
.
RazorViewEngineOptions.FileProviders
mostMvcRazorRuntimeCompilationOptions.FileProviders
RazorViewEngineOptions.AdditionalCompilationReferences
mostMvcRazorRuntimeCompilationOptions.AdditionalReferencePaths
Emellett Microsoft.AspNetCore.Mvc.Razor.RazorViewEngineOptions.AllowRecompilingViewsOnFileChange
el lett távolítva. A fájlmódosítások újrafordítása alapértelmezés szerint engedélyezve van a Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
csomagra való hivatkozással.
A változás oka
Ez a módosítás szükséges volt a Roslyn ASP.NET Core megosztott keretrendszer-függőségének eltávolításához.
Javasolt művelet
A futtatókörnyezeti fordítást vagy Razor-fájlok újrafordítását igénylő alkalmazásoknak a következő lépéseket kell elvégezniük:
Adjon hozzá egy hivatkozást a
Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
csomaghoz.Frissítse a projekt metódusát
Startup.ConfigureServices
úgy, hogy az tartalmazza a hívásokatAddRazorRuntimeCompilation
. Példa:services.AddMvc() .AddRazorRuntimeCompilation();
Kategória
ASP.NET Core
Érintett API-k
Microsoft.AspNetCore.Mvc.Razor.RazorViewEngineOptions
Munkamenet állapota: Elavult API-k el lettek távolítva
A munkamenet-cookie-k konfigurálására szolgáló elavult API-k el lettek távolítva. További információ: aspnet/Announcements#257.
Bevezetett verzió
3,0
A változás oka
Ez a módosítás konzisztenciát kényszerít ki az API-k között a cookie-kat használó funkciók konfigurálásához.
Javasolt művelet
Migrálja az eltávolított API-k használatát az újabb csereikre. Tekintse meg a következő példát a következőben 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;
});
}
Kategória
ASP.NET Core
Érintett API-k
- Microsoft.AspNetCore.Builder.SessionOptions.CookieDomain
- Microsoft.AspNetCore.Builder.SessionOptions.CookieHttpOnly
- Microsoft.AspNetCore.Builder.SessionOptions.CookieName
- Microsoft.AspNetCore.Builder.SessionOptions.CookiePath
- Microsoft.AspNetCore.Builder.SessionOptions.CookieSecure
Megosztott keretrendszer: A szerelvények el lettek távolítva Microsoft.AspNetCore.App
A ASP.NET Core 3.0-tól kezdődően a ASP.NET Core megosztott keretrendszere (Microsoft.AspNetCore.App
) csak a Microsoft által teljesen kifejlesztett, támogatott és használható belső szerelvényeket tartalmazza.
Módosítás leírása
Gondoljon úgy a változásra, mint a ASP.NET Core "platform" határainak újradefiniálására. A megosztott keretrendszert bárki létrehozhatja a GitHubon keresztül, és továbbra is biztosítja a .NET Core megosztott keretrendszerek meglévő előnyeit az alkalmazásai számára. Bizonyos előnyök közé tartozik a kisebb üzembehelyezési méret, a központosított javítás és a gyorsabb indítási idő.
A módosítás részeként néhány jelentős kompatibilitástörő változás is bevezetésével jár.Microsoft.AspNetCore.App
Bevezetett verzió
3,0
Régi viselkedés
A projektfájl egyik <PackageReference>
elemével hivatkozott Microsoft.AspNetCore.App
projektek.
Ezenkívül Microsoft.AspNetCore.App
a következő alösszetevőket tartalmazta:
- Json.NET (
Newtonsoft.Json
) - Entity Framework Core (szerelvények előtaggal
Microsoft.EntityFrameworkCore.
) - Roslyn (
Microsoft.CodeAnalysis
)
Új viselkedés
A hivatkozás már Microsoft.AspNetCore.App
nem igényel egy <PackageReference>
elemet a projektfájlban. A .NET Core SDK egy új, úgynevezett <FrameworkReference>
elemet támogat, amely felváltja <PackageReference>
a .NET Core SDK használatát.
További információ: dotnet/aspnetcore#3612.
Az Entity Framework Core NuGet-csomagokként hajóz. Ez a módosítás igazodik a szállítási modellhez a .NET összes többi adatelérési kódtárához. Az Entity Framework Core a legegyszerűbb út az innováció folytatásához, miközben támogatja a különböző .NET-platformokat. Az Entity Framework Core áthelyezése a megosztott keretrendszerből nincs hatással a Microsoft által kifejlesztett, támogatott és használható kódtárak állapotára. A .NET Core támogatási szabályzata továbbra is kiterjed rá.
Json.NET és az Entity Framework Core továbbra is együttműködik ASP.NET Core-val. Ezek azonban nem lesznek belefoglalva a megosztott keretrendszerbe.
További információ: A JSON jövője a .NET Core 3.0-ban. Tekintse meg a megosztott keretrendszerből eltávolított bináris fájlok teljes listáját is.
A változás oka
Ez a módosítás leegyszerűsíti Microsoft.AspNetCore.App
a NuGet-csomagok és a megosztott keretrendszerek közötti duplikációt, és csökkenti a duplikációt.
A változás motivációjára vonatkozó további információkért tekintse meg ezt a blogbejegyzést.
Javasolt művelet
A ASP.NET Core 3.0-tól kezdve már nem szükséges, hogy a projektek NuGet-csomagokban használják fel a Microsoft.AspNetCore.App
szerelvényeket. A ASP.NET Core megosztott keretrendszer célzásának és használatának egyszerűsítése érdekében a ASP.NET Core 1.0 óta szállított NuGet-csomagok száma már nem érhető el. A csomagok által biztosított API-k továbbra is elérhetők az alkalmazások számára a <FrameworkReference>
to Microsoft.AspNetCore.App
használatával. Gyakori API-példák a Kestrel, az MVC és a Razor.
Ez a módosítás nem vonatkozik az ASP.NET Core 2.x-ben hivatkozott Microsoft.AspNetCore.App
összes bináris fájlra. Figyelemre méltó kivételek a következők:
Microsoft.Extensions
A .NET Standardot továbbra is megcélozó kódtárak NuGet-csomagokként érhetők el (lásd https://github.com/dotnet/extensions: ).- A ASP.NET Core-csapat által létrehozott API-k, amelyek nem részei a csoportnak
Microsoft.AspNetCore.App
. Például a következő összetevők érhetők el NuGet-csomagokként:- Entity Framework Core
- Külső integrációt biztosító API-k
- Kísérleti funkciók
- Olyan függőségekkel rendelkező API-k, amelyek nem tudták teljesíteni a megosztott keretrendszerben való követelményeket
- A Json.NET támogatását fenntartó MVC-bővítmények. Az API NuGet-csomagként érhető el, amely támogatja a Json.NET és az MVC használatát. További részletekért tekintse meg a ASP.NET Core migrálási útmutatóját.
- A SignalR .NET-ügyfél továbbra is támogatja a .NET Standardot, és NuGet-csomagként szállít. Számos .NET-futtatókörnyezethez, például Xamarinhoz és UWP-hez használható.
További információt a 3.0-s megosztott keretrendszer-szerelvények csomagjainak leállítása című témakörben talál. További információért lásd: dotnet/aspnetcore#3757.
Kategória
ASP.NET Core
Érintett API-k
Megosztott keretrendszer: Eltávolítva a Microsoft.AspNetCore.All
A ASP.NET Core 3.0-tól kezdve a Microsoft.AspNetCore.All
metacsomag és a megfelelő Microsoft.AspNetCore.All
megosztott keretrendszer már nem készül el. Ez a csomag ASP.NET Core 2.2-ben érhető el, és továbbra is megkapja a karbantartási frissítéseket ASP.NET Core 2.1-ben.
Bevezetett verzió
3,0
Régi viselkedés
Az alkalmazások a Microsoft.AspNetCore.All
metapackage használatával célozzák meg a megosztott keretrendszert a Microsoft.AspNetCore.All
.NET Core-on.
Új viselkedés
A .NET Core 3.0 nem tartalmaz megosztott keretrendszert Microsoft.AspNetCore.All
.
A változás oka
A Microsoft.AspNetCore.All
metapackage számos külső függőséget tartalmazott.
Javasolt művelet
Migrálja a projektet a Microsoft.AspNetCore.App
keretrendszer használatához. A korábban elérhető Microsoft.AspNetCore.All
összetevők továbbra is elérhetők a NuGetben. Ezeket az összetevőket a megosztott keretrendszer helyett az alkalmazással együtt telepíti a rendszer.
Kategória
ASP.NET Core
Érintett API-k
Egyik sem
SignalR: HandshakeProtocol.SuccessHandshakeData lecserélve
A HandshakeProtocol.SuccessHandshakeData mező el lett távolítva, és egy segédmetódusra cserélődött, amely egy adott IHubProtocol
adott kézfogási választ generál.
Bevezetett verzió
3,0
Régi viselkedés
HandshakeProtocol.SuccessHandshakeData
mező public static ReadOnlyMemory<byte>
volt.
Új viselkedés
HandshakeProtocol.SuccessHandshakeData
egy olyan metódus váltotta fel static
GetSuccessfulHandshake(IHubProtocol protocol)
, amely a megadott protokollon alapuló értéket ReadOnlyMemory<byte>
ad vissza.
A változás oka
További mezők lettek hozzáadva a kézfogási válaszhoz , amelyek nem állandóak, és a kiválasztott protokolltól függően változnak.
Javasolt művelet
Nincs. Ez a típus nem felhasználói kódból való használatra lett tervezve. Így public
megosztható a SignalR-kiszolgáló és az ügyfél között. A .NET-ben írt ügyfél SignalR-ügyfelek is használhatják. A SignalR felhasználóit nem érintheti ez a változás.
Kategória
ASP.NET Core
Érintett API-k
HandshakeProtocol.SuccessHandshakeData
SignalR: Hub Csatlakozás ion ResetSendPing és ResetTimeout metódusok eltávolítva
A ResetSendPing
rendszer eltávolította a metódusokat a ResetTimeout
SignalR HubConnection
API-ból. Ezeket a módszereket eredetileg csak belső használatra szánták, de ASP.NET Core 2.2-ben nyilvánossá tették őket. Ezek a módszerek nem lesznek elérhetők a ASP.NET Core 3.0 Előzetes verzió 4-es kiadásától kezdve. További információért lásd: dotnet/aspnetcore#8543.
Bevezetett verzió
3,0
Régi viselkedés
Az API-k elérhetők voltak.
Új viselkedés
Az API-k törlődnek.
A változás oka
Ezeket a módszereket eredetileg csak belső használatra szánták, de ASP.NET Core 2.2-ben nyilvánossá tették őket.
Javasolt művelet
Ne használja ezeket a módszereket.
Kategória
ASP.NET Core
Érintett API-k
SignalR: Hub Csatlakozás ionContext konstruktorok módosultak
A SignalR konstruktorai HubConnectionContext
úgy változtak, hogy több paraméter helyett egy beállítástípust fogadjanak el a jövőbiztos hozzáadási lehetőségekre. Ez a módosítás két konstruktort egyetlen konstruktorra cserél, amely elfogad egy beállítástípust.
Bevezetett verzió
3,0
Régi viselkedés
HubConnectionContext
két konstruktorral rendelkezik:
public HubConnectionContext(ConnectionContext connectionContext, TimeSpan keepAliveInterval, ILoggerFactory loggerFactory);
public HubConnectionContext(ConnectionContext connectionContext, TimeSpan keepAliveInterval, ILoggerFactory loggerFactory, TimeSpan clientTimeoutInterval);
Új viselkedés
A két konstruktort eltávolítottuk, és egy konstruktorra cseréltük:
public HubConnectionContext(ConnectionContext connectionContext, HubConnectionContextOptions contextOptions, ILoggerFactory loggerFactory)
A változás oka
Az új konstruktor egy új beállításobjektumot használ. Következésképpen a funkciók HubConnectionContext
a jövőben bővíthetők anélkül, hogy több konstruktort és törést eredményeznek.
Javasolt művelet
A következő konstruktor használata helyett:
HubConnectionContext connectionContext = new HubConnectionContext(
connectionContext,
keepAliveInterval: TimeSpan.FromSeconds(15),
loggerFactory,
clientTimeoutInterval: TimeSpan.FromSeconds(15));
Használja a következő konstruktort:
HubConnectionContextOptions contextOptions = new HubConnectionContextOptions()
{
KeepAliveInterval = TimeSpan.FromSeconds(15),
ClientTimeoutInterval = TimeSpan.FromSeconds(15)
};
HubConnectionContext connectionContext = new HubConnectionContext(connectionContext, contextOptions, loggerFactory);
Kategória
ASP.NET Core
Érintett API-k
- HubConnectionContext(ConnectionContext, TimeSpan, ILoggerFactory)
- HubConnectionContext(ConnectionContext, TimeSpan, ILoggerFactory, TimeSpan)
SignalR: A JavaScript-ügyfélcsomag neve megváltozott
A ASP.NET Core 3.0 Preview 7-ben a SignalR JavaScript-ügyfélcsomag neve a következőre @aspnet/signalr
@microsoft/signalr
változott: . A névváltoztatás azt a tényt tükrözi, hogy a SignalR az Azure SignalR szolgáltatásnak köszönhetően nem csupán ASP.NET Core-alkalmazásokban hasznos.
A változásra való reagáláshoz módosítsa a package.json fájlok, require
utasítások és ECMAScript-utasítások import
hivatkozásait. Az átnevezés részeként egyetlen API sem változik.
További információért lásd: dotnet/aspnetcore#11637.
Bevezetett verzió
3,0
Régi viselkedés
Az ügyfélcsomag neve @aspnet/signalr
.
Új viselkedés
Az ügyfélcsomag neve @microsoft/signalr
.
A változás oka
A névváltoztatás egyértelművé teszi, hogy a SignalR az Azure SignalR szolgáltatásnak köszönhetően ASP.NET Core-alkalmazásokon túl is hasznos.
Javasolt művelet
Váltás az új csomagra @microsoft/signalr
.
Kategória
ASP.NET Core
Érintett API-k
Egyik sem
SignalR: UseSignalR és Use Csatlakozás ions metódusok megjelölése elavultként
A metódusok UseConnections
és UseSignalR
az osztályok ConnectionsRouteBuilder
HubRouteBuilder
elavultként vannak megjelölve ASP.NET Core 3.0-ban.
Bevezetett verzió
3,0
Régi viselkedés
A SignalR hub útválasztása a következő használatával UseSignalR
lett konfigurálva: vagy UseConnections
.
Új viselkedés
Az útválasztás konfigurálásának régi módja elavult, és a végponti útválasztásra cserélődött.
A változás oka
A köztes szoftver átkerül az új végpont-útválasztási rendszerbe. A köztes szoftver hozzáadásának régi módja elavult.
Javasolt művelet
Cserélje le UseSignalR
a következőre UseEndpoints
:
Régi kód:
app.UseSignalR(routes =>
{
routes.MapHub<SomeHub>("/path");
});
Új kód:
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<SomeHub>("/path");
});
Kategória
ASP.NET Core
Érintett API-k
- Microsoft.AspNetCore.Builder.ConnectionsAppBuilderExtensions.UseConnections(IApplicationBuilder, Action<ConnectionsRouteBuilder>)
- Microsoft.AspNetCore.Builder.SignalRAppBuilderExtensions.UseSignalR(IApplicationBuilder, Action<HubRouteBuilder>)
- Microsoft.AspNetCore.Http.Connections.ConnectionsRouteBuilder
- Microsoft.AspNetCore.SignalR.HubRouteBuilder
SLA-k: Elavultként megjelölt SpaServices és NodeServices
A következő NuGet-csomagok tartalma mind szükségtelen volt a Core 2.1 ASP.NET óta. Ezért a következő csomagok elavultként vannak megjelölve:
Ugyanezen okból a következő npm-modulok elavultként vannak megjelölve:
Az előző csomagok és npm-modulok később törlődnek a .NET 5-ben.
Bevezetett verzió
3,0
Régi viselkedés
Az elavult csomagok és npm-modulok célja az volt, hogy integrálják ASP.NET Core-t különböző egyoldalas alkalmazások (SPA) keretrendszereivel. Ilyen keretrendszerek például az Angular, a React és a React with Redux.
Új viselkedés
Új integrációs mechanizmus létezik a Microsoft.AspNetCore.SpaServices.Extensions NuGet csomagban. A csomag továbbra is az Angular és a React projektsablonok alapja, mivel ASP.NET Core 2.1.
A változás oka
ASP.NET Core támogatja a különböző egyoldalas alkalmazások (SPA) keretrendszerekkel való integrációt, beleértve az Angulart, a Reactet és a Reactet a Redux-tal. Kezdetben ezekkel a keretrendszerekkel való integráció ASP.NET core-specifikus összetevőkkel történt, amelyek olyan forgatókönyveket kezeltek, mint a kiszolgálóoldali előrendelés és a Webpack-integráció. Ahogy telt az idő, az iparági szabványok megváltoztak. Az SPA-keretrendszerek mindegyike saját szabványos parancssori felületeket adott ki. Például az Angular CLI és a create-react-app.
Amikor ASP.NET Core 2.1 2018 májusában megjelent, a csapat reagált a szabványok változására. Az SPA-keretrendszerek saját eszközláncaival való integráció újabb és egyszerűbb módját biztosították. Az új integrációs mechanizmus létezik a csomagban Microsoft.AspNetCore.SpaServices.Extensions
, és a Core 2.1 ASP.NET óta az Angular és a React projektsablonok alapja marad.
Annak tisztázása érdekében, hogy a régebbi ASP.NET core-specifikus összetevők irrelevánsak és nem ajánlottak:
- A 2.1 előtti integrációs mechanizmus elavultként van megjelölve.
- A támogató npm-csomagok elavultként vannak megjelölve.
Javasolt művelet
Ha ezeket a csomagokat használja, frissítse az alkalmazásokat a funkció használatára:
- A csomagban
Microsoft.AspNetCore.SpaServices.Extensions
. - A használt SPA-keretrendszerek biztosítják
Az olyan funkciók engedélyezéséhez, mint a kiszolgálóoldali előrendelés és a gyakori elérésű modul újrabetöltése, tekintse meg a megfelelő SPA-keretrendszer dokumentációját. A funkció Microsoft.AspNetCore.SpaServices.Extensions
nem elavult, és továbbra is támogatott lesz.
Kategória
ASP.NET Core
Érintett API-k
Microsoft.AspNetCore.NodeServices.HostingModels.INodeInstance
Microsoft.AspNetCore.NodeServices.HostingModels.NodeInvocationException
Microsoft.AspNetCore.NodeServices.HostingModels.NodeInvocationInfo
Microsoft.AspNetCore.NodeServices.HostingModels.NodeServicesOptionsExtensions
Microsoft.AspNetCore.NodeServices.HostingModels.OutOfProcessNodeInstance
Microsoft.AspNetCore.SpaServices.Prerendering.ISpaPrerenderer
Microsoft.AspNetCore.SpaServices.Prerendering.ISpaPrerendererBuilder
Microsoft.AspNetCore.SpaServices.Prerendering.JavaScriptModuleExport
Microsoft.AspNetCore.SpaServices.Prerendering.PrerenderTagHelper
Microsoft.AspNetCore.SpaServices.Prerendering.RenderToStringResult
Microsoft.AspNetCore.SpaServices.Webpack.WebpackDevMiddlewareOptions
Microsoft.Extensions.DependencyInjection.NodeServicesServiceCollectionExtensions
Microsoft.Extensions.DependencyInjection.PrerenderingServiceCollectionExtensions
SLA-k: A SpaServices és a NodeServices többé nem kerül vissza a konzolnaplózóba
Microsoft.AspNetCore.SpaServices és Microsoft.AspNetCore.NodeServices csak akkor jeleníti meg a konzolnaplókat, ha a naplózás konfigurálva van.
Bevezetett verzió
3,0
Régi viselkedés
Microsoft.AspNetCore.SpaServices
és Microsoft.AspNetCore.NodeServices
arra szolgál, hogy automatikusan hozzon létre egy konzolnaplózót, ha nincs konfigurálva a naplózás.
Új viselkedés
Microsoft.AspNetCore.SpaServices
és Microsoft.AspNetCore.NodeServices
csak akkor jeleníti meg a konzolnaplókat, ha a naplózás konfigurálva van.
A változás oka
Össze kell hangolni a többi ASP.NET Core-csomag naplózási implementálását.
Javasolt művelet
Ha a régi viselkedésre van szükség, a konzolnaplózás konfigurálásához adja hozzá services.AddLogging(builder => builder.AddConsole())
a Setup.ConfigureServices
metódust.
Kategória
ASP.NET Core
Érintett API-k
Egyik sem
Cél keretrendszer: .NET-keretrendszer támogatás elvetve
A ASP.NET Core 3.0-tól kezdve a .NET-keretrendszer nem támogatott cél keretrendszer.
Módosítás leírása
.NET-keretrendszer 4.8 a .NET-keretrendszer utolsó főverziója. Az új ASP.NET Core-alkalmazásokat a .NET Core-ra kell építeni. A .NET Core 3.0 kiadásától kezdve a .NET Core részét képező ASP.NET Core 3.0-ra gondolhat.
A .NET-keretrendszer ASP.NET Core-t használó ügyfelek a 2.1 LTS-kiadással továbbra is teljes mértékben támogatott módon folytathatják. A 2.1 támogatása és karbantartása legalább 2021. augusztus 21-ig folytatódik. Ez a dátum a .NET támogatási szabályzatában szereplő LTS-kiadás deklarációját követő három év. A .NET-keretrendszer ASP.NET Core 2.1-csomagok támogatása határozatlan időre ki fog terjedni, hasonlóan a többi csomagalapú ASP.NET-keretrendszer karbantartási szabályzatához.
A .NET-keretrendszer és a .NET Core közötti portolással kapcsolatos további információkért lásd: Portolás a .NET Core-ba.
Microsoft.Extensions
nem érintik a csomagokat (például a naplózást, a függőséginjektálást és a konfigurációt) és az Entity Framework Core-t. Továbbra is támogatják a .NET Standardot.
A változás motivációjára vonatkozó további információkért lásd az eredeti blogbejegyzést.
Bevezetett verzió
3,0
Régi viselkedés
ASP.NET Core-alkalmazások .NET Core-on vagy .NET-keretrendszer futtathatók.
Új viselkedés
ASP.NET Core-alkalmazások csak .NET Core-on futtathatók.
Javasolt művelet
Válasszon a következő lehetőségek közül:
- Tartsa az alkalmazást a ASP.NET Core 2.1-en.
- Migrálja az alkalmazást és a függőségeket a .NET Core-ba.
Kategória
ASP.NET Core
Érintett API-k
Egyik sem
Alapvető .NET-kódtárak
- Azok az API-k, amelyek a jelentésverziót jelentik, és nem a fájlverziót jelentik
- Az egyéni EncoderFallbackBuffer-példányok nem eshetnek vissza rekurzívan
- Lebegőpontos formázási és elemzési viselkedésváltozások
- A lebegőpontos elemzési műveletek már nem hiúsulnak meg, vagy túlcsordulást jeleznek
- InvalidAsynchronousStateException áthelyezve egy másik szerelvénybe
- A rosszul formázott UTF-8 bájtsorozatok cseréje Unicode-irányelveket követ
- TypeDescriptionProviderAttribute áthelyezve egy másik szerelvénybe
- A ZipArchiveEntry már nem kezeli az inkonzisztens bejegyzésméretű archívumokat
- A FieldInfo.SetValue kivételt jelez a statikus, csak init-only mezők esetében
- A GroupCollection továbbítása az IEnumerable<T> kiterjesztési metódusaihoz egyértelműsítést igényel
Azok az API-k, amelyek a jelentésverziót jelentik, és nem a fájlverziót jelentik
A .NET Core-ban verziót vissza adó API-k közül sok most a termékverziót adja vissza a fájlverzió helyett.
Módosítás leírása
A .NET Core 2.2-es és korábbi verzióiban Environment.VersionRuntimeInformation.FrameworkDescriptiona .NET Core-szerelvények fájltulajdonságainak párbeszédpanelje a fájlverziót tükrözi. A .NET Core 3.0-tól kezdve a termékverziót tükrözik.
Az alábbi ábra a .NET Core 2.2 (bal oldalon) és a .NET Core 3.0 (jobb oldalon) System.Runtime.dll szerelvény verzióadatainak különbségét mutatja be a Windows Intéző fájltulajdonságok párbeszédpanelén látható módon.
Bevezetett verzió
3,0
Javasolt művelet
Nincs. Ennek a módosításnak intuitívabbá kell tennie a verzióészlelést, és nem kell eltűrnie.
Kategória
Alapvető .NET-kódtárak
Érintett API-k
Az egyéni EncoderFallbackBuffer-példányok nem eshetnek vissza rekurzívan
Az egyéni EncoderFallbackBuffer példányok nem eshetnek vissza rekurzív módon. A megvalósításnak EncoderFallbackBuffer.GetNextChar() olyan karaktersorozatot kell eredményeznie, amely a célkódolásra konvertálható. Ellenkező esetben kivétel történik.
Módosítás leírása
A karakterről bájtra transzkódolási művelet során a futtatókörnyezet észleli a hibásan formázott vagy nem konvertálható UTF-16 sorozatokat, és megadja ezeket a karaktereket a EncoderFallbackBuffer.Fallback metódusnak. A Fallback
metódus meghatározza, hogy mely karaktereket kell helyettesíteni az eredeti nem konverbilis adatokkal, és ezeket a karaktereket egy ciklus meghívásával EncoderFallbackBuffer.GetNextChar üríti ki a rendszer.
A futtatókörnyezet ezután megpróbálja átkódolni ezeket a helyettesítő karaktereket a célkódolásra. Ha ez a művelet sikeres, a futtatókörnyezet továbbra is átkódolást hajt végre onnan, ahol az eredeti bemeneti sztringben abbahagyta.
Korábban az egyéni implementációk EncoderFallbackBuffer.GetNextChar() olyan karaktersorozatokat adhatnak vissza, amelyek nem konvertálhatók a célkódolásra. Ha a helyettesítő karakterek nem kódolhatók át a célkódolásra, a futtatókörnyezet ismét meghívja a EncoderFallbackBuffer.Fallback metódust a helyettesítő karakterekkel, és azt várja, hogy a EncoderFallbackBuffer.GetNextChar() metódus egy új helyettesítési sorozatot ad vissza. Ez a folyamat addig folytatódik, amíg a futtatókörnyezet végül egy jól formázott, átalakítható helyettesítést nem lát, vagy amíg el nem éri a maximális rekurziós számot.
A .NET Core 3.0-tól kezdve az egyéni implementációknak EncoderFallbackBuffer.GetNextChar() vissza kell adniuk a célkódolásra konvertálható karaktersorozatokat. Ha a helyettesítő karakterek nem kódolhatók át a célkódolásra, a rendszer egy ArgumentException karaktert ad vissza. A futtatókörnyezet többé nem indít rekurzív hívásokat a EncoderFallbackBuffer példányba.
Ez a viselkedés csak akkor érvényes, ha a következő három feltétel teljesül:
- A futtatókörnyezet egy rosszul formázott UTF-16 sorozatot vagy egy UTF-16 sorozatot észlel, amely nem konvertálható a célkódolásra.
- EncoderFallback Egyéni beállítás van megadva.
- Az egyéni EncoderFallback kísérletek egy új rosszul formázott vagy nem konvertálható UTF-16 sorozat helyettesítésére.
Bevezetett verzió
3,0
Javasolt művelet
A legtöbb fejlesztőnek nem kell semmilyen műveletet elvégeznie.
Ha egy alkalmazás egyéni EncoderFallback és EncoderFallbackBuffer osztályt használ, győződjön meg arról, hogy a tartalék puffert EncoderFallbackBuffer.Fallback jól formázott UTF-16-adatokkal tölti fel, amelyek közvetlenül konvertálhatók a célkódolásra, amikor a futtatókörnyezet először meghívja a Fallback metódust.
Kategória
Alapvető .NET-kódtárak
Érintett API-k
Módosult a lebegőpontos formázás és elemzési viselkedés
A lebegőpontos elemzési és formázási viselkedés (a típusok és Single a Double típusok szerint) most már Enterprise kiadás E-kompatibilis. Ez biztosítja, hogy a lebegőpontos típusok viselkedése a .NET-ben megegyezik a többi I Enterprise kiadás E-kompatibilis nyelv viselkedésével. Például mindig meg kell egyeznie azzal, double.Parse("SomeLiteral")
amit a C# állít elő.double x = SomeLiteral
Módosítás leírása
A .NET Core 2.2-ben és a korábbi verziókban a formázás Double.ToString és Single.ToStringaz elemzés a következővelDouble.Parse: , Double.TryParse, Single.Parseés Single.TryParse nem I Enterprise kiadás E-kompatibilis. Ennek eredményeképpen lehetetlen garantálni, hogy egy érték lekerekítve legyen bármilyen támogatott szabványos vagy egyéni formátumsztringgel. Egyes bemenetek esetében a formázott érték elemzésének kísérlete sikertelen lehet, mások esetében pedig az elemzési érték nem egyenlő az eredeti értékkel.
A .NET Core 3.0-tól kezdve a lebegőpontos elemzési és formázási műveletek I Enterprise kiadás E 754-kompatibilisek.
Az alábbi táblázat két kódrészletet és a .NET Core 2.2 és a .NET Core 3.1 közötti kimenet változását mutatja be.
Kódrészletet | Kimenet a .NET Core 2.2-n | Kimenet a .NET Core 3.1-en |
---|---|---|
Console.WriteLine((-0.0).ToString()); |
0 | 0- |
var value = -3.123456789123456789; Console.WriteLine(value == double.Parse(value.ToString())); |
False |
True |
További információkért tekintse meg a lebegőpontos elemzési és formázási fejlesztéseket a .NET Core 3.0 blogbejegyzésében.
Bevezetett verzió
3,0
Javasolt művelet
A lebegőpontos elemzési és formázási fejlesztések meglévő kódszakaszáragyakorolt lehetséges hatás a .NET Core 3.0 blogbejegyzésben arra utal, hogy a kódon elvégezhet néhány módosítást, ha meg szeretné tartani az előző viselkedést.
- A formázás egyes eltérései esetén egy másik formátumsztring megadásával az előző viselkedésnek megfelelő viselkedést kaphat.
- Az elemzési különbségek esetén nincs olyan mechanizmus, amely visszaeshet az előző viselkedésre.
Kategória
Alapvető .NET-kódtárak
Érintett API-k
A lebegőpontos elemzési műveletek már nem hiúsulnak meg, vagy túlcsordulást jeleznek
A lebegőpontos elemzési metódusok már nem adnak vissza vagy nem adnak OverflowException vissza false
értéket, ha olyan sztringet elemeznek, amelynek numerikus értéke kívül esik a lebegőpontos vagy Double a Single lebegőpontos típus tartományán.
Módosítás leírása
A .NET Core 2.2-es és korábbi verzióiban a Double.Parse metódusok olyan Single.Parse értékeket adnak OverflowException meg, amelyek nem tartoznak a megfelelő típus tartományába. A Double.TryParse tartományon kívüli numerikus értékek sztringreprezentációinak és Single.TryParse metódusainak visszaadása false
.
A .NET Core 3.0-tól kezdve a Double.Parse, Double.TryParse, Single.Parseés Single.TryParse metódusok már nem hiúsulnak meg a tartományon kívüli numerikus sztringek elemzésekor. Ehelyett az elemzési metódusok a Double túllépett Double.MaxValueértékeknél térnek visszaDouble.PositiveInfinity, és a kisebb Double.MinValueértékeknél térnek visszaDouble.NegativeInfinity. Hasonlóképpen, az elemzési metódusok a Single nagyobb Single.MaxValueértékeket is visszaadjákSingle.PositiveInfinity, és a kisebb Single.MinValueértékeket adnak visszaSingle.NegativeInfinity.
Ez a módosítás a jobb I Enterprise kiadás E 754:2008 megfelelőség érdekében történt.
Bevezetett verzió
3,0
Javasolt művelet
Ez a módosítás kétféleképpen befolyásolhatja a kódot:
A kód a túlcsorduláskor végrehajtandó kezelőtől OverflowException függ. Ebben az esetben távolítsa el az utasítást, és helyezze el a
catch
szükséges kódot egyIf
utasításban, amely ellenőrzi, hogy van-e Double.IsInfinitytrue
.Single.IsInfinityA kód feltételezi, hogy a lebegőpontos értékek nem
Infinity
. Ebben az esetben hozzá kell adnia a szükséges kódot a lebegőpontos értékekPositiveInfinity
ésNegativeInfinity
a .
Kategória
Alapvető .NET-kódtárak
Érintett API-k
InvalidAsynchronousStateException áthelyezve egy másik szerelvénybe
Az InvalidAsynchronousStateException osztály át lett helyezve.
Módosítás leírása
A .NET Core 2.2-es és korábbi verzióiban az InvalidAsynchronousStateException osztály a System.ComponentModel.TypeConverter szerelvényben található.
A .NET Core 3.0-tól kezdve a System.ComponentModel.Primitives szerelvényben található.
Bevezetett verzió
3,0
Javasolt művelet
Ez a változás csak azokat az alkalmazásokat érinti, amelyek tükrözést használnak a InvalidAsynchronousStateException terheléshez egy olyan metódus meghívásávalActivator.CreateInstance, mint például Assembly.GetType egy olyan túlterhelés, amely feltételezi, hogy a típus egy adott szerelvényben található. Ha ez a helyzet, frissítse a metódushívásban hivatkozott szerelvényt, hogy tükrözze a típus új szerelvényhelyét.
Kategória
Alapvető .NET-kódtárak
Érintett API-k
Nincs.
A rosszul formázott UTF-8 bájtsorozatok cseréje Unicode-irányelveket követ
Ha az UTF8Encoding osztály hibás UTF-8 bájtsorozattal találkozik egy bájtról karakterre történő átkódolási művelet során, akkor ezt a sorozatot a kimeneti sztringben egy ' ' (U+FFFD REPLACE CHARACTER) karakterre cseréli. A .NET Core 3.0 eltér a .NET Core korábbi verzióitól és a .NET-keretrendszer a Unicode ajánlott eljárásának követésével, amely a helyettesítést a transzkódolási művelet során hajtja végre.
Ez egy nagyobb erőfeszítés része az UTF-8 kezelésének javítása a .NET-ben, beleértve az új System.Text.Unicode.Utf8 és System.Text.Rune a típusok által is. A UTF8Encoding típus továbbfejlesztett hibakezelési mechanikát kapott, hogy az az újonnan bevezetett típusokkal összhangban hozza létre a kimenetet.
Módosítás leírása
A .NET Core 3.0-tól kezdve a bájtok karakterekre való átkódolásakor az osztály a UTF8Encoding Unicode ajánlott eljárásai alapján végez karakterhelyettesítést. A használt helyettesítési mechanizmust a Unicode Standard 12.0-s, 3.9-es (PDF) verziója ismerteti a maximális alrészek U+FFFD helyettesítése című címsorban.
Ez a viselkedés csak akkor érvényes, ha a bemeneti bájtsor hibásan formázott UTF-8 adatokat tartalmaz. Továbbá, ha a UTF8Encoding példányt létrehozták throwOnInvalidBytes: true
, a UTF8Encoding
példány továbbra is érvénytelen bemenetet ad vissza ahelyett, hogy U+FFFD-cserét végez. A konstruktorról további információt a UTF8Encoding
UTF8Encoding(Boolean, Boolean).
Az alábbi táblázat egy érvénytelen 3 bájtos bemenettel szemlélteti a változás hatását:
Rosszul formázott 3 bájtos bemenet | Kimenet a .NET Core 3.0 előtt | Kimenet a .NET Core 3.0-val kezdődően |
---|---|---|
[ ED A0 90 ] |
[ FFFD FFFD ] (2 karakteres kimenet) |
[ FFFD FFFD FFFD ] (3 karakteres kimenet) |
A 3 karakteres kimenet az előnyben részesített kimenet a korábban csatolt Unicode Standard PDF 3–9. táblázata szerint.
Bevezetett verzió
3,0
Javasolt művelet
Nincs szükség műveletre a fejlesztő részéről.
Kategória
Alapvető .NET-kódtárak
Érintett API-k
TypeDescriptionProviderAttribute áthelyezve egy másik szerelvénybe
Az TypeDescriptionProviderAttribute osztály át lett helyezve.
Módosítás leírása
A .NET Core 2.2-es és korábbi verzióiban az TypeDescriptionProviderAttribute osztály a System.ComponentModel.TypeConverter szerelvényben található.
A .NET Core 3.0-tól kezdve a System.ObjectModel szerelvényben található.
Bevezetett verzió
3,0
Javasolt művelet
Ez a változás csak azokat az alkalmazásokat érinti, amelyek tükröződéssel töltik be a TypeDescriptionProviderAttribute típust egy olyan metódus meghívásával, mint például Assembly.GetType egy olyan túlterhelés Activator.CreateInstance , amely feltételezi, hogy a típus egy adott szerelvényben található. Ebben az esetben a metódushívásban hivatkozott szerelvényt frissíteni kell, hogy tükrözze a típus új szerelvényhelyét.
Kategória
Windows Forms
Érintett API-k
Nincs.
A ZipArchiveEntry már nem kezeli az inkonzisztens bejegyzésméretű archívumokat
A zip-archívumok a tömörített és a tömörítetlen méretet is felsorolják a központi könyvtárban és a helyi fejlécben. Maga a belépési adatok is jelzik a méretét. A .NET Core 2.2-ben és a korábbi verziókban ezek az értékek soha nem lettek ellenőrizve a konzisztencia szempontjából. A .NET Core 3.0-tól kezdve ezek most már elérhetők.
Módosítás leírása
A .NET Core 2.2-ben és a korábbi verziókban akkor is sikeres, ZipArchiveEntry.Open() ha a helyi fejléc nem ért egyet a zip-fájl központi fejlécével. Az adatok a tömörített stream végéig lesznek tömörítve, még akkor is, ha a fájl hossza meghaladja a központi könyvtárban/helyi fejlécben felsorolt tömörítetlen fájlméretet.
A .NET Core 3.0-tól kezdve a metódus ellenőrzi, hogy a ZipArchiveEntry.Open() helyi fejléc és a központi fejléc megegyezik-e egy bejegyzés tömörített és tömörítetlen méretével. Ha nem, a metódus egy InvalidDataException olyan, ha az archívum helyi fejléc- és/vagy adatleíró listamérete nem egyezik meg a zip-fájl központi könyvtárával. Bejegyzés olvasásakor a rendszer csonkolja a tömörített adatokat a fejlécben felsorolt tömörítetlen fájlméretre.
Ez a módosítás annak biztosítása érdekében történt, hogy a ZipArchiveEntry rendszer helyesen adja meg az adatok méretét, és hogy csak az adatmennyiség legyen olvasható.
Bevezetett verzió
3,0
Javasolt művelet
Csomagolja újra a zip archívumot, amely ezeket a problémákat mutatja.
Kategória
Alapvető .NET-kódtárak
Érintett API-k
- ZipArchiveEntry.Open()
- ZipFileExtensions.ExtractToDirectory
- ZipFileExtensions.ExtractToFile
- ZipFile.ExtractToDirectory
A FieldInfo.SetValue kivételt jelez a statikus, csak init-only mezők esetében
A .NET Core 3.0-tól kezdve kivétel történik, ha egy statikus mező InitOnly értékét hívással System.Reflection.FieldInfo.SetValuepróbálja beállítani.
Módosítás leírása
A .NET Core 3.0 előtti .NET-keretrendszer és verzióiban beállíthatja egy állandó statikus mező értékét az inicializálás után (olvashatóan C#-ban) hívássalSystem.Reflection.FieldInfo.SetValue. Az ilyen mezők ilyen módon történő beállítása azonban kiszámíthatatlan viselkedést eredményezett a cél-keretrendszer és az optimalizálási beállítások alapján.
A .NET Core 3.0-s és újabb verzióiban, amikor statikus mezőre InitOnly hív felSetValue, a rendszer kivételt System.FieldAccessException jelez.
Tipp.
A InitOnly mező olyan mező, amelyet csak a deklaráláskor vagy az azt tartalmazó osztály konstruktorában lehet beállítani. Más szóval az inicializálás után állandó.
Bevezetett verzió
3,0
Javasolt művelet
Statikus inicializálás, InitOnly statikus konstruktor mezői. Ez a dinamikus és a nem dinamikus típusokra is vonatkozik.
Másik lehetőségként eltávolíthatja az attribútumot a FieldAttributes.InitOnly mezőből, majd meghívhatja FieldInfo.SetValue.
Kategória
Alapvető .NET-kódtárak
Érintett API-k
- FieldInfo.SetValue(Object, Object)
- FieldInfo.SetValue(Object, Object, BindingFlags, Binder, CultureInfo)
A GroupCollection továbbítása az IEnumerable<T> kiterjesztési metódusaihoz egyértelműsítést igényel
Ha olyan bővítménymetódust hív meg, amely egy adott bővítményt GroupCollectionhasználIEnumerable<T>
, a típust egy öntöttel kell egyértelműsítenie.
Módosítás leírása
A .NET Core 3.0-tól System.Text.RegularExpressions.GroupCollection kezdve az általa implementálható egyéb típusok mellett implementál IEnumerable<KeyValuePair<String,Group>>
is, beleértve a IEnumerable<Group>
. Ez kétértelműséget eredményez egy olyan bővítménymetódus meghívásakor, amely egy IEnumerable<T>. Ha például egy példányon GroupCollection meghív egy ilyen bővítménymetódust, Enumerable.Counta következő fordítóhiba jelenik meg:
CS1061: A "GroupCollection" nem tartalmaz definíciót a "Count" kifejezéshez, és nem található akadálymentes "Count" kiterjesztési módszer, amely elfogadja a "GroupCollection" típusú első argumentumot (hiányzik egy használt irányelv vagy egy szerelvényhivatkozás?)
A .NET korábbi verzióiban nem volt kétértelműség és fordítási hiba.
Bevezetett verzió
3,0
A változás oka
Ez nem szándékos törés volt. Mivel már egy ideje így van, nem tervezzük visszaállítani. Emellett egy ilyen változás maga is törés lenne.
Javasolt művelet
Például GroupCollection egyértelműsítse azokat a bővítménymeta-metódusokat, amelyek egy leadott elemet fogadnak IEnumerable<T>
el.
// Without a cast - causes CS1061.
match.Groups.Count(_ => true)
// With a disambiguating cast.
((IEnumerable<Group>)m.Groups).Count(_ => true);
Kategória
Alapvető .NET-kódtárak
Érintett API-k
Minden olyan bővítménymetódus, amely elfogad egy bővítményt IEnumerable<T> , hatással van rá. Példa:
- System.Collections.Immutable.ImmutableArray.ToImmutableArray<TSource>(IEnumerable<TSource>)
- System.Collections.Immutable.ImmutableDictionary.ToImmutableDictionary
- System.Collections.Immutable.ImmutableHashSet.ToImmutableHashSet
- System.Collections.Immutable.ImmutableList.ToImmutableList<TSource>(IEnumerable<TSource>)
- System.Collections.Immutable.ImmutableSortedDictionary.ToImmutableSortedDictionary
- System.Collections.Immutable.ImmutableSortedSet.ToImmutableSortedSet
- System.Data.DataTableExtensions.CopyToDataTable
System.Linq.Enumerable
A legtöbb módszer, például:System.Linq.Enumerable.Count- System.Linq.ParallelEnumerable.AsParallel
- System.Linq.Queryable.AsQueryable
Kriptográfia
- A BEGIN MEGBÍZHATÓ TANÚSÍTVÁNY szintaxisa már nem támogatott Linuxon
- A EnvelopedCms alapértelmezett értéke az AES-256 titkosítás
- Nőtt az RSAOpenSsl kulcslétrehozás minimális mérete
- A .NET Core 3.0 az OpenSSL 1.1.x-et részesíti előnyben az OpenSSL 1.0.x-hez
- A CryptoStream.Dispose csak íráskor alakítja át az utolsó blokkot
A "BEGIN TRUSTED CERTIFICATE" szintaxis a linuxos főtanúsítványok esetében már nem támogatott
A Linux és más Unix-szerű rendszerek főtanúsítványai (de nem macOS) kétféle formában jelenhetnek meg: a standard BEGIN CERTIFICATE
PEM fejlécben és az OpenSSL-specifikus BEGIN TRUSTED CERTIFICATE
PEM-fejlécben. Ez utóbbi szintaxis lehetővé teszi a .NET Core System.Security.Cryptography.X509Certificates.X509Chain osztályával kompatibilitási problémákat okozó további konfigurációt. BEGIN TRUSTED CERTIFICATE
A főtanúsítvány tartalmát a láncmotor már nem tölti be a .NET Core 3.0-tól kezdve.
Módosítás leírása
Korábban a legfelső szintű megbízhatósági lista feltöltéséhez BEGIN TRUSTED CERTIFICATE
mind a BEGIN CERTIFICATE
szintaxist, mind a szintaxist használták. Ha a BEGIN TRUSTED CERTIFICATE
szintaxist használta, és további beállításokat adott meg a fájlban, előfordulhat, X509Chain hogy a lánc megbízhatósági kapcsolatát explicit módon letiltották (X509ChainStatusFlags.ExplicitDistrust). Ha azonban a tanúsítvány egy korábban betöltött fájl szintaxisával BEGIN CERTIFICATE
is meg lett adva, a lánc megbízhatósága engedélyezve lett.
A .NET Core 3.0-tól BEGIN TRUSTED CERTIFICATE
kezdődően a tartalom már nem olvasható. Ha a tanúsítványt nem szabványos BEGIN CERTIFICATE
szintaxissal adhatók meg, akkor a X509Chain gyökér nem megbízható (X509ChainStatusFlags.UntrustedRoot).
Bevezetett verzió
3,0
Javasolt művelet
A legtöbb alkalmazást nem érinti ez a módosítás, de azok az alkalmazások, amelyek nem látják mindkét főtanúsítvány-forrást az engedélyek miatt, a frissítés után váratlan UntrustedRoot
hibák léphetnek fel.
Számos Linux-disztribúció (vagy disztribúció) főtanúsítványokat ír két helyre: egy egytanúsítvány-fájlonkénti könyvtárba és egy egyfájlos összefűzésbe. Egyes disztribúciók esetében az egytanúsítványonkénti könyvtár a BEGIN TRUSTED CERTIFICATE
szintaxist használja, míg a fájlösszefűzés a standard BEGIN CERTIFICATE
szintaxist használja. Győződjön meg arról, hogy az egyéni főtanúsítványok a fenti helyek legalább egyikéhez hasonlóan BEGIN CERTIFICATE
vannak hozzáadva, és hogy mindkét hely olvasható legyen az alkalmazás számára.
A tipikus könyvtár a /etc/ssl/certs/ és a tipikus összefűzött fájl a /etc/ssl/cert.pem. Használja a parancsot openssl version -d
a platformspecifikus gyökér meghatározásához, amely eltérhet az /etc/ssl/-től. Az Ubuntu 18.04-ben például a könyvtár /usr/lib/ssl/certs/ , a fájl pedig /usr/lib/ssl/cert.pem. A /usr/lib/ssl/certs/ azonban nem létezik az /etc/ssl/certs/ és /usr/lib/ssl/cert.pem szimlink.
$ 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
Kategória
Kriptográfia
Érintett API-k
A EnvelopedCms alapértelmezett értéke az AES-256 titkosítás
Az alapértelmezett szimmetrikus titkosítási algoritmus EnvelopedCms
tripleDES-ről AES-256-ra változott.
Módosítás leírása
A korábbi verziókban, amikor EnvelopedCms szimmetrikus titkosítási algoritmus megadása nélkül, konstruktor-túlterhelésen keresztül titkosítják az adatokat, az adatok a TripleDES/3DES/3DEA/DES3-EDE algoritmussal lesznek titkosítva.
A .NET Core 3.0-tól kezdve (a System.Security.Cryptography.Pkcs NuGet csomag 4.6.0-s verzióján keresztül) az alapértelmezett algoritmus AES-256-ra módosult az algoritmusok modernizálása és az alapértelmezett beállítások biztonsága érdekében. Ha egy üzenet címzett tanúsítványa (nem EC) Diffie-Hellman nyilvános kulccsal rendelkezik, a titkosítási művelet meghiúsulhat CryptographicException a mögöttes platform korlátai miatt.
Az alábbi mintakódban az adatok tripleDES-sel titkosítva lesznek, ha a .NET Core 2.2-ben vagy korábbi verzióban futnak. Ha a .NET Core 3.0-s vagy újabb verzióján fut, az AES-256-tal van titkosítva.
EnvelopedCms cms = new EnvelopedCms(content);
cms.Encrypt(recipient);
return cms.Encode();
Bevezetett verzió
3,0
Javasolt művelet
Ha a módosítás negatívan érinti, visszaállíthatja a TripleDES-titkosítást úgy, hogy explicit módon megadja a titkosítási algoritmus azonosítóját egy EnvelopedCms olyan konstruktorban, amely tartalmaz egy típusparamétert AlgorithmIdentifier, például:
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();
Kategória
Kriptográfia
Érintett API-k
Nőtt az RSAOpenSsl kulcslétrehozás minimális mérete
Az új RSA-kulcsok linuxos generálásának minimális mérete 384 bitesről 512 bitesre nőtt.
Módosítás leírása
A .NET Core 3.0-tól kezdve a tulajdonság által LegalKeySizes
az RSA-példányokon RSA.CreateRSAOpenSslRSACryptoServiceProvider jelentett minimális jogi kulcsméret 384-ről 512-re nőtt.
Ennek eredményeképpen a .NET Core 2.2-ben és a korábbi verziókban egy metódushívás, például RSA.Create(384)
sikeres lesz. A .NET Core 3.0-s és újabb verzióiban a metódushívás RSA.Create(384)
kivételt jelez, amely azt jelzi, hogy a méret túl kicsi.
Ez a módosítás azért történt, mert a Linuxon a titkosítási műveleteket végző OpenSSL minimálisra emelte az 1.0.2 és az 1.1.0 verzió között. A .NET Core 3.0 az OpenSSL 1.1.x és 1.0.x közötti verziót részesíti előnyben, a minimális jelentett verzió pedig az új, magasabb függőségi korlátozásnak megfelelően lett létrehozva.
Bevezetett verzió
3,0
Javasolt művelet
Ha az érintett API-k bármelyikét meghívja, győződjön meg arról, hogy a létrehozott kulcsok mérete nem kisebb a szolgáltató minimális méreténél.
Feljegyzés
A 384 bites RSA már nem biztonságosnak számít (ahogy az 512 bites RSA is). A modern javaslatok, például a NIST Special Publication 800-57 Part 1 Revision 4, 2048 bitesre javasolják az újonnan létrehozott kulcsok minimális méretét.
Kategória
Kriptográfia
Érintett API-k
A .NET Core 3.0 az OpenSSL 1.1.x-et részesíti előnyben az OpenSSL 1.0.x-hez
A Linuxhoz készült .NET Core, amely több Linux-disztribúcióban is működik, támogatja az OpenSSL 1.0.x és az OpenSSL 1.1.x rendszert is. A .NET Core 2.1 és a .NET Core 2.2 először az 1.0.x-et keresi, majd visszaesik az 1.1.x-esre; a .NET Core 3.0 először az 1.1.x-et keresi. Ez a módosítás új titkosítási szabványok támogatásának céljából történt.
Ez a változás hatással lehet a .NET Core OpenSSL-specifikus interoptípusaival platformfüggetlen kódtárakra vagy alkalmazásokra.
Módosítás leírása
A .NET Core 2.2-ben és a korábbi verziókban a futtatókörnyezet az OpenSSL 1.0.x 1.1.x-et részesíti előnyben. Ez azt jelenti, hogy az IntPtr OpenSSL-vel való interop és SafeHandle típusok a libcrypto.so.1.0.0 / libcrypto.so.1.0 / libcrypto.so.10 beállítással használhatók.
A .NET Core 3.0-tól kezdve a futtatókörnyezet inkább az OpenSSL 1.1.x-et tölti be az OpenSSL 1.0.x-hez, így az IntPtr OpenSSL-vel való interop-típusok használata SafeHandle a libcrypto.so.1.1/libcrypto.so.11 / libcrypto.so.1.1.0 / libcrypto.so.1.1.1 beállítás szerint. Emiatt előfordulhat, hogy az OpenSSL-vel közvetlenül együttműködő kódtárak és alkalmazások nem kompatibilisek a .NET Core által közzétett értékekkel a .NET Core 2.1-ről vagy a .NET Core 2.2-ről való frissítéskor.
Bevezetett verzió
3,0
Javasolt művelet
Az OpenSSL-vel közvetlen műveleteket végező kódtáraknak és alkalmazásoknak körültekintőnek kell lenniük annak biztosítása érdekében, hogy az OpenSSL ugyanazon verzióját használják, mint a .NET Core-futtatókörnyezetet.
A .NET Core titkosítási típusait vagy értékeit közvetlenül az OpenSSL-vel használó IntPtr kódtáraknak vagy SafeHandle alkalmazásoknak össze kell hasonlítaniuk az új SafeEvpPKeyHandle.OpenSslVersion tulajdonsággal használt kódtár verzióját, hogy a mutatók kompatibilisek legyenek.
Kategória
Kriptográfia
Érintett API-k
- SafeEvpPKeyHandle
- RSAOpenSsl(IntPtr)
- RSAOpenSsl(SafeEvpPKeyHandle)
- RSAOpenSsl.DuplicateKeyHandle()
- DSAOpenSsl(IntPtr)
- DSAOpenSsl(SafeEvpPKeyHandle)
- DSAOpenSsl.DuplicateKeyHandle()
- ECDsaOpenSsl(IntPtr)
- ECDsaOpenSsl(SafeEvpPKeyHandle)
- ECDsaOpenSsl.DuplicateKeyHandle()
- ECDiffieHellmanOpenSsl(IntPtr)
- ECDiffieHellmanOpenSsl(SafeEvpPKeyHandle)
- ECDiffieHellmanOpenSsl.DuplicateKeyHandle()
- X509Certificate.Handle
A CryptoStream.Dispose csak íráskor alakítja át az utolsó blokkot
A CryptoStream.Dispose műveletek befejezéséhez CryptoStream
használt metódus már nem próbálja átalakítani az utolsó blokkot olvasáskor.
Módosítás leírása
A korábbi .NET-verziókban, ha egy felhasználó hiányos olvasást CryptoStreamRead hajtott végre módban, a Dispose metódus kivételt okozhat (például ha az AES-t párnázással használja). A kivétel azért történt, mert az utolsó blokkot megpróbálták átalakítani, de az adatok hiányosak voltak.
A .NET Core 3.0-s és újabb verzióiban Dispose már nem próbálja átalakítani az utolsó blokkot olvasáskor, ami lehetővé teszi a hiányos olvasást.
A változás oka
Ez a módosítás lehetővé teszi a titkosítási stream hiányos olvasását egy hálózati művelet megszakítása esetén, kivétel nélkül.
Bevezetett verzió
3,0
Javasolt művelet
A legtöbb alkalmazást nem érinti ez a változás.
Ha az alkalmazás korábban kivételt észlelt hiányos olvasás esetén, törölheti a catch
blokkot.
Ha az alkalmazás a kivonatolási forgatókönyvek utolsó blokkjának átalakítását használta, előfordulhat, hogy a teljes streamet be kell olvasnia, mielőtt az el lett volna osztva.
Kategória
Kriptográfia
Érintett API-k
Entity Framework Core
Az Entity Framework Core kompatibilitástörő változásai
Globalizáció
A "C" területi térképek az invariáns területi beállításhoz
A .NET Core 2.2 és korábbi verziói az alapértelmezett ICU-viselkedéstől függenek, amely a "C" területi beállításokat a en_US_POSIX területi beállításhoz rendeli. A en_US_POSIX területi beállítás nem megfelelő rendezési viselkedéssel rendelkezik, mivel nem támogatja a kis- és nagybetűk megkülönböztetéses sztringek összehasonlítását. Mivel egyes Linux-disztribúciók alapértelmezett területi beállításként a "C" területi beállítást adták meg, a felhasználók váratlan viselkedést tapasztaltak.
Módosítás leírása
A .NET Core 3.0-tól kezdve a "C" területi leképezés az Invariant területi beállítás használatára változott en_US_POSIX helyett. A "C" területi beállítás az Invariant-leképezésre a Windowsra is alkalmazva van a konzisztencia érdekében.
A "C" en_US_POSIX kultúrára való leképezése zavart okozott az ügyfelek számára, mivel en_US_POSIX nem támogatja a kis- és nagybetűk érzéketlen rendezési/keresési sztringműveleteit. Mivel a "C" területi beállítás alapértelmezett területi beállításként használatos néhány Linux-disztribúcióban, az ügyfelek ezt a nem kívánt viselkedést tapasztalták ezeken az operációs rendszereken.
Bevezetett verzió
3,0
Javasolt művelet
Semmi konkrétabb, mint a tudatosság a változás. Ez a módosítás csak a "C" területi leképezést használó alkalmazásokat érinti.
Kategória
Globalizáció
Érintett API-k
Ez a változás minden rendezési és kulturális API-t érint.
Msbuild
Erőforrás-jegyzékfájl nevének módosítása
A .NET Core 3.0-tól kezdve az alapértelmezett esetben az MSBuild egy másik jegyzékfájlnevet hoz létre az erőforrásfájlokhoz.
Bevezetett verzió
3,0
Módosítás leírása
A .NET Core 3.0 előtt, ha nem LogicalName
, ManifestResourceName
vagy DependentUpon
metaadatokat adott meg a projektfájl egyik EmbeddedResource
eleméhez, az MSBuild létrehozott egy jegyzékfájlnevet a mintában <RootNamespace>.<ResourceFilePathFromProjectRoot>.resources
. Ha RootNamespace
nincs definiálva a projektfájlban, akkor alapértelmezés szerint a projekt neve lesz. Például egy Űrlap1.resx nevű erőforrásfájl létrehozott jegyzékneve a gyökérprojekt könyvtárában a MyProject.Form1.resources volt.
A .NET Core 3.0-tól kezdődően, ha egy erőforrásfájl azonos nevű forrásfájllal van együtt helyezve (például Form1.resx és Form1.cs), az MSBuild a forrásfájl típusadatait használja a jegyzékfájl nevének a mintában <Namespace>.<ClassName>.resources
való létrehozásához. A rendszer kinyeri a névteret és az osztálynevet a megosztott forrásfájl első típusából. Például egy Form1.resx nevű erőforrásfájl létrehozott jegyzékneve, amely egy Form1.cs nevű forrásfájllal van együtt helyezve, a MyNamespace.Form1.resources. Fontos megjegyezni, hogy a fájlnév első része eltér a .NET Core korábbi verzióitól (MyProject helyett MyNamespace).
Feljegyzés
Ha a projektfájl egyik EmbeddedResource
elemén meg van LogicalName
adva , ManifestResourceName
vagy DependentUpon
metaadatok vannak megadva, akkor ez a módosítás nem érinti ezt az erőforrásfájlt.
Ez a kompatibilitástörő változás a tulajdonság .NET Core-projektekhez való EmbeddedResourceUseDependentUponConvention
hozzáadásával lett bevezetve. Alapértelmezés szerint az erőforrásfájlok nincsenek explicit módon felsorolva egy .NET Core-projektfájlban, így nem DependentUpon
rendelkeznek metaadatokkal a létrehozott .resources fájl elnevezéséhez. Ha EmbeddedResourceUseDependentUponConvention
az alapértelmezett értékre true
van állítva, az MSBuild egy megosztott forrásfájlt keres, és kinyer egy névteret és egy osztálynevet a fájlból. Ha be false
van állítvaEmbeddedResourceUseDependentUponConvention
, az MSBuild az előző viselkedésnek megfelelően hozza létre a jegyzéknevet, amely egyesíti RootNamespace
és a relatív fájl elérési útját.
Javasolt művelet
A legtöbb esetben nincs szükség műveletre a fejlesztő részéről, és az alkalmazásnak továbbra is működnie kell. Ha azonban ez a módosítás megszakítja az alkalmazást, a következőkre van lehetőség:
Módosítsa a kódot az új jegyzéknévre való várakozáshoz.
A projektfájlban való beállítással
EmbeddedResourceUseDependentUponConvention
false
tiltsa le az új elnevezési konvenciót.<PropertyGroup> <EmbeddedResourceUseDependentUponConvention>false</EmbeddedResourceUseDependentUponConvention> </PropertyGroup>
Kategória
Msbuild
Érintett API-k
n/a
Hálózatkezelés
A HttpRequestMessage.Version alapértelmezett értéke 1.1-re módosult
A tulajdonság alapértelmezett értéke System.Net.Http.HttpRequestMessage.Version 2,0-ról 1,1-re módosult.
Bevezetett verzió
3,0
Módosítás leírása
A .NET Core 1.0-2.0-s verziójában a System.Net.Http.HttpRequestMessage.Version tulajdonság alapértelmezett értéke 1,1. A .NET Core 2.1-től kezdve 2.1-re módosult.
A .NET Core 3.0-tól kezdődően a System.Net.Http.HttpRequestMessage.Version tulajdonság által visszaadott alapértelmezett verziószám ismét 1.1.
Javasolt művelet
Frissítse a kódot, ha az attól függ, hogy a System.Net.Http.HttpRequestMessage.Version tulajdonság 2.0-s alapértelmezett értéket ad vissza.
Kategória
Hálózatkezelés
Érintett API-k
Lásd még
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: