GetNuTool
Embeddable Package Manager (+core in .bat); š Lightweight tool to Create or Distribute using basic shell scripts (no powershell no dotnet-cli)
Install / Use
/learn @3F/GetNuToolREADME
GetNuTool
Embeddable Package Manager (+core in .bat); š Lightweight tool to Create or Distribute using basic shell scripts (does not require powershell or dotnet-cli); NuGet / Chocolatey client;
Copyright (c) 2015-2025 Denis Kuzmin <x-3F@outlook.com> github/3F
gnt-help | gnt~& svc.gnt | gnt*/p:use=documentation
gnt Fnv1a128 # Get Fnv1a128 package
gnt +DllExport # Install DllExport package
gnt *DllExport # Install and Run DllExport.bat
gnt ~hMSBuild # Touch hMSBuild
gnt /t:pack /p:ngin="bin\DllExport" # Create new DllExport package
gnt "Conari;regXwild" # Get Conari & regXwild packages
msbuild gnt.core /p:ngpackages=LuNari/1.6.0 # Use msbuild to get LuNari 1.6.0
gnt Huid/1.0.0:src.zip /t:grab # Grab Huid 1.0 as zip without unpacking
gnt /p:ngconfig="dir\packages.config" # Use specified packages.config
set ngpackages=Conari & gnt # shell scripts
gnt /p:ngpackages=putty.portable/0.69 # chocolatey
/p:ngserver="https://chocolatey.org/api/v2/package/"
Download all editions: Core, Minified, Executable, C# version for .NET, ...
Direct Links to the latest stable:
- (Windows) Latest stable compiled batch-script [ gnt.bat ]
https://3F.github.io/GetNuTool/releases/latest/gnt/
Projects based entirely on GetNuTool
- netfx4sdk - Developer Pack (SDK). NETFX 4: Visual Studio 2022+ / MSBuild 17+ / or other modern tools;
- hMSBuild - Compiled text-based embeddable pure batch-scripts for searching modern MSBuild instances;
- .NET DllExport Manager - Part of the DllExport tool that provides its completely independent management and distribution beyond the NuGet ecosystem. Relies on MvsSln as well;
Why GetNuTool
> gnt # via single shell script
> msbuild gnt.core # via MSBuild engine
[NuGet gnt.raw("/t:pack /p:ngin=7z.Libs")] # via SobaScript
new GetNuTool() # .NET(netfx 4.0+, .NET 5+, .NET Core, Mono) C#
Lightweight Portable and completely Embeddable (+core in .bat) package tool to create or distribute everything from anything.
Back in those days it was originally developed as an alternative to solution level limitations, i.e. github.com/NuGet/Home/issues/1521. In attempt to provide a tool to easily maintain projects, libraries, and other related build processes; For all projects at once at the solution level and of course for each separately if necessary.
For example, it was designed to be more friendly to such NuGet packages:
- vsSolutionBuildEvent (before, aka vsSBE.CI.MSBuild)
- 7z.Libs
- DllExport
- ILAsm
However! GetNuTool has more powerful ways even for standard NuGet packages providing a wider range of use cases.
Key Features
- Install .nupkg packages from remote NuGet (or like: chocolatey, ...) servers.
- Grab or Install any zipped packages from direct sources (local, remote http, https, ftp, ...).
- Controlled unpacking of all received packages. Modes:
getorgraborinstallortouch - Hash values control using
sha1for receiving every package if used unsecured channels (~windows xp) etc. - Creating new NuGet packages .nupkg from .nuspec.
- Two supported formats: xml packages.config (+extra: output, sha1) and inline records.
- Inline records and packages.config are fully compatible between, and config has backward compatibility with original packages.config
- Configurable custom folders for every receiving.
- Request to the server only if the package is not installed.
- Supports proxy with custom credential.
- Default settings are overridden through an environment variables: default .config files, NuGet server, etc.
- The ability to create one click ~8 KB .bat wrappers for any packages. Try for example vsSolutionBuildEvent.bat
- Easy integration into any scripts such as pure batch-script netfx4sdk, DllExport, hMSBuild
- C# projects support via GetNuTool.cs
- .pkg.install.bat and .pkg.install.sh support for install, run, touch modes and additionally via
+(plus),*(asterisk),~(tilde) i.e.gnt +...,gnt *...,gnt ~...respectively.
Note:
- Dependencies are not considered.
- Doesn't manage projects or solutions files. You need MvsSln or anything else together with.
- NuGet events (Init.ps1, Install.ps1, Uninstall.ps1) from /tools will not be launched automatically.
- To use events (from Visual Studio, MSBuild, NuGet, etc.), you can with vsSolutionBuildEvent, or vsCommandEvent, or configure it like DllExport project, or command it manually.
tModes and Commands
get
For receiving packages or zipped files from local or remote source, then installing / extracting.
The get is used by default but you can also specify /t:get
Property | Description | Default values
------------|--------------------------------------------------------------|-----------------
ngconfig | Define .config files. | 1.9+ packages.config;.tools\packages.config
š ngserver | Define server. | 1.0+ https://www.nuget.org/api/v2/package/
ngpackages | List of packages. Disables ngconfig if specified. |
ngpath | Common path for all packages. | 1.0+ packages
wpath | 1.4+ To change working directory. | 1.4+ (The absolute path of the directory where the GetNuTool is located)
š proxycfg | 1.6.2+ To configure connection via proxy. |
ssl3 | 1.9+ Do not drop legacy ssl3, tls1.0, tls1.1 if true.|
break | 1.9+ Disable the break on first package error if no |
*š env protected property in 1.10+. Changing the value using an environment variables with the same name is prohibited. All intersections in used environment must be removed before actual execution (for example set "ngserver="), otherwise it will result in denied error.
Package List Format
Attribute | Description | Example
----------|----------------------------------------------|------------------------------
id | Identifier of package. | Conari
version | (Optional) Package version. | 1.5.0 or 1.5-beta2 or 1.5-RC etc.
output | (Optional) Where to store package data. | ../tests/case1
sha1 | (Optional) Expected sha1 for this package. | eead8f5c1fdff2abd4da7d799fbbe694d392c792
Note:
- As of version 1.2+, attributes are now case sensitive. Please use lowercase for
id,version,output,sha1. - It will link to the latest available version if
versionattribute is not defined. outputattribute is relative tongpath. You can also use absolute path.sha1activates the alternative security check before each accessing (modes: get, install, run, touch, grab). It useful when connection is not secure like on windows xp with obsolete ciphers. But please note: some servers (like official NuGet) may repackage .nupkg for some purposes, such as adding .signature.p7s etc. This of course changes sha1 hash value that you need to check.idallows onlya-zA-Z0-9.-_symbols without whitespaces.
ngpackages
id[/version][?sha1][:path];id2[/version][?sha1][:path];...
delimiters:
;1.6+Name1;Name2;Name3|1.0-1.9Name1|Name2|Name3
/p:ngpackages=Name1
/p:ngpackages="Name1;Name2"
packages.config
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Name1" version="1.5.0" />
<package id="Name2" output="path" />
<package id="Name3" version="2.2-RC" sha1="eead8f5c1fdff2abd4da7d799fbbe694d392c792" />
</packages>
/p:ngconfig=".nuget/packages.config"
/p:ngconfig="debug.config;release.config;..."
Proxy Format
[usr[:pwd]@]host[:port]
/p:proxycfg="example.com:4321"
grab
1.9+
Gra
