Sdk: dotnet pack with nuspec doesn't fill in $version$ and other variables

Created on 25 Sep 2019  路  2Comments  路  Source: dotnet/sdk

There seems to be an issue when using a nuspec file with dotnet pack like dotnet pack myproject.csproj -p:NuspecFile=myproject.nuspec. The variables like $version$ are not filled out.

Steps to reproduce

  1. Create a .NET Standard 2.0 library project in VS2019.
  2. Create a nuspec file and put it in the root folder:
<?xml version="1.0"?>
<package >
  <metadata>
    <id>$id$</id>
    <version>$version$</version>
    <title>$title$</title>
    <authors>$author$</authors>
    <owners>$author$</owners>
    <licenseUrl>http://LICENSE_URL_HERE_OR_DELETE_THIS_LINE</licenseUrl>
    <projectUrl>http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE</projectUrl>
    <iconUrl>http://ICON_URL_HERE_OR_DELETE_THIS_LINE</iconUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>$description$</description>
    <releaseNotes></releaseNotes>
    <copyright>Copyright 2019</copyright>
    <tags>$tags$</tags>
    <references>
      <reference file="LibraryThatIWantToIncludeAlso.dll" />
    </references>
  </metadata>
  <files>
    <file src="lib\netstandard2.0\LibraryThatIWantToIncludeAlso.dll" target="lib\netstandard2.0\" />
  </files>
</package>
  1. Run dotnet pack myproject.csproj -p:NuspecFile=myproject.nuspec.

Expected behavior

dotnet packs the project to a nuget package and uses the variables from the csproj.

My csproj:

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

  <PropertyGroup>
    <!-- Added this manually but still doesn't work, also tried PackageVersion. The other vars were added by default. -->
    <Version>1.0.0</Version>
    <TargetFramework>netstandard2.0</TargetFramework>
    <Authors>Me</Authors>
    <Company>Me Corp</Company>
    <Product>My library</Product>
    <Description>This is my library.</Description>
    <PackageTags>MyLib</PackageTags>
  </PropertyGroup>

  <ItemGroup>
    <Reference Include="My3rdPartyApi">
      <HintPath>lib\netstandard2.0\My3rdPartyApi.dll</HintPath>
      <Private>true</Private>
    </Reference>
  </ItemGroup>

</Project>

Actual behavior

C:\Program Files\dotnet\sdk\2.2.401\Sdks\NuGet.Build.Tasks.Pack\build\NuGet.Build.Tasks.Pack.targets(198,5): error : An error occured while trying to parse the value '' of property 'version' in the manifest file. [C:\Users\me\myproject.csproj]
C:\Program Files\dotnet\sdk\2.2.401\Sdks\NuGet.Build.Tasks.Pack\build\NuGet.Build.Tasks.Pack.targets(198,5): error :   Value cannot be null or an empty string. [C:\Users\me\myproject.csproj]
C:\Program Files\dotnet\sdk\2.2.401\Sdks\NuGet.Build.Tasks.Pack\build\NuGet.Build.Tasks.Pack.targets(198,5): error :   Parameter name: value [C:\Users\me\myproject.csproj]

Additional info

If I use nuget pack myproject.csproj it will automatically find the nuspec file and use it as well and fill out the $version$ and other variables.

I would expect dotnet pack to be able to behave similarly.

Actually the only reason I'm using a nuspec file is because I want to include a 3rd party DLL in my package which my library wraps. But this doesn't seem possible without a nuspec file?

Environment data


.NET Core SDK (reflecting any global.json):

.NET Core SDK (reflecting any global.json):
 Version:   2.2.401
 Commit:    729b316c13

Runtime Environment:
 OS Name:     Windows
 OS Version:  10.0.18362
 OS Platform: Windows
 RID:         win10-x64
 Base Path:   C:\Program Files\dotnet\sdk\2.2.401\

Host (useful for support):
  Version: 2.2.6
  Commit:  7dac9b1b51

.NET Core SDKs installed:
  1.1.6 [C:\Program Files\dotnet\sdk]
  1.1.9 [C:\Program Files\dotnet\sdk]
  1.1.10 [C:\Program Files\dotnet\sdk]
  1.1.11 [C:\Program Files\dotnet\sdk]
  2.0.3 [C:\Program Files\dotnet\sdk]
  2.1.2 [C:\Program Files\dotnet\sdk]
  2.1.201 [C:\Program Files\dotnet\sdk]
  2.1.202 [C:\Program Files\dotnet\sdk]
  2.1.402 [C:\Program Files\dotnet\sdk]
  2.1.500 [C:\Program Files\dotnet\sdk]
  2.1.502 [C:\Program Files\dotnet\sdk]
  2.1.602 [C:\Program Files\dotnet\sdk]
  2.1.700 [C:\Program Files\dotnet\sdk]
  2.1.701 [C:\Program Files\dotnet\sdk]
  2.1.801 [C:\Program Files\dotnet\sdk]
  2.1.802 [C:\Program Files\dotnet\sdk]
  2.2.301 [C:\Program Files\dotnet\sdk]
  2.2.401 [C:\Program Files\dotnet\sdk]

.NET Core runtimes installed:
  Microsoft.AspNetCore.All 2.1.4 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.1.6 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.1.9 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.1.11 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.1.12 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.1.13 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.2.6 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.App 2.1.4 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.1.6 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.1.9 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.1.11 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.1.12 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.1.13 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.2.6 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 1.0.8 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 1.0.11 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 1.0.12 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 1.0.13 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 1.1.5 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 1.1.8 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 1.1.9 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 1.1.10 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.0.3 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.0.7 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.0.9 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.4 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.6 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.9 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.11 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.12 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.13 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.2.6 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]

Most helpful comment

@elonmallin

The targets pack with nuspec works a bit different, see https://docs.microsoft.com/en-us/nuget/reference/msbuild-targets#packing-using-a-nuspec.

You need to use the NuspecProperties property to pass the values.

Duplicate of https://github.com/NuGet/Home/issues/6636.

All 2 comments

@nkolev92 can you take a look?

@elonmallin

The targets pack with nuspec works a bit different, see https://docs.microsoft.com/en-us/nuget/reference/msbuild-targets#packing-using-a-nuspec.

You need to use the NuspecProperties property to pass the values.

Duplicate of https://github.com/NuGet/Home/issues/6636.

Was this page helpful?
0 / 5 - 0 ratings