问题描述
我目前正在努力处理看似简单的事情,但是我无法找到遇到类似问题的任何人。
我正在将某些库转换为netStandard,而一个库则依赖于另一个库。我们称它们为A和B。
A可以很好地编译为netStandard2.0库,它是根据目录中的dotnet --version使用3.1 SDK构建的。 nupkg内置在Release文件夹中,我将其移至本地软件包源以在我的盒子上进行测试。
B也是一个netStandard2.0类库。它需要A,但是在NuGet Package Manager for B内导航到A的nupkg,然后单击install会产生一个奇怪的错误。
NU1202 A与netStandard2.0不兼容,程序包A支持:netcoreapp2.1
A是一个netStandard库。 B是一个netStandard库。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Description>The initial .net standard 2.0 offering of A</Description>
</PropertyGroup>
</Project>
所以它似乎针对netStandard2.0(其中包括netFramework 4.6.1到netCore 2.2?)
我想念一些简单的东西吗?
在仔细研究了nu1202和netStandard2.0之后-大部分情况是A是一个库而B是一个应用程序,而不是B是一个像我所遇到的情况的库-我提出:
我根据不同的问题尝试过的事情
- 确认每个A / B项目的dotnet --version均为3.1.402
- 确认我的Nuget Package Mangaer版本是最新版本/最新版本:5.7.0
- 试图使用Package Manager Console获得完全相同的结果。
- 清洁和重建/包装A.csproj
- 尝试将A.nuspec文件与A.nupkg一起包含在Package Source文件夹中
- 将A.csproj手动拉入项目,以确认可以将其添加为有效的项目参考,但这不是我要解决的问题。
我可能已经尝试了更多,但是此时,也许我应该问的问题是:是否可以在其他netStandard库中引用netStandard库?
我想念什么?
解决方法
最后,我相信这可能是VS中的打包/构建(在生成时带有生成包)功能的问题。
我能够在Nuget软件包资源管理器中手动创建A库的软件包,该软件包会很好地导入到B中。
我遵循了this resource,但是由于无法捆绑使用Visual Studio,因此由于捆绑了Nuget Package Manger,因此如今很难对其进行修改。我的版本为5.7,可能是是5.6可以正常工作,因为它被列为google上最新的稳定版本,但是无论哪种方式-现在,我相信我只是手动制作我的软件包,而不是尝试自动生成它们。
如果有人有更好的解决方案或关于如何解决此问题的想法,我将不知所措。
编辑
事实证明,自动打包构建功能确实起作用。
最后发生了什么:我命令了一些旧的.net Core库标题,将它们降级为.net Standard,而不是保留2个并行副本。
已经有一个.net核心版本的A.1.0.0.nupkg和一个B.1.0.1.nupkg,但是使用的是不同的nuget软件包。
当我构建一个新的.net Standard A.1.0.0.nupkg并将其放在本地源中时,即使以某种方式指向该本地源,nuget也会尝试从...安装.net核心。生产的nuget包源的缓存副本(我清除了50次缓存,所以我不知道nuget是如何使这些连线交叉的。)
通过创建版本.net Standard A.1.0.1.nupkg可以轻松复制,由于没有.net核心A.1.0.1.nupkg,它可以很好地导入。然后,您可以重命名该程序包并在Nuget程序包资源管理器中对其进行还原,但不能更改其内容,否则它将失败。当我不得不将B.nupkg的.net标准版本的版本从1.0.0逐步升级到1.0.2时,这一点得到了证实。比B.nupkg的.net Core版本更进一步。
因此,最后,自动打包功能没有被破坏(谢天谢地)。 Nuget Package Explorer手动创建解决了我的问题,因为在手动制作时打勾了该版本。
我永远都不会期望生产库软件包的源代码会干扰本地软件包文件夹...