Subtle differences unclear in options of Flax.Build

In source code and manual, build script has similar options members in Flax.Build.

|SourcePaths|The source file directories. By default it contains the directory that contains this module file.|
|SourceFiles|The source files to include in module build.|
|PublicDependencies|The collection of the modules that are required by this module (for linking). Inherited by the modules that include it.|
|PrivateDependencies|The collection of the modules that are required by this module (for linking).|

There are many similar things under options, but not clearly understandable what is the exact differences between them even after reading the descriptions.

options.PublicDependencies
options.PrivateDependencies
options.DependencyFiles
options.OptionalDependencyFiles
options.Libraries
options.ScriptingAPI.FileReferences
options.ScriptingAPI.SystemReferences
options.LinkEnv.InputLibraries

All of them seems ‘related with external dependency’ but what can be the differences / purpose of each?
Document gives just a few cases of example :

// Add a .Net Library (DLL) as a reference
options.ScriptingAPI.FileReferences.Add(Path.Combine(steamworksPath, "Steamworks.NET.dll"));

// Add a file to library list of compile option of C++ project maybe?
// Add a file marked as "Copy to Output Directory" (like in VS project) of C# project maybe?
options.DependencyFiles.Add(Path.Combine(steamworksPath, "steam_appid.txt"));

When does other properties in BuildOptions / ScriptingAPIOptions utilized?