AspNetCore.Mvc.Core 版本不匹配

8

我试图编写一个控制器扩展方法的单元测试,但在测试项目的构建过程中收到以下错误消息。

MyControllerExtensionsTests.cs(17, 26): [CS1705]程序集'MyApp.RestApi'的标识为'MyApp.RestApi,Version =1.0.0.0,Culture=neutral,PublicKeyToken=null',使用了版本比被引用程序集'Microsoft.AspNetCore.Mvc.Core'的标识为 'Microsoft.AspNetCore.Mvc.Core,Version =2.1.0.0,Culture=neutral,PublicKeyToken=adb9793829ddae60'更高的版本'Microsoft.AspNetCore.Mvc.Core,Version = 2.1.1.0,Culture=neutral,PublicKeyToken=adb9793829ddae60'

两个项目都在其.csproj文件中声明了<TargetFramework>netcoreapp2.1</TargetFramework>。 我已经尝试删除binobj文件夹。 为什么一个项目解析为Mvc.Core, Version=2.1.0.0,另一个解析为Mvc.Core, Version 2.1.1.0


你能否更改.csproj文件中的RuntimeFrameworkVersion标签中的版本并检查一下? - karthickj25
@karthickj25 不,问题不在框架版本上。 - Camilo Terevinto
1
实际问题在于您在项目中使用的NuGet包。其中一个目标是2.1.1,而另一个目标是2.1.0。 - Camilo Terevinto
@CamiloTerevinto,“<PackageReference Include =”Microsoft.AspNetCore.App“/>”缺少“Version”属性,但不知何故自动解析为“2.1.0”。通过Nuget将包升级到“2.1.1”并没有设置版本属性,导致版本仍然保持在“2.1.0”。在“.csproj”中手动设置版本可以解决问题。 - user10843855
2个回答

22
<PackageReference Include="Microsoft.AspNetCore.App" />

我曾经遇到同样的问题,之后在单元测试项目中添加这一行代码后,它开始选择正确的 Microsoft.AspNetCore.App 版本。


6
更新:
下面提到的问题已经得到解决,您现在可以从隐式包版本控制和以下引用中受益,而无需提供包的版本号。
<PackageReference Include="Microsoft.AspNetCore.App" />

原始回答

这个问题是由于引入了Microsoft.AspNetCore.App metapackage的隐式版本控制导致的。使用隐式版本控制,SDK会决定版本并将其解析为2.1.1。

然而,它在nunit测试项目中解析为版本2.1。通过像<PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.1"/>这样指定nunit项目的版本号,并执行dotnet restore,有助于解决此问题。

在github上有一个关于此问题的票据,隐式版本控制的行为可能会在将来发生变化 - https://github.com/aspnet/AspNetCore.Docs/issues/6430https://github.com/dotnet/core/blob/master/release-notes/1.0/sdk/1.0-rc3-implicit-package-refs.md


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接