使用.nuspec创建多目标nuget包

问题描述

我在.csproj中指定了多目标定位

<TargetFrameworks>netstandard2.0;net472</TargetFrameworks>

当我使用以下脚本时,则我的包具有依赖关系,这是预期的结果:

dotnet pack --output nupkgs $ProjectPath -c:Release

问题是当我还想将.nuspec文件与一些有关软件包的信息一起使用时:

dotnet pack --output nupkgs $ProjectPath -c:Release -p:NuspecFile=$NuspecFile 

使用.nuspec文件,该软件包没有依赖性,我只能将其安装在netstandard2.0 ...

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
  <Metadata>
    <id>xyz</id>
    <version>1.2011.4</version>
    <title>xyz</title>
    <authors>xyz</authors>
    <projectUrl>xyz</projectUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>xyz</description>
    <copyright>xyz</copyright>
  </Metadata>
</package>

我是否应该在此.nuspec中添加一些内容以使其具有目标依赖性包?我已经阅读过有关标签的信息,但是老实说我找不到如何配置标签的示例。

解决方法

鉴于您正在使用基于SDK的项目,因此我强烈不建议您使用nuspec,除非您的方案由于其复杂性而无法满足要求。

通过dotnet.exe pack通过项目文件自动生成软件包可以为您完成很多兼容性工作。

如果您确实需要使用nuspec,则应添加如下定义的依赖项组:

https://docs.microsoft.com/en-us/nuget/reference/nuspec#dependency-groups

确保添加了相关框架。

示例

    <group targetFramework=".NETFramework4.7.2">
        <dependency id="PackageA" version="1.2.3" />
    </group>
     <group targetFramework=".NETStandard2.0">
        <dependency id="PackageB" version="4.5.6" />
    </group>

请注意,您需要为所支持的特定框架添加一个依赖组。