当我试图将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测试项目中。
有什么可以导致这一切的想法吗?
发布于 2022-02-08 15:36:47
错误消息告诉您错误来自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 (当前主分支提交,使用permalink,以防将来文件发生变化)。
由于错误涉及到System.Version
,我们可以搜索它,并在第11行的顶部找到它,它试图解析两个属性,_CoverletSdkNETCoreSdkVersion
和_CoverletSdkMinVersionWithDependencyTarget
。第一个属性定义为_CoverletSdkNETCoreSdkVersion>$(NETCoreSdkVersion)</_CoverletSdkNETCoreSdkVersion>
。
因此,我的结论是,包作者只打算支持sytle项目,而不是".NET框架“(非SDK )风格的项目。他们只是以一种在非sdk风格的项目中崩溃他们的代码的方式来实现它。
请注意,您仍然可以使用.NET样式项目来针对。创建一个" .NET“( .NET核心自.NET 5以来的新品牌)测试项目,然后编辑csproj并将<TargetFramework>net6.0</TargetFramework>
更改为<TargetFramework>net48</TargetFramework>
。
我不知道为什么盖子不在你的packages.config中,包的安装看起来很成功,它只是在构建时失败,这在安装完成后才会发生。
https://stackoverflow.com/questions/71036020
复制相似问题