3.0 arrived in September and can produce one file containing the application, its dependencies and the runtime — which changes what deployment means compared with a PHP release directory.
$ dotnet publish -c Release -r linux-x64
-p:PublishSingleFile=true -p:PublishTrimmed=true -o ./out
$ ls -la out
-rwxr-xr-x 38M Orders
-rw-r--r-- 1.2K appsettings.json
# scp one binary. no runtime on the target, no composer install.
Trimming removes assemblies the analyser cannot see being used, which breaks reflection-based code silently — so it needs testing rather than assuming, and the failure is a missing type at runtime. The single file is extracted to a temporary directory on first run, which surprises anyone expecting a truly static binary. Against a PHP deploy the trade is clear: a larger artefact built once, against a smaller one that depends on the target having the right runtime and extensions.