Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Automapper 11.0.0 NÃO funciona no .Net Framework???

Olá!

Eu estou fazendo a aula "Mapeando objetos com o AutoMapper" dentro do "05. Melhorando o código" e o instrutor usou a versão 8.1.1 do Automapper. Mas a última versão disponível hoje é a 11.0.0.

Infelizmente deu erro em tudo ao processar no Postman e no Swagger ...

... fui pesquisar a documentação do Automapper e para minha surpresa encontrei o texto:

==========================================================

11.0 Upgrade Guide / 11.0 Guia de atualização

AutoMapper now targets .Net Standard 2.1 and doesn’t work on .Net Framework

O AutoMapper agora tem como alvo o .Net Standard 2.1 e não funciona no .Net Framework

https://docs.automapper.org/en/latest/11.0-Upgrade-Guide.html#automapper-now-targets-net-standard-2-1-and-doesn-t-work-on-net-framework

==========================================================

Isso quer dizer que miou tudo, pois o instrutor está usando o ".Net 5"? (eu estou usando o ".Net 6")

Bom... o projeto NÃO tem nenhum erro na lista de erros, então decidi fazer um "downgrade" de versão:

Automapper Downgrade

Eu acreditei que funcionaria numa boa, mas infelizmente apresentou o mesmo erro:

==========================================================

System.MissingMethodException: Cannot dynamically create an instance of type 'FilmesAPI.Profiles.FilmeProfile'. Reason: No parameterless constructor defined.

at System.RuntimeType.ActivatorCache..ctor(RuntimeType rt) at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean wrapExceptions) at System.Activator.CreateInstance(Type type, Boolean nonPublic, Boolean wrapExceptions) at System.Activator.CreateInstance(Type type) at AutoMapper.Configuration.MapperConfigurationExpression.AddProfile(Type profileType) at AutoMapper.Configuration.MapperConfigurationExpression.AddMapsCore(IEnumerable1 assembliesToScan) at AutoMapper.Configuration.MapperConfigurationExpression.AddMaps(Assembly[] assembliesToScan) at Microsoft.Extensions.DependencyInjection.ServiceCollectionExtensions.<>c__DisplayClass12_0.<AddAutoMapperClasses>b__6(MapperConfigurationExpression options) at Microsoft.Extensions.Options.ConfigureNamedOptions1.Configure(String name, TOptions options) at Microsoft.Extensions.Options.OptionsFactory1.Create(String name) at Microsoft.Extensions.Options.UnnamedOptionsManager1.get_Value() at Microsoft.Extensions.DependencyInjection.ServiceCollectionExtensions.<>c.b__12_2(IServiceProvider sp) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitFactory(FactoryCallSite factoryCallSite, RuntimeResolverContext context) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite callSite, RuntimeResolverContext context) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor2.VisitCallSite(ServiceCallSite callSite, TArgument argument) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.Resolve(ServiceCallSite callSite, ServiceProviderEngineScope scope) at Microsoft.Extensions.DependencyInjection.ServiceProvider.CreateServiceAccessor(Type serviceType) at System.Collections.Concurrent.ConcurrentDictionary2.GetOrAdd(TKey key, Func`2 valueFactory) at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope) at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.GetService(Type serviceType) at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType) at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider) at Microsoft.Extensions.DependencyInjection.ServiceCollectionExtensions.<>c.b__12_3(IServiceProvider sp) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitFactory(FactoryCallSite factoryCallSite, RuntimeResolverContext context) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitDisposeCache(ServiceCallSite transientCallSite, RuntimeResolverContext context) ...

HEADERS

=======

Accept: /

Connection: keep-alive

Host: localhost:7189

User-Agent: PostmanRuntime/7.29.0

Accept-Encoding: gzip, deflate, br

Cache-Control: no-cache

Content-Type: application/json

Content-Length: 103

Postman-Token: a0bce2ff-a4a5-42ca-956b-9639b01e0253

==========================================================

Agradeço qualquer dica.

Obrigado,

[]'s,

Fabio I.

1 resposta
solução!

PessoALL,

Ahhh NÃO! eu mandei "Profile" Herdar automaticamente (Ctrl + .) e gerou uma assinatura de construtor DIFERENTE da do instrutor herdando da base e pedindo uma "string profileName"! Veja:

using AutoMapper;
using FilmesAPI.Data.DTOs;
using FilmesAPI.Models;
//Esta pasta e esta classe guarda os PERFIS do AUTOMAPPER.

namespace FilmesAPI.Profiles;

public class FilmeProfile : Profile
{

    //Assinatura errada:
    //public FilmeProfile(string profileName) : base(profileName)
    //Assinatura certa:
    public FilmeProfile()
    {
        CreateMap<CreateFilmeDTO, Filme>();
        CreateMap<Filme, ReadFilmeDTO>();
        CreateMap<UpdateFilmeDTO, Filme>();
    }
}

Agora funcionou tanto na versão 8.1.1 quanto na versão 11.0.0!

Desculpem o incômodo!

[]'s,

Fabio I.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software