專案升級到.Net8.0 Autofac引發詭異的問題

长空nice發表於2024-10-29

前兩天把專案升級到.Net8.0了,把.Net框架升級了,其他一些第三方庫升級了一部分,升級完以後專案跑不起來了,報如下錯誤:

An unhandled exception occurred while processing the request.
DependencyResolutionException: None of the constructors found with 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' on type 'Microsoft.AspNetCore.Mvc.ApiExplorer.EndpointMetadataApiDescriptionProvider' can be invoked with the available services and parameters:
Cannot resolve parameter 'Microsoft.Extensions.DependencyInjection.IServiceProviderIsService serviceProviderIsService' of constructor 'Void .ctor(Microsoft.AspNetCore.Routing.EndpointDataSource, Microsoft.Extensions.Hosting.IHostEnvironment, Microsoft.AspNetCore.Routing.ParameterPolicyFactory, Microsoft.Extensions.DependencyInjection.IServiceProviderIsService)'.
Autofac.Core.Activators.Reflection.ReflectionActivator.GetAllBindings(ConstructorBinder[] availableConstructors, IComponentContext context, IEnumerable<Parameter> parameters)

DependencyResolutionException: An exception was thrown while activating Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator -> Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionGroupCollectionProvider -> λ:Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionProvider[] -> Microsoft.AspNetCore.Mvc.ApiExplorer.EndpointMetadataApiDescriptionProvider.

看著是依賴注入的問題,後面去網上找了一下,找到部落格園的一篇文章,提到是vs版本的問題,我現在用的vs版本是17.11.5,看完以後心裡想vs應該不會和影響到程式碼,我想著透過命令列 dotnet xxx.dll 能不能啟動,奇怪了命令列可以啟動;接著我又用vscode試了一下,也可以啟動,這就很奇怪了。
我把專案.Net6.0的程式碼簽出專案可以跑起來,看來還是升級的問題,和依賴注入有關,後面想到了可能是autofac沒有升級,把autofac升級到10.0就沒問題了。
image

問題雖然解決了,但還是很納悶,怎麼不升級autofac,vs會導致專案跑不起來了,但是透過命令列和vscode又可以。

相關文章