可為 Null 的參考型別註釋已變更
從 ASP.NET Core 5.0 開始,可為 NULL 性註釋已套用至一部份的程式碼。 我們從作業的一開始就預期到這些註釋中會出現錯誤,並且需要製作修正程式。 ASP.NET Core 6.0 中有部分先前已套用的註釋即將更新。 其中一些變更會被視為來源中斷性變更。 這種變更會使 API 變得不相容或更加嚴格。 在啟用可為 Null 的參考型別的專案中使用更新的 API 時,可能會產生建置階段警告。
若要查看討論內容,請參閱 GitHub 問題 dotnet/aspnetcore#27564。
導入的版本
ASP.NET Core 6.0
舊的行為
受影響的 API 有錯誤可為 Null 的參考型別註解。 建置警告不存在或不正確。
新的行為
產生新的建置警告。 不會再針對受影響的 API 產生錯誤的建置警告。
變更原因
我們透過意見反應和進一步測試,判斷受影響 API 的可為 Null 註釋並不正確。 更新的註釋現在會正確代表 API 的可 NULL 性合約。
建議的動作
更新呼叫這些 API 的程式碼,以反映修訂的可 NULL 性合約。
受影響的 API
- ParameterView.FromDictionary
- Renderer.DispatchEventAsync
- RenderTreeEdit.RemovedAttributeName
- AuthenticationSchemeOptions.ForwardDefaultSelector
- RangeConditionHeaderValue.RangeConditionHeaderValue
- IConnectionListener.AcceptAsync
- IApplicationDiscriminator.Discriminator
- DataProtectionOptions.ApplicationDiscriminator
- AuthenticatedEncryptorFactory.CreateEncryptorInstance
- CngCbcAuthenticatedEncryptorFactory.CreateEncryptorInstance
- CngGcmAuthenticatedEncryptorFactory.CreateEncryptorInstance
- IAuthenticatedEncryptorFactory.CreateEncryptorInstance
- ManagedAuthenticatedEncryptorFactory.CreateEncryptorInstance
- IKey.CreateEncryptor
- KeyManagementOptions.AuthenticatedEncryptorConfiguration
- KeyManagementOptions.XmlEncryptor
- KeyManagementOptions.XmlRepository
- ICertificateResolver.ResolveCertificate
- DataProtectionUtilityExtensions.GetApplicationUniqueIdentifier
- FileSystemXmlRepository.DefaultKeyStorageDirectory
- RegistryXmlRepository.DefaultRegistryKey
- CertificateResolver.ResolveCertificate
- Endpoint.Endpoint
- Endpoint.RequestDelegate
- RouteValueDictionary.TryAdd
- LinkGenerator.GetUriByAddress
- IFeatureCollection.Set
- FeatureCollection.Set
- IFeatureCollection.Get
- ITicketStore.RetrieveAsync
- IFeatureCollection.Get<TFeature>()
- IFeatureCollection.Set<TFeature>(TFeature)
- FeatureCollection.Set<TFeature>(TFeature)
- ModelStateDictionary.SetModelValue(String, Object, String)
- ModelStateDictionary.Item[String]
- ClientValidatorItem.ClientValidatorItem
- ClientValidatorItem.Validator
- Endpoint.Endpoint
- RouteValueDictionary.TryAdd(String, Object)>
- LinkGenerator.GetUriByAddress<TAddress>(TAddress, RouteValueDictionary, String, HostString, PathString, FragmentString, LinkOptions)
- IApplicationDiscriminator.Discriminator
- DataProtectionOptions.ApplicationDiscriminator
- AuthenticatedEncryptorFactory.CreateEncryptorInstance(IKey)
- CngCbcAuthenticatedEncryptorFactory.CreateEncryptorInstance(IKey)
- CngGcmAuthenticatedEncryptorFactory.CreateEncryptorInstance(IKey)
- IAuthenticatedEncryptorFactory.CreateEncryptorInstance(IKey)
- ManagedAuthenticatedEncryptorFactory.CreateEncryptorInstance(IKey)
- IKey.CreateEncryptor()
- KeyManagementOptions.AuthenticatedEncryptorConfiguration
- KeyManagementOptions.XmlEncryptor
- KeyManagementOptions.XmlRepository
- ICertificateResolver.ResolveCertificate(String)
- DataProtectionUtilityExtensions.GetApplicationUniqueIdentifier(IServiceProvider)
- FileSystemXmlRepository.DefaultKeyStorageDirectory
- RegistryXmlRepository.DefaultRegistryKey
- CertificateResolver.ResolveCertificate(String)
- IConnectionListener.AcceptAsync(CancellationToken)
- AuthenticationSchemeOptions.ForwardDefaultSelector
- RangeConditionHeaderValue.RangeConditionHeaderValue(EntityTagHeaderValue)
- IHttpContextFeature.HttpContext
- CompletionMessage.WithError
- CompletionMessage.WithResult
- HubMethodInvocationMessage.Arguments
- HubMethodInvocationMessage.HubMethodInvocationMessage(String, String, Object[])
- HubMethodInvocationMessage.HubMethodInvocationMessage(String, String, Object[], String[])
- InvocationMessage.InvocationMessage(String, Object[])
- InvocationMessage.InvocationMessage(String, String, Object[])
- InvocationMessage.InvocationMessage(String, String, Object[], String[])
- StreamInvocationMessage.StreamInvocationMessage(String, String, Object[])
- StreamInvocationMessage.StreamInvocationMessage(String, String, Object[], String[])
- IHubProtocol.TryParseMessage(ReadOnlySequence<Byte>, IInvocationBinder, HubMessage)
- DefaultHubLifetimeManager<THub>.SendAllAsync(String, Object[], CancellationToken)
- DefaultHubLifetimeManager<THub>.SendAllExceptAsync(String, Object[], IReadOnlyList<String>, CancellationToken)
- DefaultHubLifetimeManager<THub>.SendConnectionAsync(String, String, Object[], CancellationToken)
- DefaultHubLifetimeManager<THub>.SendConnectionsAsync(IReadOnlyList<String>, String, Object[], CancellationToken)
- DefaultHubLifetimeManager<THub>.SendGroupAsync(String, String, Object[], CancellationToken)
- DefaultHubLifetimeManager<THub>.SendGroupExceptAsync(String, String, Object[], IReadOnlyList<String>, CancellationToken)
- DefaultHubLifetimeManager<THub>.SendGroupsAsync(IReadOnlyList<String>, String, Object[], CancellationToken)
- DefaultHubLifetimeManager<THub>.SendUserAsync(String, String, Object[], CancellationToken)
- DefaultHubLifetimeManager<THub>.SendUsersAsync(IReadOnlyList<String>, String, Object[], CancellationToken)
- DefaultHubLifetimeManager<THub>.SendAllAsync(String, Object[], CancellationToken)
- DefaultHubLifetimeManager<THub>.SendAllExceptAsync(String, Object[], IReadOnlyList<String>, CancellationToken)
- DefaultHubLifetimeManager<THub>.SendConnectionAsync(String, String, Object[], CancellationToken)
- DefaultHubLifetimeManager<THub>.SendConnectionsAsync(IReadOnlyList<String>, String, Object[], CancellationToken)
- DefaultHubLifetimeManager<THub>.SendGroupAsync(String, String, Object[], CancellationToken)
- DefaultHubLifetimeManager<THub>.SendGroupExceptAsync(String, String, Object[], IReadOnlyList<String>, CancellationToken)
- DefaultHubLifetimeManager<THub>.SendGroupsAsync(IReadOnlyList<String>, String, Object[], CancellationToken)
- DefaultHubLifetimeManager<THub>.SendUserAsync(String, String, Object[], CancellationToken)
- DefaultHubLifetimeManager<THub>.SendUsersAsync(IReadOnlyList<String>, String, Object[], CancellationToken)
- IClientProxy.SendCoreAsync
- HubConnectionContext.User
- QueryHelpers.ParseNullableQuery(String)
- QueryHelpers.ParseQuery(String)
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應