Nuget 包创建 - 针对 .NET 框架 4.6.1 的类库无法针对正确的框架

Bil*_*lly 10 c# visual-studio nuget

我创建了一个面向 .net framework 4.6.1 的类库(几乎是一个空白画布,只有一个方法来返回一个字符串,仅用于测试目的)。我想把它做成一个 nuget 包。我正在关注这篇文章https://docs.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"
Run Code Online (Sandbox Code Playgroud)

我尝试将依赖项组添加到 .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>
Run Code Online (Sandbox Code Playgroud)

我也试过:

<?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>
Run Code Online (Sandbox Code Playgroud)

我仍然得到同样的错误。

我尝试使用旧版本的 nuget,其中未显示警告消息,但同样的问题仍然存在(如果我尝试通过包管理器添加,它说它没有依赖项)。

Lan*_*SFT 9

警告: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命令不适用于具有 packageReference新 SDK 格式项目的.net 框架项目

您可以从Leo 的回答中查看详细信息以解决此问题。

2.如果no dependencies你的意思是当一个项目使用你的包时,它不会像这样显示你的项目针对哪个框架:

在此处输入图片说明 (我们可以看到您的包依赖于 Newtonsoft.Json,但我们无法找到它针对的框架(net461)。)

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

在此处输入图片说明

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

  • 我可以确认这在 Nuget v5.4 中仍然是一个问题;GitHub 问题 #8713 仍然开放;降级到 v5.2 似乎仍然是强制性修复(这对我有用):( (2认同)