0

当我尝试添加coverlet.msbuild到我的测试项目时,我收到此错误:

The expression "[System.Version]::Parse('')" cannot be evaluated. Version string portion was too short or too long.  C:\my_repo\packages\coverlet.msbuild.3.1.2\build\coverlet.msbuild.targets              

我确实看到我的 csproj 发生了变化:

<Import Project="..\packages\coverlet.msbuild.3.1.2\build\coverlet.msbuild.props" Condition="Exists('..\packages\coverlet.msbuild.3.1.2\build\coverlet.msbuild.props')" />

<Error Condition="!Exists('..\packages\coverlet.msbuild.3.1.2\build\coverlet.msbuild.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\coverlet.msbuild.3.1.2\build\coverlet.msbuild.props'))" />
<Error Condition="!Exists('..\packages\coverlet.msbuild.3.1.2\build\coverlet.msbuild.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\coverlet.msbuild.3.1.2\build\coverlet.msbuild.targets'))" />

<Import Project="..\packages\coverlet.msbuild.3.1.2\build\coverlet.msbuild.targets" Condition="Exists('..\packages\coverlet.msbuild.3.1.2\build\coverlet.msbuild.targets')" />

但是对 没有任何更改packages.config,因此看起来实际上并未安装 nuget。

我正在尝试将其添加到 .net 4.8 测试项目中。

关于可能导致这种情况的任何想法?

4

1 回答 1

1

错误消息告诉您错误来自C:\my_repo\packages\coverlet.msbuild.3.1.2\build\coverlet.msbuild.targets. 那么让我们来看看吧。由于 Coverlet 是开源的,我可以链接到它的源代码:https ://github.com/coverlet-coverage/coverlet/blob/1e74dd43824fc49e90622a3442133c2d9f4e8e01/src/coverlet.msbuild.tasks/coverlet.msbuild.targets (当前主分支提交,使用永久链接以防将来文件更改)

由于错误涉及System.Version,我们可以搜索它,并在第 11 行的顶部附近找到它。它试图解析两个属性,_CoverletSdkNETCoreSdkVersion_CoverletSdkMinVersionWithDependencyTarget。第一个属性定义为_CoverletSdkNETCoreSdkVersion>$(NETCoreSdkVersion)</_CoverletSdkNETCoreSdkVersion>

因此我得出结论,包作者只打算支持 SDK 样式项目,而不是“.NET Framework”(非 sdk)样式的项目。他们只是以一种在非 sdk 风格的项目中使他们的代码崩溃的方式来实现它。

请注意,您仍然可以使用 SDK 样式项目以 .NET Framework 为目标。创建一个“.NET”(.NET Core 自 .NET 5 以来的新品牌)测试项目,然后编辑 csproj 并更改<TargetFramework>net6.0</TargetFramework><TargetFramework>net48</TargetFramework>.

我不知道为什么你的packages.config中没有coverlet,包安​​装似乎成功,它只是在构建时失败,直到安装完成才会发生。

于 2022-02-08T15:36:47.197 回答