从引用netstandard项目的旧式框架项目创建nuget包

问题描述 投票:1回答:2

我有一个解决方案包含:

  • 一个旧式的.Net Framework 4.6项目(即它不使用较新的项目sdk的东西,它有一个packages.config文件和一个nuspec文件)
  • 一个净标准项目

框架项目通过项目引用引用netstandard项目。

我正在尝试找到一种打包框架项目的方法,同时考虑到对netstandard项目的依赖(这样netstandard项目看起来是框架项目的依赖项,而不是捆绑在框架项目中)。

我试过了:

  • nuget pack -IncludeReferencedProjects 由于netstandard项目(一个已知问题,例如https://github.com/NuGet/Home/issues/4808),因为“无法将'System.String'类型的对象强制转换为'NuGet.Frameworks.NuGet.Frameworks1070507.NuGetFramework'”而失败
  • 在框架csproj(<Import Project="$(MSBuildSDKsPath)\NuGet.Build.Tasks.Pack\build\NuGet.Build.Tasks.Pack.targets" />)中导入nuget pack目标,然后dotnet packmsbuild /t:pack 这失败了有关缺少project.assets.json文件的错误(我不认为这是使用packages.config的项目?) 如果我进一步指定/p:NuspecFile=[path to nuspec],这会让我更进一步,事情似乎有效,但netstandard项目依赖项被捆绑为包的一部分
.net .net-core nuget .net-standard
2个回答
0
投票

如果我说得对,你想通过迁移旧项目中的代码来构建多目标NuGet包吗?

好吧,我通过创建新项目,设置多个目标,拖放所有项目并希望您拥有可存活数量的不受支持的程序集来定期执行此操作。

我已经为此编写了一份指南(实际上它是来自网络的思想汇编),并使用多目标项目模板进行了VS扩展。所以,如果我在你的鞋子里,我会安装扩展程序,创建新的“空白多目标项目”并复制旧项目中的所有项目。

就你的情况而言,你应该将.net45目标更改为等同于你的偏好。在教程中,您将找到有关不支持的程序集等的一些提示。它自己的项目模板为你完成了80%的工作。至少,在我的情况下(迁移9个库),一旦我采用了这种方法,它就是小菜一碟。


0
投票

通过将nuget.exe升级到4.9.3(原为4.5.1)解决了这个问题

© www.soinside.com 2019 - 2024. All rights reserved.