После обновления с 2.2 до. NET Core 3.1 веб-API не может найти модель, поскольку выполняет поиск в неправильном месте. - PullRequest
0 голосов
/ 12 июля 2020

Работа в Visual Studio 2019, запуск проекта в IisEpxress

Я пытаюсь обновить все проекты в решении с. NET Core 2.2 до 3.1. Я изменил версии и обновил пакеты NuGet, например, EntityFrameworkCore (этот perticular до 3.1.5).

Короче говоря, проблема в том, что когда я запускаю свой обновленный ASP. NET Core Web Проект API Я получаю эту ошибку:

TypeLoadException: не удалось загрузить тип WE.GPR.Connections.Common.DomainEntity из сборки WE.GPR.Connections.Common, Version = 1.0.22.0, Культура = нейтральный, PublicKeyToken = null '. Неизвестное местоположение

Странно то, что модель «DomainEntity» находится в пространстве имен «WE.GPR.Connections.Common.Models.DomainEntity». Значит, он смотрит не в том месте. Но когда я создаю свое решение, я не получаю ошибок.

Версия этого решения, которая была запущена. NET Core 2.2 не имела этой проблемы.

Я проделал тот же процесс обновления для другое решение, использующее тот же проект WE.GPR.Connections.Common. Все прошло нормально, ничего похожего на эти ошибки.

Это немного сложное решение с подмодулями и настраиваемыми пакетами NuGet из нашего собственного канала, объединенными следующим образом:

Root

  • Проект 1
    • Пользовательский пакет NuGet *
  • Проект 2
    • Ссылка на проект подмодуля 3

Подмодули

  • Проект подмодуля 3

* этот проект пакета nuget также имеет тот же проект 3, что и подмодуль

Итак Мое первое предположение заключалось в том, что пакет NuGet все испортил, так как это единственное, что отличалось от моего другого решения, которое я могу успешно обновить до версии 3.1 (последнее упомянутое решение было фактически тем решением, которое создало этот пакет NuGet).

Итак, я превратил подмодуль в другой пакет NuGet, но проблема осталась.

Я также удалил всю папку с решением из моей локальной системы и снова клонировал ее.

Я даже начал da fre sh обновил из основной ветки и снова выполнил все обновления, но проблема остается.

Когда я выполняю поиск по запросу «WE.GPR.Connections.Common», я не могу найти его нигде в решение, помимо использования с .Model или другими пространствами имен, стоящими за ним.

Я потратил несколько дней на решение этой очень раздражающей проблемы.

Есть ли у вас какие-либо идеи, как подойти это следующее, потому что у меня самого закончились идеи.

Обновление

Вчера я отправил код на Azure DevOps, и при сборке возникли те же проблемы, что и я локально, так что это определенно не что-то с моей машиной.

