#!/usr/bin/env /Library/Frameworks/Mono.framework/Commands/csharp // arguments are: using System.IO; using System.Xml; var args = Environment.GetCommandLineArgs (); var expectedArgumentCount = 6; if (args.Length != expectedArgumentCount + 2 /* 2 default arguments (executable + script) + 'expectedArgumentCount' arguments we're interested in */) { // first arg is "/Library/Frameworks/Mono.framework/Versions/4.8.0/lib/mono/4.5/csharp.exe" // second arg the script itself // then comes the ones we care about Console.WriteLine ($"Need {expectedArgumentCount} arguments, got {args.Length - 2}"); Environment.Exit (1); return; } var argumentIndex = 2; var platform = args [argumentIndex++]; var version = args [argumentIndex++]; var net6Version = args [argumentIndex++]; var runtimeIdentifiers = args [argumentIndex++].Split (new char [] { ' ' }, StringSplitOptions.RemoveEmptyEntries); var outputPath = args [argumentIndex++]; var windowsPlatforms = args [argumentIndex++].Split (new char [] { ' ' }, StringSplitOptions.RemoveEmptyEntries); var hasWindows = Array.IndexOf (windowsPlatforms, platform) >= 0; var platformLowerCase = platform.ToLowerInvariant (); using (TextWriter writer = new StreamWriter (outputPath)) { writer.WriteLine ($"{{"); writer.WriteLine ($" \"version\": \"{version}\","); writer.WriteLine ($" \"workloads\": {{"); writer.WriteLine ($" \"{platformLowerCase}\": {{"); writer.WriteLine ($" \"description\": \".NET SDK Workload for building {platform} applications.\","); writer.WriteLine ($" \"packs\": ["); writer.WriteLine ($" \"Microsoft.{platform}.Sdk.net7\","); writer.WriteLine ($" \"Microsoft.{platform}.Sdk.net6\","); if (hasWindows) { writer.WriteLine ($" \"Microsoft.{platform}.Windows.Sdk.Aliased.net7\","); writer.WriteLine ($" \"Microsoft.{platform}.Windows.Sdk.Aliased.net6\","); } writer.WriteLine ($" \"Microsoft.{platform}.Ref\","); foreach (var rid in runtimeIdentifiers) { writer.WriteLine ($" \"Microsoft.{platform}.Runtime.{rid}\","); } writer.WriteLine ($" \"Microsoft.{platform}.Templates.net7\""); writer.WriteLine ($" ],"); writer.WriteLine ($" \"extends\": ["); if (platform == "macOS") { writer.WriteLine ($" \"microsoft-net-runtime-mono-tooling\","); writer.WriteLine ($" \"microsoft-net-runtime-mono-tooling-net6\","); } else { writer.WriteLine ($" \"microsoft-net-runtime-{platformLowerCase}\","); writer.WriteLine ($" \"microsoft-net-runtime-{platformLowerCase}-net6\","); } writer.WriteLine ($" ]"); writer.WriteLine ($" }},"); writer.WriteLine ($" }},"); writer.WriteLine ($" \"packs\": {{"); writer.WriteLine ($" \"Microsoft.{platform}.Sdk.net7\": {{"); writer.WriteLine ($" \"kind\": \"sdk\","); writer.WriteLine ($" \"version\": \"{version}\","); writer.WriteLine ($" \"alias-to\": {{"); writer.WriteLine ($" \"any\": \"Microsoft.{platform}.Sdk\""); writer.WriteLine ($" }}"); writer.WriteLine ($" }},"); writer.WriteLine ($" \"Microsoft.{platform}.Sdk.net6\": {{"); writer.WriteLine ($" \"kind\": \"sdk\","); writer.WriteLine ($" \"version\": \"{net6Version}\","); writer.WriteLine ($" \"alias-to\": {{"); writer.WriteLine ($" \"any\": \"Microsoft.{platform}.Sdk\""); writer.WriteLine ($" }}"); writer.WriteLine ($" }},"); if (hasWindows) { writer.WriteLine ($" \"Microsoft.{platform}.Windows.Sdk.Aliased.net7\": {{"); writer.WriteLine ($" \"kind\": \"sdk\","); writer.WriteLine ($" \"version\": \"{version}\","); writer.WriteLine ($" \"alias-to\": {{"); writer.WriteLine ($" \"win-x64\": \"Microsoft.{platform}.Windows.Sdk\","); writer.WriteLine ($" \"win-x86\": \"Microsoft.{platform}.Windows.Sdk\","); writer.WriteLine ($" \"win-arm64\": \"Microsoft.{platform}.Windows.Sdk\","); writer.WriteLine ($" }}"); writer.WriteLine ($" }},"); writer.WriteLine ($" \"Microsoft.{platform}.Windows.Sdk.Aliased.net6\": {{"); writer.WriteLine ($" \"kind\": \"sdk\","); writer.WriteLine ($" \"version\": \"{net6Version}\","); writer.WriteLine ($" \"alias-to\": {{"); writer.WriteLine ($" \"win-x64\": \"Microsoft.{platform}.Windows.Sdk\","); writer.WriteLine ($" \"win-x86\": \"Microsoft.{platform}.Windows.Sdk\","); writer.WriteLine ($" \"win-arm64\": \"Microsoft.{platform}.Windows.Sdk\","); writer.WriteLine ($" }}"); writer.WriteLine ($" }},"); } writer.WriteLine ($" \"Microsoft.{platform}.Ref\": {{"); writer.WriteLine ($" \"kind\": \"framework\","); writer.WriteLine ($" \"version\": \"{version}\""); writer.WriteLine ($" }},"); foreach (var rid in runtimeIdentifiers) { writer.WriteLine ($" \"Microsoft.{platform}.Runtime.{rid}\": {{"); writer.WriteLine ($" \"kind\": \"framework\","); writer.WriteLine ($" \"version\": \"{version}\""); writer.WriteLine ($" }},"); } writer.WriteLine ($" \"Microsoft.{platform}.Templates.net7\": {{"); writer.WriteLine ($" \"kind\": \"template\","); writer.WriteLine ($" \"version\": \"{version}\","); writer.WriteLine ($" \"alias-to\": {{"); writer.WriteLine ($" \"any\": \"Microsoft.{platform}.Templates\","); writer.WriteLine ($" }}"); writer.WriteLine ($" }}"); writer.WriteLine ($" }}"); writer.WriteLine ($"}}"); } Environment.Exit (0);