Build projects are simple C# console applications - no pre-processing or scripting involved, and part of your solution! That means all the powerful IDE features that we love - like code-completion, refactorings and formatting - will work without any extensions. Targets are defined as expression-bodied properties, so you might want to say good-bye to magic strings! But most importantly, debugging is available just as you know it. There is no more need to debug code by writing output to the console!
The .NET ecosystem is just a wonderful place. Although build projects integrate natively into existing tooling, we are not stopping there! A global tool can be installed, that assists with the setup and invocation of builds by a single
nuke command. Also extensions for VSCode, Rider and ReSharper are available that enhance the command palette and the Alt-Enter menu to execute build targets in the most convenient way!
Execution APIs for third-party command-line tools are based on data from official references. We're extracing information like argument types, formatting and others into so-called specification files. These files are then processed by a code-generator that generates a rich and consistent fluent API. Official help texts are shown in IntelliSense! And no more need to worry about escaping or separators! Check out our addons for Azure CLI and Docker, which are even automatically updated whenever a new version of the related tool is published.
Fields can be marked with different attributes to get their value injected prior to execution. For instance,
[Parameter] retrieves the value from command-line arguments and environment variables with the same name as the field.
Absolute and relative paths can be constructed using the
/ division operator, which will automatically adjust the directory separator to the underlying OS. If required, paths can also be casted to match other platforms.
Common metadata, like solution file or repository url, and best-practice settings, like custom loggers or coverage filters, are automatically loaded into
DefaultSettings and can be used to invoke tools more efficiently.