diff --git a/src/DacFXTool/Program.cs b/src/DacFXTool/Program.cs index c3f8afa..aecc05b 100644 --- a/src/DacFXTool/Program.cs +++ b/src/DacFXTool/Program.cs @@ -149,6 +149,27 @@ public static async System.Threading.Tasks.Task Main(string[] args) return 0; } + + // unpack "dacpac path" "output path" + if (args.Length == 3 + && args[0] == "unpack") + { + if (!new FileInfo(args[1]).Exists) + { + await Console.Out.WriteLineAsync("Error:"); + await Console.Out.WriteLineAsync($"DACPAC file '{args[1]}' not found"); + return 1; + } + + var unpacker = new DacPackageUnpacker(); + + unpacker.Unpack(args[1], args[2]); + + await Console.Out.WriteLineAsync("Result:"); + await Console.Out.WriteLineAsync("OK"); + + return 0; + } } else { diff --git a/src/DacFXToolLib/DacPackageUnpacker.cs b/src/DacFXToolLib/DacPackageUnpacker.cs new file mode 100644 index 0000000..6dd9af7 --- /dev/null +++ b/src/DacFXToolLib/DacPackageUnpacker.cs @@ -0,0 +1,19 @@ +using Microsoft.SqlServer.Dac; +using System.IO; + +namespace DacFXToolLib +{ + public class DacPackageUnpacker + { + public void Unpack(string dacpacPath, string outputPath) + { + // Ensure output directory exists + Directory.CreateDirectory(outputPath); + + using (var package = DacPackage.Load(dacpacPath)) + { + DacServices.Unpack(package, outputPath); + } + } + } +} \ No newline at end of file