diff --git a/src/Orchard.Web/Modules/Orchard.Packaging/Commands/PackagingCommands.cs b/src/Orchard.Web/Modules/Orchard.Packaging/Commands/PackagingCommands.cs index e7720ff51..f24e6bd02 100644 --- a/src/Orchard.Web/Modules/Orchard.Packaging/Commands/PackagingCommands.cs +++ b/src/Orchard.Web/Modules/Orchard.Packaging/Commands/PackagingCommands.cs @@ -1,4 +1,6 @@ -using System.IO; +using System; +using System.IO; +using System.Web.Hosting; using Orchard.Commands; using Orchard.Environment.Extensions; using Orchard.Packaging.Services; @@ -7,18 +9,17 @@ using Orchard.UI.Notify; namespace Orchard.Packaging.Commands { [OrchardFeature("Orchard.Packaging")] public class PackagingCommands : DefaultOrchardCommandHandler { + private static readonly string OrchardWebProj = HostingEnvironment.MapPath("~/Orchard.Web.csproj"); + private const string PackagePath = "Packages"; + private readonly IPackageManager _packageManager; public PackagingCommands(IPackageManager packageManager) { _packageManager = packageManager; } - [OrchardSwitch] - public string Filename { get; set; } - - [CommandHelp("package create \r\n\t" + "Create a package for the module . The default filename is -.zip.")] + [CommandHelp("package create \r\n\t" + "Create a package for the module . The default filename is Orchard....nupkg.")] [CommandName("package create")] - [OrchardSwitches("Filename")] public void CreatePackage(string moduleName) { var packageData = _packageManager.Harvest(moduleName); if (packageData == null) { @@ -26,9 +27,18 @@ namespace Orchard.Packaging.Commands { return; } - var filename = string.Format("{0}-{1}.zip", packageData.ExtensionName, packageData.ExtensionVersion); + // append "Orchard.[ExtensionType]" to prevent conflicts with other packages (e.g, TinyMce, jQuery, ...) + var filename = string.Format("Orchard.{0}.{1}.{2}.nupkg", packageData.ExtensionType, packageData.ExtensionName, packageData.ExtensionVersion); + var packagePath = Path.Combine(Directory.GetParent(OrchardWebProj).FullName, PackagePath); - using(var stream = File.Create(filename)) { + if(!Directory.Exists(packagePath)) { + Directory.CreateDirectory(packagePath); + } + + // packages are created in a specific folder otherwise they are in /bin, which crashed the current shell + filename = Path.Combine(packagePath, filename); + + using ( var stream = File.Create(filename) ) { packageData.PackageStream.CopyTo(stream); stream.Close(); } diff --git a/src/Orchard.Web/Modules/Orchard.Packaging/Services/PackageData.cs b/src/Orchard.Web/Modules/Orchard.Packaging/Services/PackageData.cs index 6250f0d1b..ff7091c06 100644 --- a/src/Orchard.Web/Modules/Orchard.Packaging/Services/PackageData.cs +++ b/src/Orchard.Web/Modules/Orchard.Packaging/Services/PackageData.cs @@ -2,6 +2,7 @@ using System.IO; namespace Orchard.Packaging.Services { public class PackageData { + public string ExtensionType { get; set; } public string ExtensionName { get; set; } public string ExtensionVersion { get; set; } diff --git a/src/Orchard.Web/Modules/Orchard.Packaging/Services/PackageManager.cs b/src/Orchard.Web/Modules/Orchard.Packaging/Services/PackageManager.cs index 8e247535e..7c072b92a 100644 --- a/src/Orchard.Web/Modules/Orchard.Packaging/Services/PackageManager.cs +++ b/src/Orchard.Web/Modules/Orchard.Packaging/Services/PackageManager.cs @@ -33,6 +33,7 @@ namespace Orchard.Packaging.Services { return null; } return new PackageData { + ExtensionType = extensionDescriptor.ExtensionType, ExtensionName = extensionDescriptor.Name, ExtensionVersion = extensionDescriptor.Version, PackageStream = _packageBuilder.BuildPackage(extensionDescriptor),