Home: Question: how to change generated nuspec dependency 'exclude' setting?

Created on 7 Feb 2017  路  6Comments  路  Source: NuGet/Home

I'm trying to create a package that contains dependencies which should include Build and Analyzer assets into the installed project. However, the generated nuspec always generates dependencies from package and project references as:

<dependency id="packageid" version="version" exclude="Build,Analyzers" />

Is there a way to alter this? I would have expected something like this to work:

    <ProjectReference Include="..\otherpackage\otherpackage.csproj">
        <IncludeAssets>All</IncludeAssets>
    </ProjectReference>

    <PackageReference Include="SomePackage" Version="version">
        <IncludeAssets>All</IncludeAssets>
    </PackageReference>

Workaround:
Use <NuspecFile> and <NuspecProperties> and manually list the dependnecies using the right 'exclude' setting.

cc @rohit21agrawal

Pack

Most helpful comment

Try PrivateAssets None. Build/Analyzers are excluded as part of PrivateAssets by default. When creating a nuspec there is no concept of PrivateAssets, so they get added to the Include/Exclude lists. This isn't very intuitive however.

    <PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="1.1.0">
      <PrivateAssets>None</PrivateAssets>
    </PackageReference>

All 6 comments

IncludeAssets/PrivateAssets/ExcludeAssets should flow the right Exclude strings in the nuspec, if it's not doing it it's a bug. Repro project?

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp1.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="1.1.0">
      <IncludeAssets>All</IncludeAssets>
    </PackageReference>
  </ItemGroup>

</Project>

dotnet restore
dotnet msbuild /t:GenerateNuspec

Nuspec file contains:

      <group targetFramework=".NETCoreApp1.0">
        <dependency id="Microsoft.NETCore.App" version="1.1.0" exclude="Build,Analyzers" />
        <dependency id="Microsoft.Extensions.Configuration.UserSecrets" version="1.1.0" exclude="Build,Analyzers" />
      </group>

Using CLI 1.0.0-rc4-004757

Try PrivateAssets None. Build/Analyzers are excluded as part of PrivateAssets by default. When creating a nuspec there is no concept of PrivateAssets, so they get added to the Include/Exclude lists. This isn't very intuitive however.

    <PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="1.1.0">
      <PrivateAssets>None</PrivateAssets>
    </PackageReference>

Just checked. Setting PrivateAssets=None works. It generates include="all" on dependencies.

@natemcmaster here is the test matrix, in case you need to see the various combinations :
https://github.com/NuGet/NuGet.Client/blob/dev/test/NuGet.Core.FuncTests/Dotnet.Integration.Test/PackCommandTests.cs#L175-L187

here is the test matrix, in case you need to see the various combinations

Here's a link to a specific commit, so that the line numbers don't go out of sync with the code: https://github.com/NuGet/NuGet.Client/blob/8d300225298df9c6af6c784efffa7522109f0096/test/NuGet.Core.FuncTests/Dotnet.Integration.Test/PackCommandTests.cs#L379-L391

Was this page helpful?
0 / 5 - 0 ratings