Search code examples
.net-corenugetcsproj

Exclude target framework from NuGet package


How can i exclude specific target framework from nuspec (NuGet package) generation?

This is my csproj:

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFrameworks>netstandard2.0;net5.0;net5.0-windows</TargetFrameworks>
        <IsPackable>true</IsPackable>
    </PropertyGroup>

    <PropertyGroup Condition="'$(TargetFramework)' == 'net5.0-windows'">
        <IsPackable>false</IsPackable>
    </PropertyGroup>
</Project>

dotnet pack command generates NuGet package that contains all target frameworks not only netstandard2.0 and net5.0

Generated nuspec:

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
  <metadata>
    <id>ExampleLibrary</id>
    <version>1.0.0</version>
    <authors>ExampleLibrary</authors>
    <description>Package Description</description>
    <dependencies>
      <group targetFramework="net5.0" />
      <group targetFramework="net5.0-windows7.0" />
      <group targetFramework=".NETStandard2.0" />
    </dependencies>
  </metadata>
</package>

Solution

  • <Project Sdk="Microsoft.NET.Sdk">
        <PropertyGroup>
            <TargetFrameworks>netstandard2.0;net5.0;net5.0-windows7.0</TargetFrameworks>
            <IsPackable>true</IsPackable>
            <GenerateNuspecDependsOn>$(GenerateNuspecDependsOn);_ExcludeTargetFramework;_ExcludeTargetFrameworkDependency</GenerateNuspecDependsOn>
        </PropertyGroup>
    
        <Target Name="_ExcludeTargetFramework" AfterTargets="_GetTargetFrameworksOutput" BeforeTargets="_WalkEachTargetPerFramework">
            <ItemGroup>
                <_TargetFrameworks Remove="net5.0-windows7.0" />
            </ItemGroup>
        </Target>
    
        <Target Name="_ExcludeTargetFrameworkDependency" AfterTargets="_WalkEachTargetPerFramework" BeforeTargets="GenerateNuspec">
            <ItemGroup>
                <_FrameworksWithSuppressedDependencies Include="net5.0-windows7.0" />
            </ItemGroup>
        </Target>
    </Project>
    
    
    <?xml version="1.0" encoding="utf-8"?>
    <package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
      <metadata>
        <id>ExampleLibrary</id>
        <version>1.0.0</version>
        <authors>ExampleLibrary</authors>
        <description>Package Description</description>
        <dependencies>
          <group targetFramework="net5.0" />
          <group targetFramework=".NETStandard2.0" />
        </dependencies>
      </metadata>
    </package>