Online-Suche auf NuGet.org nach Projektvorlagen:
Bisher: dotnet new blazor --search --language C# --author xy
Nun auch: dotnet new search blazor --language C# --author xy
Installieren einer Projektvorlage von NuGet.org:
Bisher: dotnet new --install PACKAGE_ID
Nun auch: dotnet new install PACKAGE_ID
Liste aller installierten Projektvorlagen:
Bisher: dotnet new --list
Nun auch: dotnet new list
Deployment direkt in Container ohne Dockerfile:
dotnet add package Microsoft.NET.Build.Containers
dotnet publish --os linux --arch x64 -c Release -p:PublishProfile=DefaultContainer
T Calc<T>(T x, T y) where T : INumber<T> {
Trace.WriteLine($"Calc {x.GetType().ToString()}/{y.GetType().ToString()}");
if (x == T.Zero || y <= T.Zero) return T.One;
return (x + y) * T.CreateChecked(42.24);
}
Diese generische Funktion kann mit beliebigen numerischen Typen aufgerufen werden:
Console.WriteLine(Calc(1, 2)); // Byte -> 126
Console.WriteLine(Calc((Int128)1, (Int128)2)); // -> 126
Console.WriteLine(Calc(1.0d, 2.0d)); // Double -> 126,72
Console.WriteLine(Calc(1.0m, 2.0m)); // Decimal -> 126,720
In .csproj-Datei, leider nur für Konsolenanwendungen und DLLs!
<PropertyGroup>
<PublishAot>true</PublishAot>
</PropertyGroup>
Kompilierung:
dotnet publish -r win-x64 -c Release
Neue Eigenschaften Microseconds und Nanoseconds bei den Klassen TimeStamp, DateTime, DateTimeOffset und TimeOnly:
TimeSpan ts = endeZeitunkt - startZeitunkt;
Console.WriteLine(ts.TotalMilliseconds + " ms"); // 1sek = 1000 ms
Console.WriteLine(ts.TotalMicroseconds + " µs"); // 1ms = 1000 µs
Console.WriteLine(ts.TotalNanoseconds + " ns"); // 1µs = 1000 ns
Console.WriteLine(ts.Ticks + " ticks"); // 1ns = 100 Ticks
public static partial class Win32API {
[LibraryImport("User32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static partial bool MessageBeep(UInt32 beepType);
}
Aufruf dann:
Win32API.MessageBeep(10);
TAR-Archiv mit GZip-Komprimierung aus dem Verzeichnis erstellen:
string folder = @"T:\Dokumente";
string tar = @"T:\ArchivKomprimiert.tar.gz";
using (MemoryStream ms = new()) {
using (TarWriter writer = new(ms, TarEntryFormat.Pax, leaveOpen: true)) {
foreach (var file in new System.IO.DirectoryInfo(folder).GetFiles()) {
writer.WriteEntry(fileName: file.FullName, entryName: file.Name);
}
}
using FileStream tarstream = File.Create(tar);
using GZipStream compressor = new(tarstream, CompressionMode.Compress);
ms.Seek(0, SeekOrigin.Begin);
ms.CopyTo(compressor);
ms.Close();
}
Komprimiertes TAR in ein Verzeichnis extrahieren:
using (FileStream fs = File.OpenRead(tar)) {
using GZipStream decompressor = new(fs, CompressionMode.Decompress);
using TarReader reader = new(decompressor, leaveOpen: false);
TarEntry? entry;
while ((entry = reader.GetNextEntry(copyData: true)) != null) {
string destFileName = Path.Join(folder, entry.Name);
entry.ExtractToFile(destinationFileName, overwrite: true);
}
}
var data = new List<int>() { 2, 1, 3 };
var sortedAlt = data.OrderBy(e => e);
var sortedDescAlt = data.OrderByDescending...