Вот полное сообщение об ошибке:

 Standard Output Messages:
 Application startup exception: System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the requested types.
 Could not load type 'WE.GPR.Connections.Common.DomainEntity' from assembly 'WE.GPR.Connections.Common, Version=1.0.22.0, Culture=neutral, PublicKeyToken=null'.
 Could not load type 'WE.GPR.Connections.Common.DomainEntity' from assembly 'WE.GPR.Connections.Common, Version=1.0.22.0, Culture=neutral, PublicKeyToken=null'.
 Could not load type 'WE.GPR.Connections.Common.BaseDto' from assembly 'WE.GPR.Connections.Common, Version=1.0.22.0, Culture=neutral, PublicKeyToken=null'.
 Could not load type 'WE.GPR.Connections.Common.BaseDto' from assembly 'WE.GPR.Connections.Common, Version=1.0.22.0, Culture=neutral, PublicKeyToken=null'.
 Could not load type 'WE.GPR.Connections.Common.BaseDto' from assembly 'WE.GPR.Connections.Common, Version=1.0.22.0, Culture=neutral, PublicKeyToken=null'.
 Could not load type 'WE.GPR.Connections.Common.BaseDto' from assembly 'WE.GPR.Connections.Common, Version=1.0.22.0, Culture=neutral, PublicKeyToken=null'.
    at System.Reflection.RuntimeModule.GetTypes(RuntimeModule module)
    at System.Reflection.RuntimeAssembly.get_DefinedTypes()
    at Microsoft.AspNetCore.Mvc.ApplicationParts.AssemblyPart.get_Types()
    at Microsoft.AspNetCore.Mvc.Controllers.ControllerFeatureProvider.PopulateFeature(IEnumerable`1 parts, ControllerFeature feature)
    at Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartManager.PopulateFeature[TFeature](TFeature feature)
    at Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerActionDescriptorProvider.GetControllerTypes()
    at Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerActionDescriptorProvider.GetDescriptors()
    at Microsoft.AspNetCore.Mvc.ApplicationModels.ControllerActionDescriptorProvider.OnProvidersExecuting(ActionDescriptorProviderContext context)
    at Microsoft.AspNetCore.Mvc.Infrastructure.DefaultActionDescriptorCollectionProvider.UpdateCollection()
    at Microsoft.AspNetCore.Mvc.Infrastructure.DefaultActionDescriptorCollectionProvider.Initialize()
    at Microsoft.AspNetCore.Mvc.Infrastructure.DefaultActionDescriptorCollectionProvider.get_ActionDescriptors()
    at Microsoft.AspNetCore.Mvc.ApiExplorer.DefaultApiVersionDescriptionProvider.EnumerateApiVersions(IActionDescriptorCollectionProvider actionDescriptorCollectionProvider)
    at Microsoft.AspNetCore.Mvc.ApiExplorer.DefaultApiVersionDescriptionProvider.LazyApiVersionDescriptions.EnumerateApiVersions()
    at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
    at System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)
    at System.Lazy`1.CreateValue()
    at System.Lazy`1.get_Value()
    at Microsoft.AspNetCore.Mvc.ApiExplorer.DefaultApiVersionDescriptionProvider.get_ApiVersionDescriptions()
    at WE.UserPortal.Api.Startup.<>c__DisplayClass5_0.<Configure>b__0(SwaggerUIOptions options) in D:\a\1\s\WE.UserPortal.Api\Startup.cs:line 130
    at Microsoft.AspNetCore.Builder.SwaggerUIBuilderExtensions.UseSwaggerUI(IApplicationBuilder app, Action`1 setupAction)
    at WE.UserPortal.Api.Startup.Configure(IApplicationBuilder app, IHostEnvironment env, IApiVersionDescriptionProvider provider) in D:\a\1\s\WE.UserPortal.Api\Startup.cs:line 127
    at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor, Boolean wrapExceptions)
    at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
    at Microsoft.AspNetCore.Hosting.ConfigureBuilder.Invoke(Object instance, IApplicationBuilder builder)
    at Microsoft.AspNetCore.Hosting.ConfigureBuilder.<>c__DisplayClass4_0.<Build>b__0(IApplicationBuilder builder)
    at Microsoft.AspNetCore.Hosting.ConventionBasedStartup.Configure(IApplicationBuilder app)
    at Microsoft.Extensions.DependencyInjection.AutoRegisterMiddleware.<>c__DisplayClass4_0.<Configure>b__0(IApplicationBuilder app)
    at Microsoft.AspNetCore.Mvc.Filters.MiddlewareFilterBuilderStartupFilter.<>c__DisplayClass0_0.<Configure>g__MiddlewareFilterBuilder|0(IApplicationBuilder builder)
    at Microsoft.AspNetCore.Hosting.WebHost.BuildApplication()

1 Ответ

1 голос
/ 14 июля 2020

Нам удалось решить вышеуказанную проблему, реальная проблема заключалась не в том, что все наши пользовательские пакеты NuGet были обновлены до. net core 3.1. Один пользовательский пакет NuGet (Custom NuGet package 2) все еще был включен. net core 2.2, и в нем используется устаревшая версия WE.GPR.Connections.Common (которая также была на. net core 2.2).

Root

Проект 1

Пользовательский пакет NuGet 1

Пользовательский пакет NuGet 2

Проект 2

Ссылка на проект подмодуля 3

Подмодули

Проект подмодуля 3

Удалив Пользовательский Пакет NuGet 2 сработал для нас, поскольку он больше не использовался и не упоминался в нашем проекте, иначе мы могли бы просто обновить его до. net также ядро ​​3.1.

Хотя выданная ошибка не имела значения, но теоретически все пользовательские пакеты и подмодули NuGet должны быть обновлены до. net версии ядра 3.1.

...