Nuget 包创建 - 针对 .NET framework 4.6.1 的类库无法正确定位目标框架。

17
我创建了一个类库,它针对 .net framework 4.6.1(基本上是一个空白画布),只有一个返回字符串的方法,用于测试目的。我想将其制作成 nuget 包。我正在按照这篇文章 https://learn.microsoft.com/en-us/nuget/quickstart/create-and-publish-a-package-using-visual-studio-net-framework 进行操作,但是当我运行 "nuget pack" 命令时,出现以下警告:
"WARNING: NU5128: Some target frameworks declared in the dependencies group of the nuspec and the lib/ref folder do not have exact matches in the other location. Consult the list of actions below:
- Add a dependency group for .NETFramework4.6.1 to the nuspec"

我尝试将依赖组添加到 .nuspec 文件中:

<?xml version="1.0"?> 
<package>
  <metadata>
    <id>$id$</id>
    <version>$version$</version>
    <title>$title$</title>
    <authors>Author</authors>
    <owners>$author$</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>H</description>
    <copyright>Copyright 2019</copyright>
    <tags>blah</tags>
    <dependencies>
      <group targetFramework=".NETFramework4.6.1" />
    </dependencies>   
  </metadata> 
</package>

我也尝试过:

<?xml version="1.0"?> 
<package>
  <metadata>
    <id>$id$</id>
    <version>$version$</version>
    <title>$title$</title>
    <authors>Author</authors>
    <owners>$author$</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>H</description>
    <copyright>Copyright 2019</copyright>
    <tags>blah</tags>
    <dependencies>
      <group targetFramework="net461" />
    </dependencies>   
  </metadata> 
</package>

我仍然遇到相同的错误。

我尝试使用旧版本的NuGet,但警告信息没有显示,但是问题仍然存在(如果我尝试通过包管理器添加,它会说它没有依赖项)。


将生成的程序包以ZIP格式打开,然后查看其中的文件夹结构。请编辑您的问题以包含此信息。 - Lex Li
你的项目是否有NuGet依赖项?如果有,是否必须使用packages.config?如果答案是否定的或者是“我不知道”,请尝试按照使用Visual Studio创建和发布.NET Standard包的说明进行操作。如果需要针对netfx,则右键单击解决方案资源管理器中的项目,选择编辑项目文件,并将TargetFramework元素更改为使用net461而不是netstandard2.0。使用VS或dotnet.exe打包并查看是否存在相同的问题。 - zivkan
你好,这个问题有任何更新吗?除了使用nuget pack之外,您还可以考虑使用msbuild /t:pack命令。我假设您正在使用带有packagereference的.net框架项目,那么您可以检查一下msbuild command是否能够满足您的需求。希望能对您有所帮助 :-) - LoLance
1个回答

13
警告:NU5128:在nuspec的依赖项组和lib/ref文件夹中声明的一些目标框架与另一个位置中的确切匹配不符。请查看以下操作列表。
这是Github/Nuget的一个公开问题,请参见#8713。我可以在我的VS2017中使用Nuget V5.3重现同样的问题,如果我使用Nuget V5.2或更早版本,这个问题就会消失。对于这种情况,恐怕您必须使用较早版本的Nuget.exe,直到团队发布修复为止。
如果我尝试通过包管理器添加它,它会说它没有依赖项
1. 如果它显示no package dependencies,尽管您的包项目依赖于一些nuget包,请检查您是否正在使用packageReference来管理当前项目中的nuget。目前,nuget pack命令对于.net framework projects with packageReferencenew SDK format projects并不起作用。
您可以从Leo's answer中了解详细信息以解决此问题。

2. 如果您所说的 没有依赖项 是指当一个项目使用您的包时,它不会显示您的项目针对哪个框架,就像这样:

enter image description here (我们可以看到您的包依赖于 Newtonsoft.Json,但我们找不到它针对哪个框架(net461)。)

为此,我们需要在打包时使用类似 nuget pack xx.nuspec 的命令将 dependencies+group 添加到包中。然后我们就可以看到目标框架和依赖包,如下图:

enter image description here

希望以上所有内容能够有所帮助,如果我有任何误解,请随时纠正 :)

2
我可以确认在Nuget v5.4中仍存在此问题;而且GitHub的#8713问题仍然未解决;降级到v5.2似乎仍然是必要的解决方法(对我有效):( - Sean Werkema
嗨,我也注意到了这个行为。我也尝试使用nuspec文件的pack命令。但是如果我这样做,我的整个项目文件夹都会被打包到包中,包括.cs文件、bin文件夹、obj文件夹等等... 如果我只使用pack命令而没有spec文件,它会被很好地打包,但是spec文件中定义的Framework-Group缺失了。我错过了什么吗?我读到了一些关于“基于约定的工作目录”的内容。但我想保留VS默认结构。难道不能使用nuspec文件并像你那样打包包吗? - daily
仍然存在5.11的问题。我降级到了5.2,这解决了我的问题 - 干杯! - to6y
感谢您的回答。通过降级到Nuget.exe版本5.2解决了我的问题。 - DhyMik

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