尝试将 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 --version
说1.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 - 试图将我的对象属性展平为字符串但出现错误