【问题标题】:Nuget package creation - Class library that targets .NET framework 4.6.1 can not target correct frameworkNuget 包创建 - 以 .NET 框架 4.6.1 为目标的类库不能以正确的框架为目标
【发布时间】:2020-03-05 00:34:59
【问题描述】:

我创建了一个面向 .net 框架 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"

我尝试将依赖组添加到 .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 格式打开,然后检查其中的文件夹结构。请编辑您的问题以包括在内。
  • 你的项目会有nuget依赖吗,如果有,是否有必要使用packages.config?如果答案是否定的或“我不知道”,请改用following the instructions to create a .NET Standard package。如果您需要以 netfx 为目标,则在解决方案资源管理器中右键单击项目,选择编辑项目文件并将TargetFramework 元素更改为使用net461 而不是netstandard2.0。打包(使用 VS 或 dotnet.exe),看看你是否有同样的问题
  • 嗨,这个问题有什么更新吗?除了 nuget pack,您还可以考虑使用 msbuild /t:pack 命令。我假设您在带有 packagereference 的 .net 框架项目中,然后您可以检查 msbuild command 是否可以满足您的需求。可能会有所帮助:-)

标签: c# visual-studio nuget


【解决方案1】:

警告:NU5128:在依赖项中声明了一些目标框架 nuspec 组和 lib/ref 文件夹没有完全匹配 在另一个位置。请参阅下面的操作列表。

这是Github/Nuget 中的一个未解决问题,请参阅#8713。我可以在我的 VS2017 中使用 Nuget V5.3 重现相同的问题,如果我使用 Nuget V5.2 或更早版本,这个问题就会消失。对于这种情况,恐怕您必须使用早期版本的Nuget.exe,直到团队发布修复程序。

如果我尝试通过包管理器添加,它说它没有 依赖关系

1.如果您的包项目依赖于一些nuget包,但显示no package dependencies,请检查您当前项目中是否使用packageReference管理nuget。目前,nuget pack 命令不适用于.net framework projects with packageReferencenew SDK format projects

您可以查看Leo's answer 的详细信息来解决此问题。

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

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

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

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

【讨论】:

  • 我可以确认这在 Nuget v5.4 中仍然是一个问题;并且 GitHub 问题 #8713 仍然开放;并且降级到 v5.2 似乎仍然是强制性修复(对我有用):(
  • 您好,我也注意到了这种行为。而且我还尝试将 pack 命令与 nuspec 文件一起使用。但是如果我这样做,我的整个项目文件夹会被打包到包中,包括 .cs-Files、bin-Folder、obj-Folder 等等......如果我只使用没有 spec-File 的 pack 命令,它会被打包很好,但是规范文件缺少我在其中定义的框架组。我错过了什么吗?我读过一些关于“基于约定的工作目录”的内容。但我想保留 VS 默认结构。是不是可以像以前那样使用 nuspec-File 并打包包?
  • 5.11 还是有问题。我降级到 5.2,这解决了我的问题 - 干杯!
  • 感谢您的回答。解决了我降级到 nuget.exe 5.2 版的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-26
  • 1970-01-01
  • 2018-06-28
相关资源
最近更新 更多