【发布时间】:2019-03-02 19:26:30
【问题描述】:
我创建了一个基于 .net fx 的 asp.net web api 2 项目,我尝试在该项目中使用来自 Microsoft.Extensions 组件的 MS 依赖注入和 MS 日志程序集。它实际上适用于基于非 dotnet 核心的项目,提供依赖注入和带有抽象的日志框架。在本地以及当我们使用 Visual Studio(在我的情况下为 2017 版)时,它可以工作、根据需要进行部署并成功运行。
当我们使用 MSBUILD 时,它会失败。我有另一个 web api 2 项目,它没有使用 DI 并通过 MS.extns 登录,它构建成功。我不知道解决我面临的冲突。当我尝试删除冲突的程序集时,它会逐步删除要删除的注入和日志记录抽象库。
我也在我的项目中使用 EF 6。冲突始于 System.ComponentModel.Annotations。我失败的构建日志错误行如下。
两者都是 web api 2(非 dotnet 核心) 1. 成功构建 = .net fx 4.6.2, EF 6, DI 使用 Unity。 (当时没有实现日志记录) 2. 构建项目失败 = .net fx 4.6.2, EF 6, DI 使用 MS.Extns.DI 并使用 MS.Extns.Logging 进行日志记录。
CSC : error CS1703: Multiple assemblies with equivalent identity have been imported: 'C:\AK\Api\PMApi\packages\System.ComponentModel.Annotations.4.5.0\lib\net461\System.ComponentModel.Annotations.dll' and 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.2\Facades\System.ComponentModel.Annotations.dll'. Remove one of the duplicate references. [C:\AK\Api\PMApi\PM.Data\PM.Data.csproj]
Done Building Project "C:\AK\Api\PMApi\PM.Data\PM.Data.csproj" (default targets) -- FAILED.
Done Building Project "C:\AK\Api\PMApi\PM.BL\PM.BL.csproj" (default targets) -- FAILED.
Done Building Project "C:\AK\Api\PMApi\PM.Api\PM.Api.csproj" (default targets) -- FAILED.
Done Building Project "C:\AK\Api\PMApi\ProjectManApi.sln" (default targets) -- FAILED.
Build FAILED.
"C:\AK\Api\PMApi\ProjectManApi.sln" (default target) (1) ->
"C:\AK\Api\PMApi\PM.Api\PM.Api.csproj" (default target) (2) ->
"C:\AK\Api\PMApi\PM.BL\PM.BL.csproj" (default target) (3) ->
"C:\AK\Api\PMApi\PM.Data\PM.Data.csproj" (default target) (4) ->
(CoreCompile target) ->
CSC : error CS1703: Multiple assemblies with equivalent identity have been imported: 'C:\AK\Api\PMApi\packages\System.ComponentModel.Annotations.4.5.0\lib\net461\System.ComponentModel.Annotations.dll' and 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.2\Facades\System.ComponentModel.Annotations.dll'. Remove one of the duplicate references. [C:\AK\Api\PMApi\PM.Data\PM.Data.csproj]
0 Warning(s)
1 Error(s)
请帮助我,因为我想尝试使用 MS extns 的 DI 和 Logging 框架,它在测试和运行时工作得很好。就我使用 Jenkins/Team city 作为我自己的实例来设置持续集成的 msbuild 而言,我只需要 MSBUILD 来构建/测试/部署。
我需要知道这个 DI 和来自 MS.Extns 的日志记录是否不适用于非 dotnet 核心,并且我必须切换到使用不同的 DI 框架。因为,我已经完成了我的 api,在本地进行了测试,一切正常。
最好是,我希望使用这些,并就如何从 MSBUILD 中摆脱这种冲突提出适当的建议。
更新 1: 所有 Nuget pkg 都是最新的和最新的。此外,注释上的冲突正在引发所有项目,而与 EF 的项目无关。当我有 nuget 给我库时,为什么 msbuild 还需要在机器驱动器中查找 Microsoft 引用程序集路径?
更新 2: 冲突来自 Microsoft.Extensions.Logging - Microsoft.Extensions.Options 程序集,它引用 System.ComponentModel.Annotations。我认为 Nuget 版本尝试下载 4.5.1,而 Microsoft Common 程序集路径似乎具有 4.6.x 或更高版本,由于某种原因,Msbuild 引用并最终发生冲突。
如果值得研究问题出在哪里,我在 github 中有我的解决方案。 Github link 谢谢
【问题讨论】:
-
我仍然没有收到任何答案,而且我在 MSDN 上的帖子也没有帮助/解决问题。在这一点上,我已经有了 .net core web api v2、EF core v2 以及 MS 扩展日志记录、DI 和配置。
标签: dependency-injection msbuild entity-framework-6 asp.net-web-api2 microsoft-extensions-logging