I am building a tool package which depends on another NuGet package. As it is not an usual library, it must include all dependencies into the tools\
directory. I have the following csproj
(only the relevant bits are shown):
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netstandard2.0;netstandard2.1</TargetFrameworks>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<DevelopmentDependency>true</DevelopmentDependency>
<IsTool>true</IsTool>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Build.Framework" Version="16.7.0" PrivateAssets="all" />
<PackageReference Include="Microsoft.Build.Utilities.Core" Version="16.7.0" PrivateAssets="all" />
<PackageReference Include="System.Text.Json" Version="4.7.2" PrivateAssets="all" GeneratePathProperty="true" />
</ItemGroup>
<ItemGroup>
<None Include="build\*" Pack="true" PackagePath="build\" />
<None Include="$(PkgSystem_Text_Json)\lib\netstandard2.0\*.dll" Visible="false" Pack="true" PackagePath="tools\" />
</ItemGroup>
</Project>
So I used GeneratePathProperty
on my dependency and try to include the assembly using generated path $(PkgSystem_Text_Json)
. I can confirm that the path is correct by setting Visible="true"
and inspecting my project. But the assembly is missing from my NuGet package. Seems that the generated path property does not exist at the moment of packaging. If I use an absolute path the assembly gets included but this solution is not portable.
How do I make generated path property work at packaging stage?