如何从多个项目创建多目标 nuget 包

How to create a multi-targeting nuget package from multiple projects

我有一堆帮助程序 类 用于我们想要跨 .NET Framework 应用程序、标准程序集和 .NET Core 应用程序使用的 Web 应用程序。

我想将它们构建为可以安装在任何地方的 Nuget 包,并为使用应用程序的目标框架带来正确的引用。

我在 nuspec 文件中尝试了以下内容:

<files>
    <file src="**.dll" target="lib" />
    <file src="..\Utils.Web.Core\bin\Release\*.dll" target="lib\netcoreapp2.1" />
    <file src="..\Utils.Web.Fx\bin\Release\*.dll" target="lib\net461" />
</files>

<references>
    <group targetFramework="netstandard2.0">
        <reference file="Utils.Web.dll" />
    </group>
    <group targetFramework="net461">
        <reference file="Utils.Web.Fx.dll" />
        <reference file="Utils.Web.dll" />
    </group>
    <group targetFramework="netcore45">
        <reference file="Utils.Web.Core.dll" />
        <reference file="Utils.Web.dll" />
    </group>-->
</references>

认为应该做的是将正确的 dll 复制到正确的目标 .lib 文件夹并引用这些程序集。但是最后的 nupkg 不包含任何 .lib 文件夹。

我正在尝试做的事情是否可行,我错过了什么?

引用分组不能与文件列表混合,请查看nuget spec文件的模式定义,

.nuspec reference - Explicit assembly reference

The group format cannot be intermixed with a flat list.

我可以使用以下规范创建和使用 nuget pacakge,

<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
  <metadata>
    <id>package_id</id>
    <!-- other metadata element -->
    <references>
        <group targetFramework="net461">
            <reference file="Utils.Web.dll" />
            <reference file="Utils.Web.Fx.dll" />
        </group>
        <group targetFramework="netcoreapp2">
            <reference file="Utils.Web.dll" />
            <reference file="Utils.Web.Core.dll" />
        </group>
    </references>
  </metadata>
  <files>
    <file src="bin\Debug\netcoreapp2\Utils.Web.Core.dll" target="lib" />
    <file src="bin\Debug\net461\Utils.Web.Fx.dll" target="lib" />
    <file src="bin\Debug\Utils.Web.dll" target="lib" />
  </files>
</package>

考虑使用文件元素的 target 属性或 **使用引用明确地将它们分组 **。