diff --git a/src/Orchard/Commands/CommandAgent.cs b/src/Orchard/Commands/CommandAgent.cs
new file mode 100644
index 000000000..9c732f9bb
--- /dev/null
+++ b/src/Orchard/Commands/CommandAgent.cs
@@ -0,0 +1,41 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Web.Mvc;
+using System.Web.Routing;
+using Autofac;
+using Orchard.Environment;
+
+namespace Orchard.Commands {
+ ///
+ /// This is the guy instantiated by the orchard.exe host. It is reponsible for
+ /// executing a single command.
+ ///
+ public class CommandAgent {
+ public void RunSingleCommand(string[] args) {
+ try {
+ Console.WriteLine("Command being run!");
+
+ var host = OrchardStarter.CreateHost(MvcSingletons);
+ host.Initialize();
+
+ var shell = host.
+ }
+ catch (Exception e) {
+ while (e != null) {
+ Console.WriteLine("Error: {0}", e.Message);
+ e = e.InnerException;
+ }
+ }
+ }
+
+ protected void MvcSingletons(ContainerBuilder builder) {
+ builder.RegisterInstance(ControllerBuilder.Current);
+ builder.RegisterInstance(RouteTable.Routes);
+ builder.RegisterInstance(ModelBinders.Binders);
+ builder.RegisterInstance(ModelMetadataProviders.Current);
+ builder.RegisterInstance(ViewEngines.Engines);
+ }
+ }
+}
diff --git a/src/Orchard/Orchard.Framework.csproj b/src/Orchard/Orchard.Framework.csproj
index d3f00c208..928c861cf 100644
--- a/src/Orchard/Orchard.Framework.csproj
+++ b/src/Orchard/Orchard.Framework.csproj
@@ -129,6 +129,7 @@
+
diff --git a/src/Tools/Orchard/Host/CommandHost.cs b/src/Tools/Orchard/Host/CommandHost.cs
index b74d1913b..f0a56a57f 100644
--- a/src/Tools/Orchard/Host/CommandHost.cs
+++ b/src/Tools/Orchard/Host/CommandHost.cs
@@ -18,5 +18,10 @@ namespace Orchard.Host {
public void Stop(bool immediate) {
//TODO
}
+
+ public void RunCommand(string[] args) {
+ var agent = Activator.CreateInstance("Orchard.Framework", "Orchard.Commands.CommandAgent").Unwrap();
+ agent.GetType().GetMethod("RunSingleCommand").Invoke(agent, new object[] { args });
+ }
}
}
\ No newline at end of file
diff --git a/src/Tools/Orchard/Orchard.csproj b/src/Tools/Orchard/Orchard.csproj
index 98850fc8b..7967a04e7 100644
--- a/src/Tools/Orchard/Orchard.csproj
+++ b/src/Tools/Orchard/Orchard.csproj
@@ -21,6 +21,8 @@
DEBUG;TRACE
prompt
4
+ true
+ x86
pdbonly
diff --git a/src/Tools/Orchard/OrchardArguments.cs b/src/Tools/Orchard/OrchardArguments.cs
index f6dc9bb49..503032de8 100644
--- a/src/Tools/Orchard/OrchardArguments.cs
+++ b/src/Tools/Orchard/OrchardArguments.cs
@@ -8,5 +8,6 @@ namespace Orchard {
public bool Verbose { get; set; }
public string VirtualPath { get; set; }
public string WorkingDirectory { get; set; }
+ public string Tenant { get; set; }
}
}
\ No newline at end of file
diff --git a/src/Tools/Orchard/OrchardArgumentsParser.cs b/src/Tools/Orchard/OrchardArgumentsParser.cs
index 2a39280e3..0b048aaea 100644
--- a/src/Tools/Orchard/OrchardArgumentsParser.cs
+++ b/src/Tools/Orchard/OrchardArgumentsParser.cs
@@ -10,8 +10,9 @@ namespace Orchard {
}
public class OrchardArgumentsParser : IOrchardArgumentsParser {
+
public OrchardArguments Parse(ParserResult arguments) {
- OrchardArguments result = new OrchardArguments();
+ var result = new OrchardArguments();
foreach (var sw in arguments.Switches) {
switch (sw.Name.ToLowerInvariant()) {
@@ -29,6 +30,11 @@ namespace Orchard {
case "virtualpath":
result.VirtualPath = sw.Value;
break;
+
+ case "t":
+ case "tenant":
+ result.Tenant = sw.Value;
+ break;
}
}
diff --git a/src/Tools/Orchard/Program.cs b/src/Tools/Orchard/Program.cs
index 1d6169012..8ce06821f 100644
--- a/src/Tools/Orchard/Program.cs
+++ b/src/Tools/Orchard/Program.cs
@@ -41,8 +41,16 @@ namespace Orchard {
Console.WriteLine("Detected and using orchard directory \"{0}\"", orchardDirectory.FullName);
}
- object host = CreateWorkerAppDomainWithHost(arguments.VirtualPath, orchardDirectory.FullName, typeof(CommandHost));
+ if (arguments.Verbose) {
+ Console.WriteLine("Creating ASP.NET AppDomain for command agent");
+ }
+ var host = (CommandHost)CreateWorkerAppDomainWithHost(arguments.VirtualPath, orchardDirectory.FullName, typeof(CommandHost));
+
+ if (arguments.Verbose) {
+ Console.WriteLine("Executing command in ASP.NET AppDomain");
+ }
+ host.RunCommand(_args);
}
private DirectoryInfo GetOrchardDirectory(string directory) {