What does PrivateAssets='All' mean?

Ryan Payne picture Ryan Payne · Dec 14, 2020 · Viewed 9.5k times · Source

When I build my .NET Core (NETStandard v2.0) project I am getting the following warning:

ViewModels: [FodyPackageReference] Fody: The package reference for PropertyChanged.Fody does not contain PrivateAssets='All'

The warning is in reference to the PropertyChanged.Fody NuGet package.

While the warning does not stop the build, I would like to resolve the warning. However, I don't understand what it is trying to communicate.

Answer

Ryan Payne picture Ryan Payne · Dec 14, 2020

PrivateAssets is a metadata tag used to control dependency assets.

You might be using a dependency purely as a development harness and might not want to expose that to projects that will consume your package. In this scenario, you can use the PrivateAssets metadata to control this behavior.

Package references (PackageReference) in project files

In your case, unless you want to expose PropertyChanged.Fody to a consumer (i.e. you are releasing a library), setting PrivateAssets to All in your .csproj file will remove the warning.

<Project Sdk="Microsoft.NET.Sdk">
    <ItemGroup>
      <PackageReference Include="PropertyChanged.Fody" Version="3.3.1" PrivateAssets="All" />
    </ItemGroup>
</Project>