Index: /branches/2924_DotNetCoreMigration/HeuristicLab 3.3.sln
===================================================================
--- /branches/2924_DotNetCoreMigration/HeuristicLab 3.3.sln	(revision 17026)
+++ /branches/2924_DotNetCoreMigration/HeuristicLab 3.3.sln	(revision 17027)
@@ -467,9 +467,9 @@
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.PasswordDialog-3.4", "HeuristicLab.PasswordDialog\3.4\HeuristicLab.PasswordDialog-3.4.csproj", "{632E2C03-FA6F-4540-8AF0-6B4D60F99F26}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HeuristicLab.DynamicAssemblyTestApp", "HeuristicLab.DynamicAssemblyTestApp\HeuristicLab.DynamicAssemblyTestApp.csproj", "{22E47D36-046A-4641-8A2B-D9292181B443}"
-EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HeuristicLab.CommandLineInterface", "HeuristicLab.CommandLineInterface\HeuristicLab.CommandLineInterface.csproj", "{A6B90261-FD29-4FCE-A871-58AAD6757429}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HeuristicLab.DefinitionLanguage", "HeuristicLab.DefinitionLanguage\HeuristicLab.DefinitionLanguage.csproj", "{482B51BD-5C08-44D0-A581-A6A93CA81713}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HeuristicLab.ConsoleApplications", "HeuristicLab.ConsoleApplications\HeuristicLab.ConsoleApplications.csproj", "{3AA69A1A-D48E-4631-A5C1-4F0439BF1D2C}"
 EndProject
 Global
@@ -2279,16 +2279,4 @@
 		{632E2C03-FA6F-4540-8AF0-6B4D60F99F26}.Release|x86.ActiveCfg = Release|Any CPU
 		{632E2C03-FA6F-4540-8AF0-6B4D60F99F26}.Release|x86.Build.0 = Release|Any CPU
-		{22E47D36-046A-4641-8A2B-D9292181B443}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{22E47D36-046A-4641-8A2B-D9292181B443}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{22E47D36-046A-4641-8A2B-D9292181B443}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{22E47D36-046A-4641-8A2B-D9292181B443}.Debug|x64.Build.0 = Debug|Any CPU
-		{22E47D36-046A-4641-8A2B-D9292181B443}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{22E47D36-046A-4641-8A2B-D9292181B443}.Debug|x86.Build.0 = Debug|Any CPU
-		{22E47D36-046A-4641-8A2B-D9292181B443}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{22E47D36-046A-4641-8A2B-D9292181B443}.Release|Any CPU.Build.0 = Release|Any CPU
-		{22E47D36-046A-4641-8A2B-D9292181B443}.Release|x64.ActiveCfg = Release|Any CPU
-		{22E47D36-046A-4641-8A2B-D9292181B443}.Release|x64.Build.0 = Release|Any CPU
-		{22E47D36-046A-4641-8A2B-D9292181B443}.Release|x86.ActiveCfg = Release|Any CPU
-		{22E47D36-046A-4641-8A2B-D9292181B443}.Release|x86.Build.0 = Release|Any CPU
 		{A6B90261-FD29-4FCE-A871-58AAD6757429}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{A6B90261-FD29-4FCE-A871-58AAD6757429}.Debug|Any CPU.Build.0 = Debug|Any CPU
@@ -2315,4 +2303,16 @@
 		{482B51BD-5C08-44D0-A581-A6A93CA81713}.Release|x86.ActiveCfg = Release|Any CPU
 		{482B51BD-5C08-44D0-A581-A6A93CA81713}.Release|x86.Build.0 = Release|Any CPU
