我目前正在努力解决一些看似简单的问题,但我找不到有类似问题的人。
我正在将一些库转换为netStandard,其中一个库依赖于另一个库。我们称他们为A和B。
A正在编译为一个netStandard2.0库,根据目录中的dotnet版本使用3.1 SDK构建。nupkg构建在Release文件夹中,我将其移动到本地包源以在我的盒子上进行测试。
B也是一个netStandard2.0类库。它需要A,但在NuGet Package Manager for B中导航到我的nupkg for A并单击安装会产生一个奇怪的错误。
NU1202 A与netStandard2.0不兼容,包A支持:netcoreapp2.1
A是一个netStandard库。B是netStandard库。
当我看到标签中的A.csproj文件时,我看到:
<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之后,我展示了:
我尝试过的基于不同问题的东西
- 在3.1.402中确认每个A/B项目的dotnet版本
- 确认我的Nuget Package Mangaer版本是最近的/最新的:5.7.0
- 尝试使用包管理器控制台获得完全相同的结果
- 清洁和重建/包装A.csproj
- 尝试使用A.nupkg将A.nuspec文件包含在Package Source文件夹中
- 手动将A.csproj拖到项目中,以确认它可以作为项目参考添加,这很有效,但这不是我想要解决的问题
我可能尝试了更多,但在这一点上,也许我应该问的问题是:是否可以在其他netStandard库中引用netStandard库?
我错过了什么?
我相信,最终,这可能是VS中的Pack/Build(在构建时生成包(功能的问题。
我可以在Nuget package Explorer中手动创建A库的包,该包将导入B中。
我遵循了这个资源,但从未能够使用Visual Studio构建包,这使得现在很难修改Nuget package Manger的版本,因为它是捆绑在一起的。我的版本是5.7,可能5.6会像谷歌上列出的最新稳定版本一样工作,但无论哪种方式,就目前而言,我相信我将只是手动制作我的包,而不是尝试自动生成它们。
如果有人有更好的解决方案或关于如何解决这个问题的想法,我会洗耳恭听。
编辑
事实证明,自动包构建功能确实有效。
最后发生了什么:我征用了一些旧的.net核心库标题,将它们降到.net标准,而不是保留两个并行副本。
已经有一个.net核心版本的a.1.0.0.nupkg和B.1.0.1.nupkg,但在另一个nuget包源中。
当我构建一个新的.net标准a.1.0.0.nupkg并将其放入本地源时,不知何故,即使指向该本地源,nuget也试图从。。。我猜是生产nuget包源的缓存副本(我清除了大约50次缓存,所以我不知道nuget是如何跨越这些界限的(。
通过制作.net Standard a.1.0.1.nupkg版本,它可以很容易地复制,因为没有.net core a.1.0..1.nupkg,所以它可以很好地导入。然后,您可以重命名该包,并在Nuget package Explorer中对其进行还原,但不能更改内容,否则它将失败。当我不得不将B.nupkg的.net标准版本从1.0.0逐步升级到1.0.2,从而比B.nupkg.的.net核心版本更进一步时,这一点得到了证实
因此,最终,自动打包功能没有被破坏(谢天谢地(。Nuget Package Explorer手动创建解决了我的问题,因为我在手动创建时勾选了版本。
我从来没有想过生产库包源会干扰本地包文件夹。。。