从参考netstandard项目的旧式框架项目创建nuget包

时间:2018-06-25 10:31:11

标签: .net .net-core nuget .net-standard

我有一个包含以下内容的解决方案:

  • 一个旧式.Net Framework 4.6项目(即,它不使用较新的项目sdk内容,它具有packages.config文件和nuspec文件)

  • 一个网络标准项目

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

我正在尝试找到一种封装框架项目的方法,同时考虑到对netstandard项目的依赖性(这样netstandard项目就显示为框架项目的依赖性,而不是捆绑在其中)。 / p>

我尝试过:

  • nuget pack -IncludeReferencedProjects

    • 由于netstandard项目(已知问题,例如https://github.com/NuGet/Home/issues/4808),此操作失败并显示“无法将类型为'System.String'的对象转换为类型为'NuGet.Frameworks.NuGet.Frameworks1070507.NuGetFramework'” < / li>
  • 将nuget pack目标导入框架csproj(<Import Project="$(MSBuildSDKsPath)\NuGet.Build.Tasks.Pack\build\NuGet.Build.Tasks.Pack.targets" />),然后导入dotnet packmsbuild /t:pack

    • 此操作失败,并出现有关缺少project.assets.json文件的错误(我认为对于使用packages.config的项目来说这不重要吗?)
    • 如果我进一步指定/p:NuspecFile=[path to nuspec],这将使我走得更远,而且一切似乎正常,但但是 netstandard项目依赖项已作为软件包的一部分捆绑在一起

2 个答案:

答案 0 :(得分:0)

如果我说对了,您想通过从旧项目中迁移代码来构建多目标NuGet软件包?

好吧,我通常是通过创建新项目,设置多目标,拖放所有项目并希望您有不受支持的程序集数量来实现的。

我为此编写了指南(实际上是网络上的想法的汇编),并使用多目标项目模板进行了VS扩展。因此,如果您不满意,我将安装扩展程序,创建新的“空白多目标项目”,并复制旧项目中的所有项目。

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

答案 1 :(得分:0)

通过将C升级到4.9.3(原为4.5.1)解决了该问题

相关问题