尝试将 AutoMapper 添加到 .NetCore1.1 - 无法识别 services.AddAutoMapper()

Posted

技术标签:

【中文标题】尝试将 AutoMapper 添加到 .NetCore1.1 - 无法识别 services.AddAutoMapper()【英文标题】:Trying to add AutoMapper to .NetCore1.1 - not recognising services.AddAutoMapper() 【发布时间】:2017-03-21 00:06:49 【问题描述】:

我已将以下 Nuget 包安装到我的项目中:

Automapper AutoMapper.Extensions.Microsoft.DependencyInjection

我已在Startup.cs 中将行添加到ConfigureServices

public void ConfigureServices(IServiceCollection services)

    // Add framework services.
    services.AddMvc();
    // . . .
    services.AddAutoMapper();

services.AddAutoMapper() 下仍然有一条红线。它说:

以下方法或属性之间的调用不明确:ServiceCollectionExtensions.AddAutoMapper(IServiceCollection, params Assembly[]) 和 ServiceCollectionExtensions.AddAutoMapper(IServiceCollection, params Type[])

为什么会这样?我读过的所有 .NET Core 添加自动映射器指南都显示这样做。

【问题讨论】:

您使用的是什么版本的 .NET Core SDK? dotnet --version1.0.0 如果我没记错的话,你使用的是 project.json。对吗? appsettings.json 我有 csproj 【参考方案1】:

我刚遇到这个问题,才知道 您需要包含以下 Nuget 包 AutoMapper.Extensions.Microsoft.Dependencyinjection

【讨论】:

问题表明他们已经包含了这个 Nuget 包。【参考方案2】:

我遇到了同样的问题,因此请查看sourcecode and tests 以获得指导。看来您需要在要扫描的程序集中传递程序集或“标记类型”。我选择了以下内容,因为我的 Profile 类与 Startup 类在同一个程序集中。

services.AddAutoMapper(typeof(Startup));

【讨论】:

如果您的配置文件类不在同一个程序集中,您会添加什么? typeof(ATypeInTargetAssembly) 是的,这就是我最后所做的,并且成功了……我发现您还可以添加这些列表,从而允许配置多个依赖项。可能有助于其他阅读这些 cmets 的人了解这一点。 你可以这样使用:services.AddAutoMapper(typeof(AutoMappingProfile).GetTypeInfo().Assembly);【参考方案3】:

不确定为什么会发生这种情况,很可能与.NET Core 1.1 有关,但我找到了解决方法。

不要在ConfigureServices 中执行services.AddAutoMapper(),而是将其替换为以下内容。

var config = new AutoMapper.MapperConfiguration(cfg =>
            
                cfg.AddProfile(new MappingProfile());
            );

            var mapper = config.CreateMapper();
            services.AddSingleton(mapper);

其中MappingProfile() 是您拥有CreateMap 的班级。

【讨论】:

【参考方案4】:

在nuget中搜索这个可以访问automap

AutoMapper.Extensions.Microsoft.DependencyInjection

【讨论】:

【参考方案5】:

安装包:

Install-Package AutoMapper.Extensions.Microsoft.DependencyInjection -Version 7.0.0

Nuget: https://www.nuget.org/packages/AutoMapper.Extensions.Microsoft.DependencyInjection/

【讨论】:

【参考方案6】:

我遇到了同样的问题。为了解决这个问题,我在 project.csproj 中使用了以下版本的 AutoMapper:

AutoMapper Version="6.0.1"
AutoMapper.Extensions.Microsoft.DependencyInjection Version="1.2.0"

恢复所有包,最后关闭并打开visual studio。

【讨论】:

【参考方案7】:

尽管安装了 AutoMapper 包 (v8.1.0) 和 AutoMapper.Extensions,但我遇到了同样的问题(在 .NET Core 2.2、Visual Studio Code 1.34.0、Ubuntu 操作系统中) .Microsoft.Dependencyinjection 包 (v6.1.0)。

通过更改 project.csproj 中的包版本解决了问题,如下所示:

<PackageReference Include="AutoMapper" Version="8.0.0"/>
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="6.0.0"/>

不知何故,由于包版本不匹配。

【讨论】:

【参考方案8】:

我遇到了同样的问题。就我而言,解决方案是上述答案的组合:

    下载用于 Automapper 的 Nuget 包 -> Automapper by Jimmy 博加德 下载用于 Automapper 依赖注入的 Nuget 包 -> AutoMapper.Extensions.Microsoft.DependencyInjection by Jimmy 博加德 在 Startup.cs 文件中添加using Automapper;

现在service.AddAutoMapper 应该可以正常工作了。您现在可以根据自己的喜好初始化 Automapper。

【讨论】:

【参考方案9】:

为 automapper.extensions.microsoft.dependencyinjection 添加 Nuget 包 最新稳定版 9

【讨论】:

【参考方案10】:

您需要做的就是在 Startup.cs 文件的顶部添加 using AutoMapper;。祝你好运!!!!

【讨论】:

以上是关于尝试将 AutoMapper 添加到 .NetCore1.1 - 无法识别 services.AddAutoMapper()的主要内容,如果未能解决你的问题,请参考以下文章

AutoMapper - 试图将我的对象属性展平为字符串但出现错误

将 AutoMapper 与实体框架一起使用时出现异常

P12 添加 AutoMapper

Automapper 数据表到列表

“缺少从 System.Char 到 System.String 的映射”AutoMapper 错误

AutoMapper 模式是不是违反 DDD 原则?