+		{3AA69A1A-D48E-4631-A5C1-4F0439BF1D2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{3AA69A1A-D48E-4631-A5C1-4F0439BF1D2C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{3AA69A1A-D48E-4631-A5C1-4F0439BF1D2C}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{3AA69A1A-D48E-4631-A5C1-4F0439BF1D2C}.Debug|x64.Build.0 = Debug|Any CPU
+		{3AA69A1A-D48E-4631-A5C1-4F0439BF1D2C}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{3AA69A1A-D48E-4631-A5C1-4F0439BF1D2C}.Debug|x86.Build.0 = Debug|Any CPU
+		{3AA69A1A-D48E-4631-A5C1-4F0439BF1D2C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{3AA69A1A-D48E-4631-A5C1-4F0439BF1D2C}.Release|Any CPU.Build.0 = Release|Any CPU
+		{3AA69A1A-D48E-4631-A5C1-4F0439BF1D2C}.Release|x64.ActiveCfg = Release|Any CPU
+		{3AA69A1A-D48E-4631-A5C1-4F0439BF1D2C}.Release|x64.Build.0 = Release|Any CPU
+		{3AA69A1A-D48E-4631-A5C1-4F0439BF1D2C}.Release|x86.ActiveCfg = Release|Any CPU
+		{3AA69A1A-D48E-4631-A5C1-4F0439BF1D2C}.Release|x86.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
Index: /branches/2924_DotNetCoreMigration/HeuristicLab.ConsoleApplications/ConsoleInspector.cs
===================================================================
--- /branches/2924_DotNetCoreMigration/HeuristicLab.ConsoleApplications/ConsoleInspector.cs	(revision 17027)
+++ /branches/2924_DotNetCoreMigration/HeuristicLab.ConsoleApplications/ConsoleInspector.cs	(revision 17027)
@@ -0,0 +1,40 @@
+﻿using System;
+using HEAL.Attic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Optimization;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.ConsoleApplications {
+  [StorableType("61621E70-8A67-43A2-8EB2-233FC01E493B")]
+  [Application("CLIInspect", "")]
+  public class ConsoleInspector : ApplicationBase {
+    [Storable]
+    public UniPath InputFilePath { get; set; }
+
+    public ConsoleInspector() { }
+
+    public ConsoleInspector(UniPath inputFilePath) {
+      InputFilePath = inputFilePath;
+    }
+
+    public override void Run(ICommandLineArgument[] args) {
+      ContentManager.Initialize(new PersistenceContentManager());
+      IStorableContent content = ContentManager.Load(InputFilePath.ToString());
+      IOptimizer optimizer = content as IOptimizer;
+      if (content != null) {
+        Console.WriteLine($"Name: {optimizer.Name}");
+        Console.WriteLine($"Description: {optimizer.Description}");
+        Console.WriteLine($"Run count: {optimizer.Runs.Count}");
+        Console.WriteLine("\nRESULT(S):");
+        int i = 1;
+        foreach (var run in optimizer.Runs) {
+          Console.WriteLine($"{"-------------------------------- RUN",35} {$"{i++:D3}" + " --------------------------------",-35}");
+          foreach (var res in run.Results) {
+            Console.WriteLine($"{res.Key,35} : {res.Value,-35}");
+          }
+        }
+      }
+    }
+  }
+}
Index: /branches/2924_DotNetCoreMigration/HeuristicLab.ConsoleApplications/ConsoleOptimizer.cs
===================================================================
--- /branches/2924_DotNetCoreMigration/HeuristicLab.ConsoleApplications/ConsoleOptimizer.cs	(revision 17027)
+++ /branches/2924_DotNetCoreMigration/HeuristicLab.ConsoleApplications/ConsoleOptimizer.cs	(revision 17027)
@@ -0,0 +1,122 @@
+﻿using System;
+using System.IO;
+using System.Threading;
+using HEAL.Attic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Optimization;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.ConsoleApplications {
+  [StorableType("33B32897-258B-4E29-8E2E-0A9A8AE67B1D")]
+  [Application("CLIOptimize", "")]
+  public class ConsoleOptimizer : ApplicationBase {
+
+    #region Vars
+    private IExecutable executable;
+    private readonly ManualResetEvent stoppedSignal = new ManualResetEvent(false);
+    private readonly ManualResetEvent startedSignal = new ManualResetEvent(false);
+    private bool isFinished = false;
+    private static object locker = new object();
+    #endregion
+
+    #region Properties
+    [Storable]
+    public UniPath InputFilePath { get; set; } = null;
+    [Storable]
+    public UniPath OutputPath { get; set; } = null;
+    #endregion
+
+    #region Constructors
+    public ConsoleOptimizer() { }
+    public ConsoleOptimizer(UniPath inputFilePath, UniPath outputPath) {
+      InputFilePath = inputFilePath;
+      OutputPath = outputPath;
+    }
+    #endregion
+
+
+    public override void Run(ICommandLineArgument[] args) {
+      lock (locker) {
+        Init();
+        executable.Started += Executable_Started;
+        executable.Stopped += Executable_Stopped;
+        startedSignal.Reset();
+        executable.StartAsync();
+        startedSignal.WaitOne();
+      }
+      stoppedSignal.WaitOne();
+
+      startedSignal.Close();
+      stoppedSignal.Close();
+    }
+
+    private void Executable_Started(object sender, EventArgs e) {
+      startedSignal.Set();
+    }
+
+    public override void OnCancel() {
+      base.OnCancel();
+      startedSignal.WaitOne();
+      lock (locker) {
+        if (isFinished) throw new InvalidOperationException("Executable has already finished!");
+        executable.Stop();
+      }
+    }
+
+    public override void OnPause() {
+      base.OnPause();
+      startedSignal.WaitOne();
+      lock (locker) {
+        if (isFinished) throw new InvalidOperationException("Executable has already finished!");
+        executable.Pause();
+      }
+    }
+
+    public override void OnResume() {
+      base.OnResume();
+      startedSignal.WaitOne();
+      lock (locker) {
+        if (isFinished) throw new InvalidOperationException("Executable has already finished!");
+        startedSignal.Reset();
+        executable.StartAsync();
+        startedSignal.WaitOne();
+      }
+    }
+
+    #region Helper
+    private void Init() {
+      lock (locker) {
+        ContentManager.Initialize(new PersistenceContentManager());
+        IStorableContent content = ContentManager.Load(InputFilePath.ToString());
+        executable = content as IExecutable;
+        if (executable == null)
+          throw new NotSupportedException("The given file does not contain any algorithm to start.");
+      }
+    }
+
+    private void Executable_Stopped(object sender, EventArgs e) {
+      lock (locker) {
+        isFinished = true;
+        IOptimizer optimizer = executable as IOptimizer;
+        if (optimizer != null) PrintResults(optimizer);
+        ContentManager.Save((IStorableContent)executable, OutputPath.ToString() + Path.DirectorySeparatorChar + "result.hl", true);
+      }
+      stoppedSignal.Set();
+    }
+
+    private void PrintResults(IOptimizer optimizer) {
+      lock (locker) {
+        Console.WriteLine("\nRESULT(S):");
+        int i = 1;
+        foreach (var run in optimizer.Runs) {
+          Console.WriteLine($"{"-------------------------------- RUN",35} {$"{i++:D3}" + " --------------------------------",-35}");
+          foreach (var res in run.Results) {
+            Console.WriteLine($"{res.Key,35} : {res.Value,-35}");
+          }
+        }
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/2924_DotNetCoreMigration/HeuristicLab.ConsoleApplications/HeuristicLab.ConsoleApplications.csproj
===================================================================
--- /branches/2924_DotNetCoreMigration/HeuristicLab.ConsoleApplications/HeuristicLab.ConsoleApplications.csproj	(revision 17027)
+++ /branches/2924_DotNetCoreMigration/HeuristicLab.ConsoleApplications/HeuristicLab.ConsoleApplications.csproj	(revision 17027)
@@ -0,0 +1,27 @@
+﻿<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>netstandard2.0</TargetFramework>
+    <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
+    <OutputPath>..\bin\</OutputPath>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Common\3.3\HeuristicLab.Common-3.3.csproj" />
+    <ProjectReference Include="..\HeuristicLab.Core\3.3\HeuristicLab.Core-3.3.csproj" />
+    <ProjectReference Include="..\HeuristicLab.Optimization\3.3\HeuristicLab.Optimization-3.3.csproj" />
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <Reference Include="HEAL.Attic">
+      <HintPath>..\bin\HEAL.Attic.dll</HintPath>
+    </Reference>
+  </ItemGroup>
+
+</Project>
Index: /branches/2924_DotNetCoreMigration/HeuristicLab.ConsoleApplications/Plugin.cs
===================================================================
--- /branches/2924_DotNetCoreMigration/HeuristicLab.ConsoleApplications/Plugin.cs	(revision 17027)
+++ /branches/2924_DotNetCoreMigration/HeuristicLab.ConsoleApplications/Plugin.cs	(revision 17027)
@@ -0,0 +1,11 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.ConsoleApplications {
+
+  [Plugin("HeuristicLab.ConsoleApplications", "1.0")]
+  [PluginFile("HeuristicLab.ConsoleApplications.dll", PluginFileType.Assembly)]
+  public class ConsoleApplications : PluginBase { }
+}
Index: /branches/2924_DotNetCoreMigration/HeuristicLab/3.3/HeuristicLab-3.3.csproj
===================================================================
--- /branches/2924_DotNetCoreMigration/HeuristicLab/3.3/HeuristicLab-3.3.csproj	(revision 17026)
+++ /branches/2924_DotNetCoreMigration/HeuristicLab/3.3/HeuristicLab-3.3.csproj	(revision 17027)
@@ -29,5 +29,5 @@
     <ProjectReference Include="..\..\HeuristicLab.CommandLineInterface\HeuristicLab.CommandLineInterface.csproj" />
     <ProjectReference Include="..\..\HeuristicLab.Common\3.3\HeuristicLab.Common-3.3.csproj" />
-    <ProjectReference Include="..\..\HeuristicLab.DynamicAssemblyTestApp\HeuristicLab.DynamicAssemblyTestApp.csproj" />
+    <ProjectReference Include="..\..\HeuristicLab.ConsoleApplications\HeuristicLab.ConsoleApplications.csproj" />
     <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj" />
   </ItemGroup>
