【问题标题】:Create nuget package from old-style framework project referencing netstandard project从引用 netstandard 项目的旧式框架项目创建 nuget 包
【发布时间】:2018-12-03 21:43:05
【问题描述】:

我有一个解决方案包含:

  • 一个老式的 .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


    【解决方案1】:

    如果我没听错,您想通过从旧项目迁移代码来构建多目标 NuGet 包?

    嗯,我是通过创建新项目、设置多目标、拖放所有项目来例行执行此操作,并希望您拥有可生存的不受支持的程序集数量。

    我为此编写了一个指南(实际上它是来自网络的想法的汇编)并使用多目标项目模板制作了 VS 扩展。所以,如果我站在你的立场上,我会安装扩展程序,创建新的“空白多目标项目”并从旧项目中复制所有项目。

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

    【讨论】:

    • 不,我不想迁移旧项目。我想将旧(框架)项目的引用添加到新的 netstandard 项目
    • 好吧,我遇到了“深度”引用的问题,即我的旧项目引用了未针对 .NET Standard 2.0 编译/定位的 NuGet 包和/或 dll - 因此:你不能去做吧。
    • 本例中的 netstandard 项目针对 1.0 - 引用编译和运行没有问题 - 问题只是 nuget 打包
    • 我的解决方案(我又来了)是将(旧项目)迁移到多目标,因为我找不到另一个解决方案,因为:即使你让这些程序集一起工作,什么是拥有非跨平台的 .NET Standard 项目的目的是什么?
    • netstandard 项目是跨平台的。框架项目不是,而是依赖于 netstandard 项目(作为包独立发布)。
    【解决方案2】:

    通过将 nuget.exe 升级到 4.9.3(原为 4.5.1)修复了此问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-15
      • 1970-01-01
      • 2019-03-22
      • 1970-01-01
      • 2018-05-06
      • 1970-01-01
      • 2017-11-02
      • 2012-07-04
      相关资源
      最近更新 更多