Nuget Acknowledgement Exporter
Small tool responsible for extracting licenses from NuGet packages included in .NET projects.
Usage of Third-Party Libraries usually requires to include licenses within an application. This command-line tool can be used for auto-generating the “Acknowledgement” / “Third-Party Libraries” page in your project.
NugetAcknowledgementsExporter finds all CSPROJs in a directory from the argument, extracts all included NuGet packages and downloads their licenses. Based on gained data it builds two files:
- acknowledgements.txt – text file containing all acknowledgements for NuGet packages. It could be directly included within your application in a scrollable text field.
- project_packages.json – JSON file containing an array of used NuGet packages including downloaded licenses. It could be used to build a more interesting UI for acknowledgements, generated from code based on this file.
Features
- Detecting
*.csproj
files recursively in project directory - Extracting NuGet packages from
*.csproj
- Extracting NuGet packages from
packages.json
- Grouping packages with the same authors, projectUrl and licenseUrl
- Downloading licenses from
licenseUrl
(included in NuGetnuspec
file) - Adding custom licenses (edit file:
licenses/licenses.json
) - Excluding packages (edit file:
licenses/exclude.json
) - Including custom packages (edit file:
licenses/include.json
) - Windows and MacOS support
Requirements
- Download latest .NET Core
https://dotnet.microsoft.com/download/
- Download latest NuGet commandline tool
Windows: https://www.nuget.org/downloads (+ add to PATH)
MacOS: brew install nuget
Usage
- Download code:
git clone https://github.com/wojciech-kulik/NugetAcknowledgementExporter.git
-
Restore NuGet packages for all projects. Application uses NuGet cache, so it needs to be there.
-
Build & run:
dotnet run -- <args or --help>
Arguments
Usage: NugetAcknowledgementExporter <project directory> [args]
Available parameters:
o|output= directory where generated files will be saved (by default project directory)
sj|skipJson skips generating json file with acknowledgements
st|skipTxt skips generating text file with acknowledgements
h|help shows all available parameters
To add custom licenses or packages please edit:
- licenses/licenses.json
- licenses/include.json
- licenses/exclude.json
Sample command
dotnet run -- "/Users/YYY/repositories/my-project/source" -output="/Users/YYY/Desktop"
or once it's built, you can navigate to binary and run it directly:
MacOS: ./NugetAcknowledgementExporter "/Users/YYY/repositories/my-project/source" -output="/Users/YYY/Desktop"
Windows: NugetAcknowledgementExporter "C:\Users\YYY\repositories\my-project\source" -output="C:\Users\YYY\Desktop"
Sample Output
Plugin.Permissions
Authors: James Montemagno
Project URL: https://github.com/jamesmontemagno/PermissionsPlugin
License URL: https://github.com/jamesmontemagno/PermissionsPlugin/blob/master/LICENSE
The MIT License (MIT)
Copyright (c) 2016 James Montemagno
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), (...)
----------------------------
Plugin.StoreReview
Authors: James Montemagno
Project URL: https://github.com/jamesmontemagno/StoreReviewPlugin
License URL: https://github.com/jamesmontemagno/StoreReviewPlugin/blob/master/LICENSE
The MIT License (MIT)
Copyright (c) 2016 James Montemagno
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), (...)
(...)
TODO
- More testing
- Code refactoring - split
Program.cs
into classes - Download and cache nuspec from https://www.nuget.org/api/v2/package/{packageID} instead of relying on NuGet's cache
- Custom templates for
acknowledgements.txt
- Recognizing popular URLs with well-known licenses (like already done for: opensource.org/licenses/mit and licenses.nuget.org/mit)
- Automatic run when
dotnet restore
ornuget restore
called (if possible?)