diff --git a/ElectronNET.CLI/Commands/Actions/GetTargetPlatformInformation.cs b/ElectronNET.CLI/Commands/Actions/GetTargetPlatformInformation.cs
index 020110b..af0561d 100644
--- a/ElectronNET.CLI/Commands/Actions/GetTargetPlatformInformation.cs
+++ b/ElectronNET.CLI/Commands/Actions/GetTargetPlatformInformation.cs
@@ -1,4 +1,5 @@
using System;
+using System.Diagnostics;
using System.Runtime.InteropServices;
namespace ElectronNET.CLI.Commands.Actions
@@ -30,6 +31,15 @@ namespace ElectronNET.CLI.Commands.Actions
case "osx-arm64":
netCorePublishRid = "osx-arm64";
electronPackerPlatform = "mac";
+
+ //Check to see if .net 6 is installed:
+ if (!Dotnet6Installed())
+ {
+ throw new ArgumentException("You are using a dotnet version older than dotnet 6. Compiling for osx-arm64 requires that dotnet 6 or greater is installed and targeted by your project.", "osx-arm64");
+ }
+
+ //Warn for .net 6 targeting:
+ Console.WriteLine("Please ensure that your project targets .net 6 or greater. Otherwise you may experience an error compiling for osx-arm64.");
break;
case "linux":
netCorePublishRid = "linux-x64";
@@ -52,8 +62,11 @@ namespace ElectronNET.CLI.Commands.Actions
}
if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
{
- if (RuntimeInformation.OSArchitecture.Equals(Architecture.Arm64))
+ if (RuntimeInformation.OSArchitecture.Equals(Architecture.Arm64) && Dotnet6Installed())
{
+ //Warn for .net 6 targeting:
+ Console.WriteLine("Please ensure that your project targets .net 6. Otherwise you may experience an error.");
+
//Apple Silicon Mac:
netCorePublishRid = "osx-arm64";
electronPackerPlatform = "mac";
@@ -79,5 +92,37 @@ namespace ElectronNET.CLI.Commands.Actions
NetCorePublishRid = netCorePublishRid
};
}
+ ///
+ /// Checks to see if dotnet 6 or greater is installed.
+ /// Required for MacOS arm targeting.
+ /// Note that an error may still occur if the project being compiled does not target dotnet 6 or greater.
+ ///
+ ///
+ /// Returns true if dotnet 6 or greater is installed.
+ ///
+ private static bool Dotnet6Installed()
+ {
+ //check for .net 6:
+ Process process = new Process();
+ process.StartInfo.FileName = "dotnet";
+ process.StartInfo.Arguments = "--list-sdks";
+ process.StartInfo.UseShellExecute = false;
+ process.StartInfo.RedirectStandardOutput = true;
+ process.StartInfo.RedirectStandardError = true;
+ process.Start();
+
+ string standard_output;
+ bool dotnet6Exists = false;
+ while ((standard_output = process.StandardOutput.ReadLine()) != null)
+ {
+ if (standard_output.StartsWith("6."))
+ {
+ dotnet6Exists = true;
+ break;
+ }
+ }
+ process.WaitForExit();
+ return dotnet6Exists;
+ }
}
-}
+}
\ No newline at end of file