diff --git a/src/Dataverse/Tasks/TALXIS.DevKit.Build.Dataverse.Tasks.csproj b/src/Dataverse/Tasks/TALXIS.DevKit.Build.Dataverse.Tasks.csproj
index b17d361..d331dc3 100644
--- a/src/Dataverse/Tasks/TALXIS.DevKit.Build.Dataverse.Tasks.csproj
+++ b/src/Dataverse/Tasks/TALXIS.DevKit.Build.Dataverse.Tasks.csproj
@@ -4,7 +4,7 @@
TALXIS.DevKit.Build.Dataverse.Tasks
- net472;net6.0
+ net472;net10.0
true
true
@@ -30,6 +30,7 @@
+
diff --git a/src/Dataverse/Tasks/Tasks/InvokeSolutionPackager.cs b/src/Dataverse/Tasks/Tasks/InvokeSolutionPackager.cs
index 0f83835..fd22d35 100644
--- a/src/Dataverse/Tasks/Tasks/InvokeSolutionPackager.cs
+++ b/src/Dataverse/Tasks/Tasks/InvokeSolutionPackager.cs
@@ -30,6 +30,86 @@ public class InvokeSolutionPackager : Task
public bool UseUnmanagedFileForMissingManaged { get; set; }
+ public override bool Execute()
+ {
+#if NET10_0_OR_GREATER
+ return ExecuteWithLibrary();
+#else
+ return ExecuteWithPacCli();
+#endif
+ }
+
+#if NET10_0_OR_GREATER
+ private bool ExecuteWithLibrary()
+ {
+ try
+ {
+ var packagerService = new TALXIS.Platform.Metadata.Packaging.SolutionPackagerService();
+ var managed = string.Equals(PackageType, "Managed", StringComparison.OrdinalIgnoreCase);
+
+ var options = new TALXIS.Platform.Metadata.Packaging.SolutionPackagerOptions
+ {
+ Managed = managed,
+ Localize = Localize,
+ UseUnmanagedFileForMissingManaged = UseUnmanagedFileForMissingManaged,
+ MappingFilePath = MappingFilePath,
+ LogFilePath = LogFilePath,
+ SourceLocale = LocalTemplate
+ };
+
+ if (!string.IsNullOrWhiteSpace(ErrorLevel) &&
+ Enum.TryParse(ErrorLevel, true, out var traceLevel))
+ {
+ options.ErrorLevel = traceLevel;
+ }
+
+ switch (Action.ToLower())
+ {
+ case "pack":
+ Log.LogMessage(MessageImportance.High, $"Packing solution from '{SolutionRootDirectory}' to '{PathToZipFile}'...");
+ packagerService.Pack(SolutionRootDirectory, PathToZipFile, options);
+ Log.LogMessage(MessageImportance.High, "Solution packed successfully.");
+ break;
+ case "unpack":
+ Log.LogMessage(MessageImportance.High, $"Unpacking solution from '{PathToZipFile}' to '{SolutionRootDirectory}'...");
+ packagerService.Unpack(PathToZipFile, SolutionRootDirectory, options);
+ Log.LogMessage(MessageImportance.High, "Solution unpacked successfully.");
+ break;
+ default:
+ Log.LogError($"Unsupported action: {Action}");
+ return false;
+ }
+
+ return true;
+ }
+ catch (Exception ex)
+ {
+ Log.LogError($"Solution {Action.ToLower()} failed: {ex.Message}");
+ return false;
+ }
+ }
+#endif
+
+#if !NET10_0_OR_GREATER
+ private bool ExecuteWithPacCli()
+ {
+ var pacPath = ResolvePACFilePath();
+ if (pacPath == null)
+ {
+ Log.LogError("The pac tool is not found. Please install it using 'dotnet tool install --global Microsoft.PowerApps.CLI.Tool'");
+ return false;
+ }
+
+ var args = BuildArguments();
+ if (string.IsNullOrWhiteSpace(args))
+ {
+ Log.LogError("Failed to build arguments for pac command.");
+ return false;
+ }
+
+ return RunCommand(pacPath, args);
+ }
+
private string ResolvePACFilePath()
{
bool isWindows = Environment.OSVersion.Platform == PlatformID.Win32NT;
@@ -38,7 +118,6 @@ private string ResolvePACFilePath()
? new[] { "pac.exe", "pac.cmd" }
: new[] { "pac" };
- // Check the standalone Power Platform CLI location first (preferred, supports latest versions)
if (isWindows)
{
var localAppData = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
@@ -50,7 +129,6 @@ private string ResolvePACFilePath()
}
}
- // Check the standard global tools location
var toolsDir = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),
".dotnet", "tools");
@@ -62,13 +140,12 @@ private string ResolvePACFilePath()
return globalToolPath;
}
- // Fall back to searching PATH
var pathEnv = Environment.GetEnvironmentVariable("PATH");
-
+
if (!string.IsNullOrEmpty(pathEnv))
{
var separator = isWindows ? ';' : ':';
-
+
foreach (var name in candidates)
{
var found = pathEnv.Split(new[] { separator }, StringSplitOptions.RemoveEmptyEntries)
@@ -85,25 +162,6 @@ private string ResolvePACFilePath()
return null;
}
- public override bool Execute()
- {
- var pacPath = ResolvePACFilePath();
- if (pacPath == null)
- {
- Log.LogError("The pac tool is not found. Please install it using 'dotnet tool install --global Microsoft.PowerApps.CLI.Tool'");
- return false;
- }
-
- var args = BuildArguments();
- if (string.IsNullOrWhiteSpace(args))
- {
- Log.LogError("Failed to build arguments for pac command.");
- return false;
- }
-
- return RunCommand(pacPath, args);
- }
-
private string BuildArguments()
{
string args = string.Empty;
@@ -153,8 +211,8 @@ private bool RunCommand(string fileName, string arguments)
{
try
{
- var stdoutLines = new System.Collections.Generic.List();
- var stderrLines = new System.Collections.Generic.List();
+ var stdoutLines = new List();
+ var stderrLines = new List();
ProcessStartInfo processStartInfo = new ProcessStartInfo
{
@@ -240,4 +298,5 @@ private bool RunCommand(string fileName, string arguments)
return false;
}
}
+#endif
}
diff --git a/src/Dataverse/Tasks/msbuild/tasks/TALXIS.DevKit.Build.Dataverse.Tasks.targets b/src/Dataverse/Tasks/msbuild/tasks/TALXIS.DevKit.Build.Dataverse.Tasks.targets
index f2f437b..0927bf0 100644
--- a/src/Dataverse/Tasks/msbuild/tasks/TALXIS.DevKit.Build.Dataverse.Tasks.targets
+++ b/src/Dataverse/Tasks/msbuild/tasks/TALXIS.DevKit.Build.Dataverse.Tasks.targets
@@ -6,7 +6,7 @@
$(MSBuildAllProjects);$(MSBuildThisFileFullPath)
- $(MSBuildThisFileDirectory)net6.0\
+ $(MSBuildThisFileDirectory)net10.0\
$(MSBuildThisFileDirectory)net472\