From 3ba38e796f84586440dfab67a8ab701ccb00d7a9 Mon Sep 17 00:00:00 2001
From: Michael Krisper <michael.krisper@tugraz.at>
Date: Wed, 16 Feb 2022 17:38:21 +0100
Subject: [PATCH] Added Starter Applications and changed Deploy Target to
 create sub directories for each .NET Version

---
 .gitignore                                    |   4 +-
 Directory.Build.props                         |   1 +
 Directory.Build.targets                       | 217 ++++++++----------
 .../HashingCmdStart/HashingCmdStart.csproj    |   7 +-
 .../HashingCmdStart}/Icon2.ico                | Bin
 .../HashingCmdStart}/Program.cs               |  44 ++--
 .../HashingToolStart/HashingToolStart.csproj  |  14 ++
 Tools/HashingToolStart/Icon2.ico              | Bin 0 -> 4286 bytes
 Tools/HashingToolStart/Program.cs             |  65 ++++++
 Tools/VECTOConsoleStart/Icon2.ico             | Bin 0 -> 4286 bytes
 Tools/VECTOConsoleStart/Program.cs            |  65 ++++++
 .../VECTOConsoleStart.csproj                  |  14 ++
 Tools/VECTOMultistageStart/Icon2.ico          | Bin 0 -> 4286 bytes
 Tools/VECTOMultistageStart/Program.cs         |  47 ++++
 .../VECTOMultistage.csproj                    |  14 ++
 Tools/VECTOStart/Icon2.ico                    | Bin 0 -> 4286 bytes
 Tools/VECTOStart/Program.cs                   |  65 ++++++
 Tools/VECTOStart/VECTOStart.csproj            |  15 ++
 VECTO.sln                                     | 118 ++++++++--
 VECTO/VECTO.vbproj                            |  12 +-
 VECTO/app.config                              |  22 --
 VECTO3GUI/VECTO3GUI.csproj                    |   4 -
 Vecto3GUI2020Test/Vecto3GUI2020Test.csproj    |   2 +-
 .../VectoHashingTest/VectoHashingTest.csproj  |   2 +-
 VectoConsole/App.config                       |   4 -
 VectoConsole/Program.cs                       |   8 +-
 .../ModelbasedTests/ModelbasedTests.csproj    |   2 +-
 VectoCore/VectoCoreTest/VectoCoreTest.csproj  |   2 +-
 28 files changed, 539 insertions(+), 209 deletions(-)
 rename VECTOStart/VECTOStart.csproj => Tools/HashingCmdStart/HashingCmdStart.csproj (73%)
 rename {VECTOStart => Tools/HashingCmdStart}/Icon2.ico (100%)
 rename {VECTOStart => Tools/HashingCmdStart}/Program.cs (53%)
 create mode 100644 Tools/HashingToolStart/HashingToolStart.csproj
 create mode 100644 Tools/HashingToolStart/Icon2.ico
 create mode 100644 Tools/HashingToolStart/Program.cs
 create mode 100644 Tools/VECTOConsoleStart/Icon2.ico
 create mode 100644 Tools/VECTOConsoleStart/Program.cs
 create mode 100644 Tools/VECTOConsoleStart/VECTOConsoleStart.csproj
 create mode 100644 Tools/VECTOMultistageStart/Icon2.ico
 create mode 100644 Tools/VECTOMultistageStart/Program.cs
 create mode 100644 Tools/VECTOMultistageStart/VECTOMultistage.csproj
 create mode 100644 Tools/VECTOStart/Icon2.ico
 create mode 100644 Tools/VECTOStart/Program.cs
 create mode 100644 Tools/VECTOStart/VECTOStart.csproj

diff --git a/.gitignore b/.gitignore
index 5c48cf62f2..72796d4a54 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,4 @@
-VECTO/bin/
-VECTO/obj/
-
+Deploy/
 ## From github on 15/5/2014: https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
 
 ## Ignore Visual Studio temporary files, build results, and
diff --git a/Directory.Build.props b/Directory.Build.props
index 3060a912ec..66aad6e011 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -21,6 +21,7 @@
     <Deterministic>true</Deterministic>
     <PublishTrimmed>true</PublishTrimmed>
     <IsTrimmable>true</IsTrimmable>
+    <AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
   </PropertyGroup>
 
   <PropertyGroup>
diff --git a/Directory.Build.targets b/Directory.Build.targets
index 609a97e68f..ea10e09d41 100644
--- a/Directory.Build.targets
+++ b/Directory.Build.targets
@@ -1,48 +1,5 @@
 <Project DefaultTargets = "Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
-	<!--<Target Name="VersionMessage" AfterTargets="build">
-        <Message Text="$(AssemblyName) -> $(Version)" importance="high"/>
-    </Target>-->
-	<UsingTask TaskName="Zip" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
-		<ParameterGroup>
-			<OutputFilename ParameterType="System.String" Required="true" />
-			<Files ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="true" />
-			<SourcePath ParameterType="System.String" Required="true"/>
-			<DestinationPath ParameterType="System.String" Required="true"/>
-		</ParameterGroup>
-		<Task>
-			<Reference Include="System.IO.Compression" />
-			<Using Namespace="System.IO.Compression" />
-			<Code Type="Fragment" Language="cs">
-				<![CDATA[
-      try
-      {
-        using (Stream zipStream = new FileStream(Path.GetFullPath(OutputFilename), FileMode.Create, FileAccess.Write))
-        using (ZipArchive archive = new ZipArchive(zipStream, ZipArchiveMode.Create))
-        {
-            foreach (ITaskItem fileItem in Files)
-            {
-                string filename = fileItem.ItemSpec;
-                using (Stream fileStream = new FileStream(filename, FileMode.Open, FileAccess.Read))
-				using (Stream fileStreamInZip = archive.CreateEntry(fileItem.ItemSpec.Replace(SourcePath, DestinationPath)).Open())
-                    fileStream.CopyTo(fileStreamInZip);
-            }
-        }
-        return true;
-      }
-      catch (Exception ex)
-      {
-        Log.LogErrorFromException(ex);
-        return false;
-      }
-    ]]>
-			</Code>
-		</Task>
-	</UsingTask>
-
-	<Target Name="GenerateReleasenotesPDF" BeforeTargets="AfterBuild"  Condition="$(Configuration) == 'Deploy'">
-		<Message Text="Generating Release Notes PDF"/>
-		<Exec Command="cscript &quot;$(solutiondir)documentation\user manual source\convertpptxtopdf.vbs&quot; &quot;$(solutiondir)documentation\user manual source\release notes vecto3.x.pptx&quot; &quot;$(solutiondir)documentation\user manual source\release notes vecto3.x.pdf&quot;"/>
-	</Target>
+	
 	<!-- 
 <Target Name="GenerateHelpHTML" BeforeTargets="AfterBuild"  Condition="$(Configuration) == 'Deploy'">
 	<Message Text="Generating Help"/>
@@ -51,21 +8,95 @@
  </Target>   
  -->
 
-	<Target Name="AfterBuild" Condition="$(Configuration) == 'Deploy'">
+	<Target Name="AfterBuild" Condition="'$(Configuration)'=='Deploy'">
+
+		<Exec Command="cscript &quot;$(solutiondir)documentation\user manual source\convertpptxtopdf.vbs&quot; &quot;$(solutiondir)documentation\user manual source\release notes vecto3.x.pptx&quot; &quot;$(solutiondir)documentation\user manual source\release notes vecto3.x.pdf&quot;"/>
+		<PropertyGroup>
+			<CurrentDate>$([System.DateTime]::Now.ToString(yyy_MM_dd))</CurrentDate>
+			<DeployPath>$(SolutionDir)Deploy\</DeployPath>
+		</PropertyGroup>
+  	<RemoveDir Directories="$(SolutionDir)Deploy" Condition="Exists('$(SolutionDir)Deploy')"/>
+		<MakeDir Directories="$(DeployPath)"/>
+
+		<ItemGroup>
+			<!-- All files for net45 -->
+			<Net45VECTO Include="$(SolutionDir)VECTO\bin\Release\net45\*.exe*"/>
+			<Net45VECTO Include="$(SolutionDir)VECTO\bin\Release\net45\*.dll*"/>
+			<Net45HashingTool Include="$(SolutionDir)HashingTool\bin\Release\net45\*.exe*"/>
+			<Net45HashingTool Include="$(SolutionDir)HashingTool\bin\Release\net45\*.dll*"/>
+			<Net45HashingTool Include="$(SolutionDir)HashingCmd\bin\Release\net45\*.exe*"/>
+			<Net45HashingTool Include="$(SolutionDir)HashingCmd\bin\Release\net45\*.dll*"/>
+			<Net45VectoCommandLine Include="$(SolutionDir)VectoConsole\bin\Release\net45\*.exe*"/>
+			<Net45VectoCommandLine Include="$(SolutionDir)VectoConsole\bin\Release\net45\*.dll*"/>
+		</ItemGroup>
+		<Copy SourceFiles="@(Net45VectoCommandLine)" DestinationFolder="$(DeployPath)net45"/>
+		<Copy SourceFiles="@(Net45HashingTool)" DestinationFolder="$(DeployPath)net45"/>
+		<Copy SourceFiles="@(Net45VECTO)" DestinationFolder="$(DeployPath)net45"/>
+
+		<ItemGroup>
+			<!-- All files for net48 -->
+			<Net48VECTO Include="$(SolutionDir)VECTO\bin\Release\net48\*.exe*"/>
+			<Net48VECTO Include="$(SolutionDir)VECTO\bin\Release\net48\*.dll*"/>
+			<Net48HashingTool Include="$(SolutionDir)HashingTool\bin\Release\net48\*.exe*"/>
+			<Net48HashingTool Include="$(SolutionDir)HashingTool\bin\Release\net48\*.dll*"/>
+			<Net48HashingTool Include="$(SolutionDir)HashingCmd\bin\Release\net48\*.exe*"/>
+			<Net48HashingTool Include="$(SolutionDir)HashingCmd\bin\Release\net48\*.dll*"/>
+			<Net48VectoCommandLine Include="$(SolutionDir)VectoConsole\bin\Release\net48\*.exe*"/>
+			<Net48VectoCommandLine Include="$(SolutionDir)VectoConsole\bin\Release\net48\*.dll*"/>
+			<Net48VectoMultistage Include="$(SolutionDir)VECTO3GUI2020\bin\Release\net48\*.exe*"/>
+			<Net48VectoMultistage Include="$(SolutionDir)VECTO3GUI2020\bin\Release\net48\*.dll*"/>
+		</ItemGroup>
+		<Copy SourceFiles="@(Net48VectoCommandLine)" DestinationFolder="$(DeployPath)net48"/>
+		<Copy SourceFiles="@(Net48HashingTool)" DestinationFolder="$(DeployPath)net48"/>
+		<Copy SourceFiles="@(Net48VectoMultistage)" DestinationFolder="$(DeployPath)net48"/>
+		<Copy SourceFiles="@(Net48VECTO)" DestinationFolder="$(DeployPath)net48"/>
+
+		<ItemGroup>
+			<!-- All files for net5.0 -->
+			<Vecto Include="$(SolutionDir)VECTO\bin\Release\net5.0-windows\VECTO.*" Exclude="*.dev.json"/>
+			<Vecto Include="$(SolutionDir)VECTO\bin\Release\net5.0-windows\*.dll"/>
+			<Vecto Include="$(SolutionDir)VECTO\bin\Release\net5.0-windows\runtimes\**\*.*"/>
+			<VectoCommandLine Include="$(SolutionDir)VectoConsole\bin\Release\net5.0\vectocmd.*" Exclude="*.dev.json"/>
+			<VectoCommandLine Include="$(SolutionDir)VectoConsole\bin\Release\net5.0\*.dll"/>
+			<VectoCommandLine Include="$(SolutionDir)VectoConsole\bin\Release\net5.0\runtimes\**\*.*"/>
+			<HashingTool Include="$(SolutionDir)HashingTool\bin\Release\net5.0-windows\HashingTool.*" Exclude="*.dev.json"/>
+			<HashingTool Include="$(SolutionDir)HashingTool\bin\Release\net5.0-windows\*.dll"/>
+			<HashingTool Include="$(SolutionDir)HashingTool\bin\Release\net5.0-windows\runtimes\**\*.*"/>
+			<HashingTool Include="$(SolutionDir)HashingCmd\bin\Release\net5.0\hashingcmd.*" Exclude="*.dev.json"/>
+			<HashingTool Include="$(SolutionDir)HashingCmd\bin\Release\net5.0\*.dll"/>
+			<HashingTool Include="$(SolutionDir)HashingCmd\bin\Release\net5.0\runtimes\**\*.*"/>
+			<VectoMultistage Include="$(SolutionDir)VECTO3GUI2020\bin\Release\net5.0-windows\VECTOMultistage.*" Exclude="*.dev.json"/>
+			<VectoMultistage Include="$(SolutionDir)VECTO3GUI2020\bin\Release\net5.0-windows\*.dll"/>
+			<VectoMultistage Include="$(SolutionDir)VECTO3GUI2020\bin\Release\net5.0-windows\runtimes\**\*.*"/>
+		</ItemGroup>
+		<Copy SourceFiles="@(HashingTool)" DestinationFolder="$(DeployPath)net50"/>
+		<Copy SourceFiles="@(VectoMultistage)" DestinationFolder="$(DeployPath)net50"/>
+		<Copy SourceFiles="@(VectoCommandLine)" DestinationFolder="$(DeployPath)net50"/>
+		<Copy SourceFiles="@(Vecto)" DestinationFolder="$(DeployPath)net50"/>
+
 		<ItemGroup>
-			<VectoCoreAssembly Include="$(OutputPath)VectoCore.dll" />
-			<VectoCommandLine Include="$(SolutionDir)VectoConsole\bin\Release\net45\vectocmd.exe*"/>
+			<!-- All files for the VECTO starters -->
+			<VectoStart Include="$(SolutionDir)Tools\VECTOStart\bin\Deploy\net45\VECTO.exe" />
+			<VectoStart Include="$(SolutionDir)Tools\VECTOMultistageStart\bin\Release\net45\VECTOMultistage.exe" />
+			<VectoStart Include="$(SolutionDir)Tools\HashingCmdStart\bin\Release\net45\hashingcmd.exe" />
+			<VectoStart Include="$(SolutionDir)Tools\HashingToolStart\bin\Release\net45\HashingTool.exe" />
+			<VectoStart Include="$(SolutionDir)Tools\VECTOConsoleStart\bin\Release\net45\vectocmd.exe" />
+		</ItemGroup>
+		<Copy SourceFiles="@(VectoStart)" DestinationFolder="$(DeployPath)"/>
 
+		<ItemGroup>
+			<!-- General Files -->
+			<VectoConfigurationSample Include="$(SolutionDir)VECTO\install.ini"/>
 			<GenericVehicles Include="$(SolutionDir)Generic Vehicles\**\*.*" Exclude="$(SolutionDir)**\*.vmod;$(SolutionDir)**\*.vsum;$(SolutionDir)**\*RSLT_*.xml;$(SolutionDir)**\*.pdf"/>
 			<MissionProfiles Include="$(SolutionDir)VectoCore\VectoCore\Resources\Declaration\MissionCycles\**\*.*"/>
-			<DeclarationData Include="$(SolutionDir)VectoCore\VectoCore\Resources\Declaration\**/*.csv" Exclude="$(SolutionDir)**\MissionCycles\**\*.*"/>
-			<DeclarationData Include="$(SolutionDir)VectoCore\VectoCore\Resources\Declaration\**/*.vacc" Exclude="$(SolutionDir)**\MissionCycles\**\*.*"/>
-			<DeclarationData Include="$(SolutionDir)VectoCore\VectoCore\Resources\Declaration\**/*.apac" Exclude="$(SolutionDir)**\MissionCycles\**\*.*"/>
-			<DeclarationData Include="$(SolutionDir)VectoCore\VectoCore\Resources\Declaration\**/*.aenv" Exclude="$(SolutionDir)**\MissionCycles\**\*.*"/>
-			<DeclarationData Include="$(SolutionDir)VectoCore\VectoCore\Resources\Declaration\**/*.aaux" Exclude="$(SolutionDir)**\MissionCycles\**\*.*"/>
-			<DeclarationData Include="$(SolutionDir)VectoCore\VectoCore\Resources\Declaration\**/*.ahsm" Exclude="$(SolutionDir)**\MissionCycles\**\*.*"/>
-			<DeclarationData Include="$(SolutionDir)VectoCore\VectoCore\Resources\Declaration\**/*.acmp" Exclude="$(SolutionDir)**\MissionCycles\**\*.*"/>
-			<DeclarationData Include="$(SolutionDir)VectoCore\VectoCore\Resources\Declaration\**/*.vmap" Exclude="$(SolutionDir)**\MissionCycles\**\*.*"/>
+			<DeclarationData Include="$(SolutionDir)VectoCore\VectoCore\Resources\Declaration\**\*.csv" Exclude="$(SolutionDir)**\MissionCycles\**\*.*"/>
+			<DeclarationData Include="$(SolutionDir)VectoCore\VectoCore\Resources\Declaration\**\*.vacc" Exclude="$(SolutionDir)**\MissionCycles\**\*.*"/>
+			<DeclarationData Include="$(SolutionDir)VectoCore\VectoCore\Resources\Declaration\**\*.apac" Exclude="$(SolutionDir)**\MissionCycles\**\*.*"/>
+			<DeclarationData Include="$(SolutionDir)VectoCore\VectoCore\Resources\Declaration\**\*.aenv" Exclude="$(SolutionDir)**\MissionCycles\**\*.*"/>
+			<DeclarationData Include="$(SolutionDir)VectoCore\VectoCore\Resources\Declaration\**\*.aaux" Exclude="$(SolutionDir)**\MissionCycles\**\*.*"/>
+			<DeclarationData Include="$(SolutionDir)VectoCore\VectoCore\Resources\Declaration\**\*.ahsm" Exclude="$(SolutionDir)**\MissionCycles\**\*.*"/>
+			<DeclarationData Include="$(SolutionDir)VectoCore\VectoCore\Resources\Declaration\**\*.acmp" Exclude="$(SolutionDir)**\MissionCycles\**\*.*"/>
+			<DeclarationData Include="$(SolutionDir)VectoCore\VectoCore\Resources\Declaration\**\*.vmap" Exclude="$(SolutionDir)**\MissionCycles\**\*.*"/>
 			<VectoXSD Include="$(SolutionDir)VectoCore\VectoCore\Resources\XSD\**\*.*" Exclude="$(SolutionDir)**\*Engineering*"/>
 			<VectoXMLExamples Include="$(SolutionDir)VectoCore\VectoCoreTest\TestData\XML\XMLReaderDeclaration\*-sample.xml"/>
 			<UserManual Include="$(SolutionDir)Documentation\User Manual\help.html"/>
@@ -75,70 +106,22 @@
 			<UserManual Include="$(SolutionDir)Documentation\User Manual Source\JIRA Quick Start Guide.pdf"/>
 			<UserManual Include="$(SolutionDir)Documentation\Cdv_Generator_VECTO3.2.xlsx"/>
 			<ReleaseNotes Include="$(SolutionDir)Documentation\User Manual Source\Release Notes Vecto3.x.pdf"/>
-
-			<HashingTool Include="$(SolutionDir)HashingTool\bin\Release\net45\HashingTool.exe"/>
-			<HashingTool Include="$(SolutionDir)HashingCmd\bin\Release\net45\hashingcmd.exe"/>
-
-			<VectoConfigurationSample Include="$(SolutionDir)VECTO\install.ini"/>
-
-			<VectoMultistage Include="$(SolutionDir)VECTO3GUI2020\bin\Release\net5.0-windows\VECTOMultistage.exe*"/>
-			<VectoMultistage Include="$(SolutionDir)VECTO3GUI2020\bin\Release\net5.0-windows\*.dll"/>
 		</ItemGroup>
-
-		<Message Text="@(VectoCommandLine)"/>
-		<Copy SourceFiles="@(VectoCommandLine)" DestinationFolder="$(OutputPath)"/>
-		<Copy SourceFiles="@(VectoMultistage)" DestinationFolder="$(OutputPath)"/>
-		<Copy SourceFiles="@(HashingTool)" DestinationFolder="$(OutputPath)"/>
-		<Copy SourceFiles="@(GenericVehicles)" DestinationFiles="@(GenericVehicles->'$(OutputPath)\Generic Vehicles\%(RecursiveDir)%(Filename)%(Extension)')" />
-		<Copy SourceFiles="@(DeclarationData)" DestinationFolder="$(OutputPath)\Declaration" />
-		<Copy SourceFiles="@(MissionProfiles)" DestinationFolder="$(OutputPath)\Mission Profiles" />
-		<Copy SourceFiles="@(VectoXMLExamples)" DestinationFolder="$(OutputPath)\XML\Examples" />
-		<Copy SourceFiles="@(VectoXSD)" DestinationFolder="$(OutputPath)\XML\XSD" />
-		<Copy SourceFiles="@(UserManual)" DestinationFolder="$(OutputPath)\User Manual" />
-		<Copy SourceFiles="@(ReleaseNotes)" DestinationFiles="$(OutputPath)\User Manual\Release Notes.pdf" />
-		<Copy SourceFiles="@(VectoConfigurationSample)" DestinationFolder="$(OutputPath)"/>
-		<Copy SourceFiles="$(SolutionDir)\Documentation\User Manual Source\README for Mission Profiles Directory.txt" DestinationFiles="$(OutputPath)\Mission Profiles\!! README !!.TXT"/>
-		<Copy SourceFiles="$(SolutionDir)\Documentation\User Manual Source\README for Declaration Directory.txt" DestinationFiles="$(OutputPath)\Declaration\!! README !!.TXT"/>
-		<ItemGroup>
-			<ZipFiles Include="$(OutputPath)Declaration\**\*.*" />
-			<ZipFiles Include="$(OutputPath)Generic Vehicles\**\*.*" />
-			<ZipFiles Include="$(OutputPath)Mission Profiles\**\*.*" />
-			<ZipFiles Include="$(OutputPath)User Manual\**\*.*" />
-			<ZipFiles Include="$(OutputPath)XML\**\*.*" />
-		</ItemGroup>
-
-		<GetAssemblyIdentity  AssemblyFiles="@(VectoCoreAssembly)">
-			<Output  TaskParameter="Assemblies"  ItemName="VectoAssemblyIdentities"  />
-		</GetAssemblyIdentity>
-		<ItemGroup>
-			<ZipFiles Include="$(OutputPath)*.dll" />
-			<ZipFiles Include="$(OutputPath)*.ini" />
-			<ZipFiles Include="$(OutputPath)VECTO.exe*" />
-			<ZipFiles Include="$(OutputPath)VECTOMultistage.exe*" />
-			<ZipFiles Include="$(OutputPath)vectocmd.exe*"/>
-			<!-- <ZipFiles Include="$(OutputPath)VECTO3.exe*" /> -->
-			<ZipFiles Include="$(OutputPath)HashingTool.exe*"/>
-			<ZipFiles Include="$(OutputPath)hashingcmd.exe*"/>
-		</ItemGroup>
-		<PropertyGroup>
-			<CurrentDate>$([System.DateTime]::Now.ToString(yyy_MM_dd))</CurrentDate>
-		</PropertyGroup>
-		<Message Text="Creating ZIP, CurrentDate: $(CurrentDate)"/>
-		<Zip OutputFilename="$(SolutionDir)$(CurrentDate)-VECTO-%(VectoAssemblyIdentities.Version)-$(TargetFramework).zip" Files="@(ZipFiles)" SourcePath="$(OutputPath)" DestinationPath="$(CurrentDate)-VECTO-%(VectoAssemblyIdentities.Version)\"/>
+		<Copy SourceFiles="@(GenericVehicles)" DestinationFiles="@(GenericVehicles->'$(DeployPath)Generic Vehicles\%(RecursiveDir)%(Filename)%(Extension)')" />
+		<Copy SourceFiles="@(DeclarationData)" DestinationFolder="$(DeployPath)Declaration" />
+		<Copy SourceFiles="@(MissionProfiles)" DestinationFolder="$(DeployPath)Mission Profiles" />
+		<Copy SourceFiles="@(VectoXMLExamples)" DestinationFolder="$(DeployPath)XML\Examples" />
+		<Copy SourceFiles="@(VectoXSD)" DestinationFolder="$(DeployPath)XML\XSD" />
+		<Copy SourceFiles="@(UserManual)" DestinationFolder="$(DeployPath)User Manual" />
+		<Copy SourceFiles="@(ReleaseNotes)" DestinationFiles="$(DeployPath)User Manual\Release Notes.pdf" />
+		<Copy SourceFiles="@(VectoConfigurationSample)" DestinationFolder="$(DeployPath)"/>
+		<Copy SourceFiles="$(SolutionDir)\Documentation\User Manual Source\README for Mission Profiles Directory.txt" DestinationFiles="$(DeployPath)Mission Profiles\!! README !!.TXT"/>
+		<Copy SourceFiles="$(SolutionDir)\Documentation\User Manual Source\README for Declaration Directory.txt" DestinationFiles="$(DeployPath)Declaration\!! README !!.TXT"/>
+		<ZipDirectory SourceDirectory="$(DeployPath)" DestinationFile="$(SolutionDir)$(CurrentDate)-VECTO-$(Version).zip" Overwrite="true"/>
 	</Target>
 
-	<Target Name="CleanVectoDeploy" AfterTargets="AfterClean">
-		<ItemGroup>
-			<CustomFilesToClean Include="$(OutputPath)Declaration\**\*.*" />
-			<CustomFilesToClean Include="$(OutputPath)Generic Vehicles\**\*.*" />
-			<CustomFilesToClean Include="$(OutputPath)Mission Profiles\**\*.*" />
-			<CustomFilesToClean Include="$(OutputPath)User Manual\**\*.*" />
-			<CustomFilesToClean Include="$(OutputPath)XML\**\*.*" />
-			<CustomFoldersToClean Include="%(CustomFilesToClean.RootDir)%(CustomFilesToClean.Directory)"/>
-		</ItemGroup>
-		<!-- <Message Text="@(CustomFilesToClean)" Importance="normal"/> -->
-		<!-- <Message Text="@(CustomFoldersToClean)" Importance="normal"/> -->
-		<Delete Files="@CustomFilesToClean"/>
-		<RemoveDir Directories="@(CustomFoldersToClean)"/>
+	<Target Name="CleanVectoDeploy" AfterTargets="Clean">
+		<RemoveDir Directories="$(SolutionDir)Deploy" Condition="Exists('$(SolutionDir)Deploy')"/>
+		<Delete Files="$(SolutionDir)$(CurrentDate)-VECTO-$(Version).zip" Condition="Exists('$(SolutionDir)$(CurrentDate)-VECTO-$(Version).zip')"/>
 	</Target>
 </Project>
\ No newline at end of file
diff --git a/VECTOStart/VECTOStart.csproj b/Tools/HashingCmdStart/HashingCmdStart.csproj
similarity index 73%
rename from VECTOStart/VECTOStart.csproj
rename to Tools/HashingCmdStart/HashingCmdStart.csproj
index 7147ab5c96..013a946dd3 100644
--- a/VECTOStart/VECTOStart.csproj
+++ b/Tools/HashingCmdStart/HashingCmdStart.csproj
@@ -4,11 +4,12 @@
     <OutputType>Exe</OutputType>
     <TargetFrameworks />
     <TargetFramework>net45</TargetFramework>
-    <AssemblyName>VECTO</AssemblyName>
-    <ApplicationIcon>Icon2.ico</ApplicationIcon>
+    <AssemblyName>hashingcmd</AssemblyName>
+    <ApplicationIcon></ApplicationIcon>
     <PackageIconUrl />
     <RootNamespace>TUGraz.VECTO</RootNamespace>
-    <AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
+    <ApplicationIcon>Icon2.ico</ApplicationIcon>
+    <StartupObject />
   </PropertyGroup>
 
 </Project>
diff --git a/VECTOStart/Icon2.ico b/Tools/HashingCmdStart/Icon2.ico
similarity index 100%
rename from VECTOStart/Icon2.ico
rename to Tools/HashingCmdStart/Icon2.ico
diff --git a/VECTOStart/Program.cs b/Tools/HashingCmdStart/Program.cs
similarity index 53%
rename from VECTOStart/Program.cs
rename to Tools/HashingCmdStart/Program.cs
index 98ffa01c57..f2b7ce9a75 100644
--- a/VECTOStart/Program.cs
+++ b/Tools/HashingCmdStart/Program.cs
@@ -1,6 +1,8 @@
 using System;
 using Microsoft.Win32;
 using System.Diagnostics;
+using System.Reflection;
+using System.IO;
 
 namespace TUGraz.VECTO
 {
@@ -9,21 +11,18 @@ namespace TUGraz.VECTO
 		static void Main()
 		{
 			var version = GetHighestNETVersion();
-			try {
-				Process.Start(new ProcessStartInfo($"{version}\\VECTO.exe") { CreateNoWindow = true });
-			} catch (Exception e) {
-				Console.WriteLine($"Could not start VECTO with {version}: {e.Message}");
-				Console.ReadKey();
-			}
+			Process.Start(new ProcessStartInfo($"{version}\\{Assembly.GetExecutingAssembly().GetName().Name}.exe") {
+				WorkingDirectory = Directory.GetCurrentDirectory()
+			});
 		}
 
 		private static string GetHighestNETVersion()
 		{
 			if (SupportsNet50()) {
-				return "net5.0";
-			} 
-			
-			if (SupportsNET48()) {
+				return "net50";
+			}
+
+			if (SupportsNet48()) {
 				return "net48";
 			}
 
@@ -32,20 +31,25 @@ namespace TUGraz.VECTO
 
 		private static bool SupportsNet50()
 		{
-			var p = Process.Start(new ProcessStartInfo("dotnet", "--list-runtimes") {
-				CreateNoWindow = true,
-				UseShellExecute = false,
-				RedirectStandardError = true,
-				RedirectStandardOutput = true
+			try {
+				var p = Process.Start(new ProcessStartInfo("dotnet", "--list-runtimes") {
+					CreateNoWindow = true,
+					UseShellExecute = false,
+					RedirectStandardError = true,
+					RedirectStandardOutput = true
+				});
+
+				p.WaitForExit();
+				var output = p.StandardOutput.ReadToEnd();
+				return output.Contains("Microsoft.WindowsDesktop.App 5.0");
+			} catch (Exception e) {
+				Console.WriteLine(e);
 			}
-			);
 
-			p.WaitForExit();
-			var output = p.StandardOutput.ReadToEnd();
-			return output.Contains("Microsoft.WindowsDesktop.App 5.0");
+			return false;
 		}
 
-		private static bool SupportsNET48()
+		private static bool SupportsNet48()
 		{
 			const string subkey = @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\";
 			using (var ndpKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey(subkey)) {
diff --git a/Tools/HashingToolStart/HashingToolStart.csproj b/Tools/HashingToolStart/HashingToolStart.csproj
new file mode 100644
index 0000000000..e1ab2b9c97
--- /dev/null
+++ b/Tools/HashingToolStart/HashingToolStart.csproj
@@ -0,0 +1,14 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>WinExe</OutputType>
+    <TargetFrameworks />
+    <TargetFramework>net45</TargetFramework>
+    <AssemblyName>HashingTool</AssemblyName>
+    <ApplicationIcon>Icon2.ico</ApplicationIcon>
+    <PackageIconUrl />
+    <RootNamespace>TUGraz.VECTO</RootNamespace>
+    <StartupObject />
+  </PropertyGroup>
+
+</Project>
diff --git a/Tools/HashingToolStart/Icon2.ico b/Tools/HashingToolStart/Icon2.ico
new file mode 100644
index 0000000000000000000000000000000000000000..6de7e5cd7ef1e97f70d64cb3eeaa2b7fcc8d604f
GIT binary patch
literal 4286
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

literal 0
HcmV?d00001

diff --git a/Tools/HashingToolStart/Program.cs b/Tools/HashingToolStart/Program.cs
new file mode 100644
index 0000000000..f2b7ce9a75
--- /dev/null
+++ b/Tools/HashingToolStart/Program.cs
@@ -0,0 +1,65 @@
+using System;
+using Microsoft.Win32;
+using System.Diagnostics;
+using System.Reflection;
+using System.IO;
+
+namespace TUGraz.VECTO
+{
+	class Program
+	{
+		static void Main()
+		{
+			var version = GetHighestNETVersion();
+			Process.Start(new ProcessStartInfo($"{version}\\{Assembly.GetExecutingAssembly().GetName().Name}.exe") {
+				WorkingDirectory = Directory.GetCurrentDirectory()
+			});
+		}
+
+		private static string GetHighestNETVersion()
+		{
+			if (SupportsNet50()) {
+				return "net50";
+			}
+
+			if (SupportsNet48()) {
+				return "net48";
+			}
+
+			return "net45";
+		}
+
+		private static bool SupportsNet50()
+		{
+			try {
+				var p = Process.Start(new ProcessStartInfo("dotnet", "--list-runtimes") {
+					CreateNoWindow = true,
+					UseShellExecute = false,
+					RedirectStandardError = true,
+					RedirectStandardOutput = true
+				});
+
+				p.WaitForExit();
+				var output = p.StandardOutput.ReadToEnd();
+				return output.Contains("Microsoft.WindowsDesktop.App 5.0");
+			} catch (Exception e) {
+				Console.WriteLine(e);
+			}
+
+			return false;
+		}
+
+		private static bool SupportsNet48()
+		{
+			const string subkey = @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\";
+			using (var ndpKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey(subkey)) {
+				if (ndpKey != null && ndpKey.GetValue("Release") != null) {
+					var releaseKey = (int)ndpKey.GetValue("Release");
+					return releaseKey >= 528040;
+				}
+
+				return false;
+			}
+		}
+	}
+}
diff --git a/Tools/VECTOConsoleStart/Icon2.ico b/Tools/VECTOConsoleStart/Icon2.ico
new file mode 100644
index 0000000000000000000000000000000000000000..6de7e5cd7ef1e97f70d64cb3eeaa2b7fcc8d604f
GIT binary patch
literal 4286
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

literal 0
HcmV?d00001

diff --git a/Tools/VECTOConsoleStart/Program.cs b/Tools/VECTOConsoleStart/Program.cs
new file mode 100644
index 0000000000..f2b7ce9a75
--- /dev/null
+++ b/Tools/VECTOConsoleStart/Program.cs
@@ -0,0 +1,65 @@
+using System;
+using Microsoft.Win32;
+using System.Diagnostics;
+using System.Reflection;
+using System.IO;
+
+namespace TUGraz.VECTO
+{
+	class Program
+	{
+		static void Main()
+		{
+			var version = GetHighestNETVersion();
+			Process.Start(new ProcessStartInfo($"{version}\\{Assembly.GetExecutingAssembly().GetName().Name}.exe") {
+				WorkingDirectory = Directory.GetCurrentDirectory()
+			});
+		}
+
+		private static string GetHighestNETVersion()
+		{
+			if (SupportsNet50()) {
+				return "net50";
+			}
+
+			if (SupportsNet48()) {
+				return "net48";
+			}
+
+			return "net45";
+		}
+
+		private static bool SupportsNet50()
+		{
+			try {
+				var p = Process.Start(new ProcessStartInfo("dotnet", "--list-runtimes") {
+					CreateNoWindow = true,
+					UseShellExecute = false,
+					RedirectStandardError = true,
+					RedirectStandardOutput = true
+				});
+
+				p.WaitForExit();
+				var output = p.StandardOutput.ReadToEnd();
+				return output.Contains("Microsoft.WindowsDesktop.App 5.0");
+			} catch (Exception e) {
+				Console.WriteLine(e);
+			}
+
+			return false;
+		}
+
+		private static bool SupportsNet48()
+		{
+			const string subkey = @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\";
+			using (var ndpKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey(subkey)) {
+				if (ndpKey != null && ndpKey.GetValue("Release") != null) {
+					var releaseKey = (int)ndpKey.GetValue("Release");
+					return releaseKey >= 528040;
+				}
+
+				return false;
+			}
+		}
+	}
+}
diff --git a/Tools/VECTOConsoleStart/VECTOConsoleStart.csproj b/Tools/VECTOConsoleStart/VECTOConsoleStart.csproj
new file mode 100644
index 0000000000..982de63cbe
--- /dev/null
+++ b/Tools/VECTOConsoleStart/VECTOConsoleStart.csproj
@@ -0,0 +1,14 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>WinExe</OutputType>
+    <TargetFrameworks />
+    <TargetFramework>net45</TargetFramework>
+    <AssemblyName>vectocmd</AssemblyName>
+    <ApplicationIcon>Icon2.ico</ApplicationIcon>
+    <PackageIconUrl />
+    <RootNamespace>TUGraz.VECTO</RootNamespace>
+    <StartupObject />
+  </PropertyGroup>
+
+</Project>
diff --git a/Tools/VECTOMultistageStart/Icon2.ico b/Tools/VECTOMultistageStart/Icon2.ico
new file mode 100644
index 0000000000000000000000000000000000000000..6de7e5cd7ef1e97f70d64cb3eeaa2b7fcc8d604f
GIT binary patch
literal 4286
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

literal 0
HcmV?d00001

diff --git a/Tools/VECTOMultistageStart/Program.cs b/Tools/VECTOMultistageStart/Program.cs
new file mode 100644
index 0000000000..d200b44ac9
--- /dev/null
+++ b/Tools/VECTOMultistageStart/Program.cs
@@ -0,0 +1,47 @@
+using System;
+using System.Diagnostics;
+using System.IO;
+using System.Reflection;
+
+namespace TUGraz.VECTO
+{
+	class Program
+	{
+		static void Main()
+		{
+			var version = GetHighestNETVersion();
+			Process.Start(new ProcessStartInfo($"{version}\\{Assembly.GetExecutingAssembly().GetName().Name}.exe") {
+				WorkingDirectory = Directory.GetCurrentDirectory()
+			});
+		}
+
+		private static string GetHighestNETVersion()
+		{
+			if (SupportsNet50()) {
+				return "net50";
+			}
+
+			return "net48";
+		}
+
+		private static bool SupportsNet50()
+		{
+			try {
+				var p = Process.Start(new ProcessStartInfo("dotnet", "--list-runtimes") {
+					CreateNoWindow = true,
+					UseShellExecute = false,
+					RedirectStandardError = true,
+					RedirectStandardOutput = true
+				});
+
+				p.WaitForExit();
+				var output = p.StandardOutput.ReadToEnd();
+				return output.Contains("Microsoft.WindowsDesktop.App 5.0");
+			} catch (Exception e) {
+				Console.WriteLine(e);
+			}
+
+			return false;
+		}
+	}
+}
diff --git a/Tools/VECTOMultistageStart/VECTOMultistage.csproj b/Tools/VECTOMultistageStart/VECTOMultistage.csproj
new file mode 100644
index 0000000000..54da44a428
--- /dev/null
+++ b/Tools/VECTOMultistageStart/VECTOMultistage.csproj
@@ -0,0 +1,14 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>WinExe</OutputType>
+    <TargetFrameworks />
+    <TargetFramework>net45</TargetFramework>
+    <AssemblyName>VECTOMultistage</AssemblyName>
+    <ApplicationIcon>Icon2.ico</ApplicationIcon>
+    <PackageIconUrl />
+    <RootNamespace>TUGraz.VECTO</RootNamespace>
+    <StartupObject />
+  </PropertyGroup>
+
+</Project>
diff --git a/Tools/VECTOStart/Icon2.ico b/Tools/VECTOStart/Icon2.ico
new file mode 100644
index 0000000000000000000000000000000000000000..6de7e5cd7ef1e97f70d64cb3eeaa2b7fcc8d604f
GIT binary patch
literal 4286
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

literal 0
HcmV?d00001

diff --git a/Tools/VECTOStart/Program.cs b/Tools/VECTOStart/Program.cs
new file mode 100644
index 0000000000..0cd67d633c
--- /dev/null
+++ b/Tools/VECTOStart/Program.cs
@@ -0,0 +1,65 @@
+using System;
+using Microsoft.Win32;
+using System.Diagnostics;
+using System.IO;
+using System.Reflection;
+
+namespace TUGraz.VECTO
+{
+	class Program
+	{
+		static void Main()
+		{
+			var version = GetHighestNETVersion();
+			Process.Start(new ProcessStartInfo($"{version}\\{Assembly.GetExecutingAssembly().GetName().Name}.exe") {
+				WorkingDirectory = Directory.GetCurrentDirectory()
+			});
+		}
+
+		private static string GetHighestNETVersion()
+		{
+			if (SupportsNet50()) {
+				return "net50";
+			}
+
+			if (SupportsNet48()) {
+				return "net48";
+			}
+
+			return "net45";
+		}
+
+		private static bool SupportsNet50()
+		{
+			try {
+				var p = Process.Start(new ProcessStartInfo("dotnet", "--list-runtimes") {
+					CreateNoWindow = true,
+					UseShellExecute = false,
+					RedirectStandardError = true,
+					RedirectStandardOutput = true
+				});
+
+				p.WaitForExit();
+				var output = p.StandardOutput.ReadToEnd();
+				return output.Contains("Microsoft.WindowsDesktop.App 5.0");
+			} catch (Exception e) {
+				Console.WriteLine(e);
+			}
+
+			return false;
+		}
+
+		private static bool SupportsNet48()
+		{
+			const string subkey = @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\";
+			using (var ndpKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey(subkey)) {
+				if (ndpKey != null && ndpKey.GetValue("Release") != null) {
+					var releaseKey = (int)ndpKey.GetValue("Release");
+					return releaseKey >= 528040;
+				}
+
+				return false;
+			}
+		}
+	}
+}
diff --git a/Tools/VECTOStart/VECTOStart.csproj b/Tools/VECTOStart/VECTOStart.csproj
new file mode 100644
index 0000000000..b9d120f926
--- /dev/null
+++ b/Tools/VECTOStart/VECTOStart.csproj
@@ -0,0 +1,15 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>WinExe</OutputType>
+    <TargetFrameworks />
+    <TargetFramework>net45</TargetFramework>
+    <AssemblyName>VECTO</AssemblyName>
+    <ApplicationIcon>Icon2.ico</ApplicationIcon>
+    <PackageIconUrl />
+    <RootNamespace>TUGraz.VECTO</RootNamespace>
+    <Configurations>Debug;Release;Deploy</Configurations>
+    <StartupObject />
+  </PropertyGroup>
+
+</Project>
diff --git a/VECTO.sln b/VECTO.sln
index b779b7c309..1d76fea814 100644
--- a/VECTO.sln
+++ b/VECTO.sln
@@ -54,7 +54,50 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ParameterDocumentationTest"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ParameterDocumentation", "..\vecto-SchemaDocumentation\ParameterDocumentation\ParameterDocumentation.csproj", "{165739A9-C28D-4B82-96A9-8D063BEC22B9}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VECTOStart", "VECTOStart\VECTOStart.csproj", "{A151C75E-471A-42EB-8FE2-296C8D9FB8F9}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VECTOStart", "Tools\VECTOStart\VECTOStart.csproj", "{D47DF5C7-CD92-4388-A18F-1620630DB437}"
+	ProjectSection(ProjectDependencies) = postProject
+		{C5A75A10-0726-4FCA-B350-2F1694E1EABE} = {C5A75A10-0726-4FCA-B350-2F1694E1EABE}
+		{EF99431D-4227-44C3-B2BD-DE8AE3E672CA} = {EF99431D-4227-44C3-B2BD-DE8AE3E672CA}
+		{A0256B2A-09F8-45AD-B46A-FD98D7AAAA0C} = {A0256B2A-09F8-45AD-B46A-FD98D7AAAA0C}
+		{4977BE2A-CB80-4FC0-8D1A-30EC094011B4} = {4977BE2A-CB80-4FC0-8D1A-30EC094011B4}
+		{B673E12F-D323-4C4C-8805-9915B2C72D3D} = {B673E12F-D323-4C4C-8805-9915B2C72D3D}
+		{AAC0F132-0A9F-45B3-B682-77AC9B24B352} = {AAC0F132-0A9F-45B3-B682-77AC9B24B352}
+		{E14FC935-30EA-4BE6-AA8A-85CB76FEBA6A} = {E14FC935-30EA-4BE6-AA8A-85CB76FEBA6A}
+		{9FD67139-5120-4E64-9210-DD0A070903EA} = {9FD67139-5120-4E64-9210-DD0A070903EA}
+		{083F6B3C-9529-448F-AF1D-D0889852B918} = {083F6B3C-9529-448F-AF1D-D0889852B918}
+		{6A27F93E-4A58-48F6-B00B-3908C5D3D5A2} = {6A27F93E-4A58-48F6-B00B-3908C5D3D5A2}
+		{D78AD145-DD1F-45E7-89DA-4BF58F8F2D3E} = {D78AD145-DD1F-45E7-89DA-4BF58F8F2D3E}
+		{E8B0B447-1A54-4BEC-A160-AF0017000781} = {E8B0B447-1A54-4BEC-A160-AF0017000781}
+		{760C1C5B-A767-463E-BA85-F0BCFC23A550} = {760C1C5B-A767-463E-BA85-F0BCFC23A550}
+		{2320CD6F-FE7B-4341-A9BB-3ABCA7EF18F6} = {2320CD6F-FE7B-4341-A9BB-3ABCA7EF18F6}
+		{7F4FF473-96B3-461E-9CE6-76D3B75F87CB} = {7F4FF473-96B3-461E-9CE6-76D3B75F87CB}
+		{CD36938A-ADD9-4C65-96DA-B397CDEEA90A} = {CD36938A-ADD9-4C65-96DA-B397CDEEA90A}
+		{33F9848E-9257-4BE2-915F-68E748AEB204} = {33F9848E-9257-4BE2-915F-68E748AEB204}
+		{7C364099-9B85-473A-8A42-BBEBE4798FF5} = {7C364099-9B85-473A-8A42-BBEBE4798FF5}
+		{165739A9-C28D-4B82-96A9-8D063BEC22B9} = {165739A9-C28D-4B82-96A9-8D063BEC22B9}
+		{79A066AD-69A9-4223-90F6-6ED5D2D084F4} = {79A066AD-69A9-4223-90F6-6ED5D2D084F4}
+		{6F31F8B2-6AB3-4F85-8AC9-D09ADCA6432D} = {6F31F8B2-6AB3-4F85-8AC9-D09ADCA6432D}
+		{7E9172D4-07E3-4077-814E-7117AB2B3E22} = {7E9172D4-07E3-4077-814E-7117AB2B3E22}
+		{6589CAEC-ECC9-4BCC-9699-DE3F22BBCBD4} = {6589CAEC-ECC9-4BCC-9699-DE3F22BBCBD4}
+		{60AD4DF0-6648-4374-83CB-C7A162EFB391} = {60AD4DF0-6648-4374-83CB-C7A162EFB391}
+	EndProjectSection
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VECTOConsoleStart", "Tools\VECTOConsoleStart\VECTOConsoleStart.csproj", "{9FD67139-5120-4E64-9210-DD0A070903EA}"
+	ProjectSection(ProjectDependencies) = postProject
+		{60AD4DF0-6648-4374-83CB-C7A162EFB391} = {60AD4DF0-6648-4374-83CB-C7A162EFB391}
+	EndProjectSection
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HashingToolStart", "Tools\HashingToolStart\HashingToolStart.csproj", "{083F6B3C-9529-448F-AF1D-D0889852B918}"
+	ProjectSection(ProjectDependencies) = postProject
+		{E14FC935-30EA-4BE6-AA8A-85CB76FEBA6A} = {E14FC935-30EA-4BE6-AA8A-85CB76FEBA6A}
+	EndProjectSection
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HashingCmdStart", "Tools\HashingCmdStart\HashingCmdStart.csproj", "{4977BE2A-CB80-4FC0-8D1A-30EC094011B4}"
+	ProjectSection(ProjectDependencies) = postProject
+		{33F9848E-9257-4BE2-915F-68E748AEB204} = {33F9848E-9257-4BE2-915F-68E748AEB204}
+	EndProjectSection
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VECTOMultistage", "Tools\VECTOMultistageStart\VECTOMultistage.csproj", "{D78AD145-DD1F-45E7-89DA-4BF58F8F2D3E}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -65,8 +108,8 @@ Global
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 		{AAC0F132-0A9F-45B3-B682-77AC9B24B352}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{AAC0F132-0A9F-45B3-B682-77AC9B24B352}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{AAC0F132-0A9F-45B3-B682-77AC9B24B352}.Deploy|Any CPU.ActiveCfg = Deploy|Any CPU
-		{AAC0F132-0A9F-45B3-B682-77AC9B24B352}.Deploy|Any CPU.Build.0 = Deploy|Any CPU
+		{AAC0F132-0A9F-45B3-B682-77AC9B24B352}.Deploy|Any CPU.ActiveCfg = Release|Any CPU
+		{AAC0F132-0A9F-45B3-B682-77AC9B24B352}.Deploy|Any CPU.Build.0 = Release|Any CPU
 		{AAC0F132-0A9F-45B3-B682-77AC9B24B352}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{AAC0F132-0A9F-45B3-B682-77AC9B24B352}.Release|Any CPU.Build.0 = Release|Any CPU
 		{CD36938A-ADD9-4C65-96DA-B397CDEEA90A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -77,12 +120,12 @@ Global
 		{CD36938A-ADD9-4C65-96DA-B397CDEEA90A}.Release|Any CPU.Build.0 = Release|Any CPU
 		{6F31F8B2-6AB3-4F85-8AC9-D09ADCA6432D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{6F31F8B2-6AB3-4F85-8AC9-D09ADCA6432D}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{6F31F8B2-6AB3-4F85-8AC9-D09ADCA6432D}.Deploy|Any CPU.ActiveCfg = Debug|Any CPU
+		{6F31F8B2-6AB3-4F85-8AC9-D09ADCA6432D}.Deploy|Any CPU.ActiveCfg = Release|Any CPU
 		{6F31F8B2-6AB3-4F85-8AC9-D09ADCA6432D}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{6F31F8B2-6AB3-4F85-8AC9-D09ADCA6432D}.Release|Any CPU.Build.0 = Release|Any CPU
 		{6A27F93E-4A58-48F6-B00B-3908C5D3D5A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{6A27F93E-4A58-48F6-B00B-3908C5D3D5A2}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{6A27F93E-4A58-48F6-B00B-3908C5D3D5A2}.Deploy|Any CPU.ActiveCfg = Debug|Any CPU
+		{6A27F93E-4A58-48F6-B00B-3908C5D3D5A2}.Deploy|Any CPU.ActiveCfg = Release|Any CPU
 		{6A27F93E-4A58-48F6-B00B-3908C5D3D5A2}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{6A27F93E-4A58-48F6-B00B-3908C5D3D5A2}.Release|Any CPU.Build.0 = Release|Any CPU
 		{60AD4DF0-6648-4374-83CB-C7A162EFB391}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -93,17 +136,17 @@ Global
 		{60AD4DF0-6648-4374-83CB-C7A162EFB391}.Release|Any CPU.Build.0 = Release|Any CPU
 		{6589CAEC-ECC9-4BCC-9699-DE3F22BBCBD4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{6589CAEC-ECC9-4BCC-9699-DE3F22BBCBD4}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{6589CAEC-ECC9-4BCC-9699-DE3F22BBCBD4}.Deploy|Any CPU.ActiveCfg = Debug|Any CPU
+		{6589CAEC-ECC9-4BCC-9699-DE3F22BBCBD4}.Deploy|Any CPU.ActiveCfg = Release|Any CPU
 		{6589CAEC-ECC9-4BCC-9699-DE3F22BBCBD4}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{6589CAEC-ECC9-4BCC-9699-DE3F22BBCBD4}.Release|Any CPU.Build.0 = Release|Any CPU
 		{2320CD6F-FE7B-4341-A9BB-3ABCA7EF18F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{2320CD6F-FE7B-4341-A9BB-3ABCA7EF18F6}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{2320CD6F-FE7B-4341-A9BB-3ABCA7EF18F6}.Deploy|Any CPU.ActiveCfg = Debug|Any CPU
+		{2320CD6F-FE7B-4341-A9BB-3ABCA7EF18F6}.Deploy|Any CPU.ActiveCfg = Release|Any CPU
 		{2320CD6F-FE7B-4341-A9BB-3ABCA7EF18F6}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{2320CD6F-FE7B-4341-A9BB-3ABCA7EF18F6}.Release|Any CPU.Build.0 = Release|Any CPU
 		{E8B0B447-1A54-4BEC-A160-AF0017000781}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{E8B0B447-1A54-4BEC-A160-AF0017000781}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{E8B0B447-1A54-4BEC-A160-AF0017000781}.Deploy|Any CPU.ActiveCfg = Debug|Any CPU
+		{E8B0B447-1A54-4BEC-A160-AF0017000781}.Deploy|Any CPU.ActiveCfg = Release|Any CPU
 		{E8B0B447-1A54-4BEC-A160-AF0017000781}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{E8B0B447-1A54-4BEC-A160-AF0017000781}.Release|Any CPU.Build.0 = Release|Any CPU
 		{79A066AD-69A9-4223-90F6-6ED5D2D084F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -114,12 +157,14 @@ Global
 		{79A066AD-69A9-4223-90F6-6ED5D2D084F4}.Release|Any CPU.Build.0 = Release|Any CPU
 		{A0256B2A-09F8-45AD-B46A-FD98D7AAAA0C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{A0256B2A-09F8-45AD-B46A-FD98D7AAAA0C}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{A0256B2A-09F8-45AD-B46A-FD98D7AAAA0C}.Deploy|Any CPU.ActiveCfg = Debug|Any CPU
+		{A0256B2A-09F8-45AD-B46A-FD98D7AAAA0C}.Deploy|Any CPU.ActiveCfg = Release|Any CPU
 		{A0256B2A-09F8-45AD-B46A-FD98D7AAAA0C}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{A0256B2A-09F8-45AD-B46A-FD98D7AAAA0C}.Release|Any CPU.Build.0 = Release|Any CPU
 		{7C364099-9B85-473A-8A42-BBEBE4798FF5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{7C364099-9B85-473A-8A42-BBEBE4798FF5}.Deploy|Any CPU.ActiveCfg = Debug|Any CPU
+		{7C364099-9B85-473A-8A42-BBEBE4798FF5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{7C364099-9B85-473A-8A42-BBEBE4798FF5}.Deploy|Any CPU.ActiveCfg = Release|Any CPU
 		{7C364099-9B85-473A-8A42-BBEBE4798FF5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{7C364099-9B85-473A-8A42-BBEBE4798FF5}.Release|Any CPU.Build.0 = Release|Any CPU
 		{B673E12F-D323-4C4C-8805-9915B2C72D3D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{B673E12F-D323-4C4C-8805-9915B2C72D3D}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{B673E12F-D323-4C4C-8805-9915B2C72D3D}.Deploy|Any CPU.ActiveCfg = Release|Any CPU
@@ -128,7 +173,7 @@ Global
 		{B673E12F-D323-4C4C-8805-9915B2C72D3D}.Release|Any CPU.Build.0 = Release|Any CPU
 		{760C1C5B-A767-463E-BA85-F0BCFC23A550}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{760C1C5B-A767-463E-BA85-F0BCFC23A550}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{760C1C5B-A767-463E-BA85-F0BCFC23A550}.Deploy|Any CPU.ActiveCfg = Debug|Any CPU
+		{760C1C5B-A767-463E-BA85-F0BCFC23A550}.Deploy|Any CPU.ActiveCfg = Release|Any CPU
 		{760C1C5B-A767-463E-BA85-F0BCFC23A550}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{760C1C5B-A767-463E-BA85-F0BCFC23A550}.Release|Any CPU.Build.0 = Release|Any CPU
 		{E14FC935-30EA-4BE6-AA8A-85CB76FEBA6A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -151,7 +196,7 @@ Global
 		{7E9172D4-07E3-4077-814E-7117AB2B3E22}.Release|Any CPU.Build.0 = Release|Any CPU
 		{7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.Deploy|Any CPU.ActiveCfg = Debug|Any CPU
+		{7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.Deploy|Any CPU.ActiveCfg = Release|Any CPU
 		{7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{7F4FF473-96B3-461E-9CE6-76D3B75F87CB}.Release|Any CPU.Build.0 = Release|Any CPU
 		{EF99431D-4227-44C3-B2BD-DE8AE3E672CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -162,22 +207,46 @@ Global
 		{EF99431D-4227-44C3-B2BD-DE8AE3E672CA}.Release|Any CPU.Build.0 = Release|Any CPU
 		{C5A75A10-0726-4FCA-B350-2F1694E1EABE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{C5A75A10-0726-4FCA-B350-2F1694E1EABE}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{C5A75A10-0726-4FCA-B350-2F1694E1EABE}.Deploy|Any CPU.ActiveCfg = Debug|Any CPU
-		{C5A75A10-0726-4FCA-B350-2F1694E1EABE}.Deploy|Any CPU.Build.0 = Debug|Any CPU
+		{C5A75A10-0726-4FCA-B350-2F1694E1EABE}.Deploy|Any CPU.ActiveCfg = Release|Any CPU
+		{C5A75A10-0726-4FCA-B350-2F1694E1EABE}.Deploy|Any CPU.Build.0 = Release|Any CPU
 		{C5A75A10-0726-4FCA-B350-2F1694E1EABE}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{C5A75A10-0726-4FCA-B350-2F1694E1EABE}.Release|Any CPU.Build.0 = Release|Any CPU
 		{165739A9-C28D-4B82-96A9-8D063BEC22B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{165739A9-C28D-4B82-96A9-8D063BEC22B9}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{165739A9-C28D-4B82-96A9-8D063BEC22B9}.Deploy|Any CPU.ActiveCfg = Debug|Any CPU
-		{165739A9-C28D-4B82-96A9-8D063BEC22B9}.Deploy|Any CPU.Build.0 = Debug|Any CPU
+		{165739A9-C28D-4B82-96A9-8D063BEC22B9}.Deploy|Any CPU.ActiveCfg = Release|Any CPU
+		{165739A9-C28D-4B82-96A9-8D063BEC22B9}.Deploy|Any CPU.Build.0 = Release|Any CPU
 		{165739A9-C28D-4B82-96A9-8D063BEC22B9}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{165739A9-C28D-4B82-96A9-8D063BEC22B9}.Release|Any CPU.Build.0 = Release|Any CPU
-		{A151C75E-471A-42EB-8FE2-296C8D9FB8F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{A151C75E-471A-42EB-8FE2-296C8D9FB8F9}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{A151C75E-471A-42EB-8FE2-296C8D9FB8F9}.Deploy|Any CPU.ActiveCfg = Debug|Any CPU
-		{A151C75E-471A-42EB-8FE2-296C8D9FB8F9}.Deploy|Any CPU.Build.0 = Debug|Any CPU
-		{A151C75E-471A-42EB-8FE2-296C8D9FB8F9}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{A151C75E-471A-42EB-8FE2-296C8D9FB8F9}.Release|Any CPU.Build.0 = Release|Any CPU
+		{D47DF5C7-CD92-4388-A18F-1620630DB437}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{D47DF5C7-CD92-4388-A18F-1620630DB437}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{D47DF5C7-CD92-4388-A18F-1620630DB437}.Deploy|Any CPU.ActiveCfg = Deploy|Any CPU
+		{D47DF5C7-CD92-4388-A18F-1620630DB437}.Deploy|Any CPU.Build.0 = Deploy|Any CPU
+		{D47DF5C7-CD92-4388-A18F-1620630DB437}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{D47DF5C7-CD92-4388-A18F-1620630DB437}.Release|Any CPU.Build.0 = Release|Any CPU
+		{9FD67139-5120-4E64-9210-DD0A070903EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{9FD67139-5120-4E64-9210-DD0A070903EA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{9FD67139-5120-4E64-9210-DD0A070903EA}.Deploy|Any CPU.ActiveCfg = Release|Any CPU
+		{9FD67139-5120-4E64-9210-DD0A070903EA}.Deploy|Any CPU.Build.0 = Release|Any CPU
+		{9FD67139-5120-4E64-9210-DD0A070903EA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{9FD67139-5120-4E64-9210-DD0A070903EA}.Release|Any CPU.Build.0 = Release|Any CPU
+		{083F6B3C-9529-448F-AF1D-D0889852B918}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{083F6B3C-9529-448F-AF1D-D0889852B918}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{083F6B3C-9529-448F-AF1D-D0889852B918}.Deploy|Any CPU.ActiveCfg = Release|Any CPU
+		{083F6B3C-9529-448F-AF1D-D0889852B918}.Deploy|Any CPU.Build.0 = Release|Any CPU
+		{083F6B3C-9529-448F-AF1D-D0889852B918}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{083F6B3C-9529-448F-AF1D-D0889852B918}.Release|Any CPU.Build.0 = Release|Any CPU
+		{4977BE2A-CB80-4FC0-8D1A-30EC094011B4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{4977BE2A-CB80-4FC0-8D1A-30EC094011B4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{4977BE2A-CB80-4FC0-8D1A-30EC094011B4}.Deploy|Any CPU.ActiveCfg = Release|Any CPU
+		{4977BE2A-CB80-4FC0-8D1A-30EC094011B4}.Deploy|Any CPU.Build.0 = Release|Any CPU
+		{4977BE2A-CB80-4FC0-8D1A-30EC094011B4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{4977BE2A-CB80-4FC0-8D1A-30EC094011B4}.Release|Any CPU.Build.0 = Release|Any CPU
+		{D78AD145-DD1F-45E7-89DA-4BF58F8F2D3E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{D78AD145-DD1F-45E7-89DA-4BF58F8F2D3E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{D78AD145-DD1F-45E7-89DA-4BF58F8F2D3E}.Deploy|Any CPU.ActiveCfg = Release|Any CPU
+		{D78AD145-DD1F-45E7-89DA-4BF58F8F2D3E}.Deploy|Any CPU.Build.0 = Release|Any CPU
+		{D78AD145-DD1F-45E7-89DA-4BF58F8F2D3E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{D78AD145-DD1F-45E7-89DA-4BF58F8F2D3E}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -195,6 +264,11 @@ Global
 		{760C1C5B-A767-463E-BA85-F0BCFC23A550} = {73A5BF70-6168-456F-95E5-A1402BFA488C}
 		{C5A75A10-0726-4FCA-B350-2F1694E1EABE} = {351FF7E8-B56B-445E-8E98-A61E07C990DA}
 		{165739A9-C28D-4B82-96A9-8D063BEC22B9} = {351FF7E8-B56B-445E-8E98-A61E07C990DA}
+		{D47DF5C7-CD92-4388-A18F-1620630DB437} = {351FF7E8-B56B-445E-8E98-A61E07C990DA}
+		{9FD67139-5120-4E64-9210-DD0A070903EA} = {351FF7E8-B56B-445E-8E98-A61E07C990DA}
+		{083F6B3C-9529-448F-AF1D-D0889852B918} = {351FF7E8-B56B-445E-8E98-A61E07C990DA}
+		{4977BE2A-CB80-4FC0-8D1A-30EC094011B4} = {351FF7E8-B56B-445E-8E98-A61E07C990DA}
+		{D78AD145-DD1F-45E7-89DA-4BF58F8F2D3E} = {351FF7E8-B56B-445E-8E98-A61E07C990DA}
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {B38F3172-132E-43F7-9C4B-5FDC3A28C051}
diff --git a/VECTO/VECTO.vbproj b/VECTO/VECTO.vbproj
index 3819e88f52..641e216b9d 100644
--- a/VECTO/VECTO.vbproj
+++ b/VECTO/VECTO.vbproj
@@ -10,17 +10,13 @@
     <OptionStrict>On</OptionStrict>
     <UseWindowsForms>true</UseWindowsForms>
     <MyType>WindowsForms</MyType>
-    <Configurations>Debug;Release;Deploy</Configurations>
     <DefineDebug>false</DefineDebug>
     <DefineTrace>false</DefineTrace>
     <TargetFrameworks>net45;net48;net5.0-windows</TargetFrameworks>
+    <!--<TargetFrameworks />
+    <TargetFramework>net5.0-windows</TargetFramework>-->
   </PropertyGroup>
   
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
-    <DefineDebug>false</DefineDebug>
-    <DefineTrace>false</DefineTrace>
-  </PropertyGroup>
-
   <ItemGroup>
     <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
     <PackageReference Include="NLog" Version="4.7.13" />
@@ -42,11 +38,9 @@
     <Reference Include="System.Windows.Forms.DataVisualization" />
   </ItemGroup>
 
-
-
   <ItemGroup Condition="'$(TargetFramework)'=='net5.0-windows'">
     <PackageReference Include="System.Drawing.Common" Version="6.0.0" />
-    <Reference Include="System.Windows.Forms">
+    <Reference Include="System.Windows.Forms" NoWarn="NU1701">
       <HintPath>C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.Windows.Forms.dll</HintPath>
     </Reference>
     <Reference Include="System.Windows.Forms.DataVisualization">
diff --git a/VECTO/app.config b/VECTO/app.config
index 041469abdf..49b939ba25 100644
--- a/VECTO/app.config
+++ b/VECTO/app.config
@@ -1,22 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
-
 <configuration>
 	<configSections>
 		<section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog" />
 	</configSections>
-	<runtime>
-		<loadFromRemoteSources enabled="true" />
-		<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
-			<dependentAssembly>
-				<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
-				<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
-			</dependentAssembly>
-			<dependentAssembly>
-				<assemblyIdentity name="Ninject" publicKeyToken="c7192dc5380945e7" culture="neutral" />
-				<bindingRedirect oldVersion="0.0.0.0-3.3.4.0" newVersion="3.3.4.0" />
-			</dependentAssembly>
-		</assemblyBinding>
-	</runtime>
 	<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd" autoReload="false" throwExceptions="false" internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">
 		<targets async="true">
 			<target xsi:type="Console" name="ConsoleLogger" error="true" />
@@ -34,12 +20,9 @@
 	</nlog>
 	<system.diagnostics>
 		<sources>
-			<!-- Dieser Abschnitt definiert die Protokollierungskonfiguration für My.Application.Log -->
 			<source name="DefaultSource" switchName="DefaultSwitch">
 				<listeners>
 					<add name="FileLog" />
-					<!-- Auskommentierung des nachfolgenden Abschnitts aufheben, um in das Anwendungsereignisprotokoll zu schreiben -->
-					<!--<add name="EventLog"/>-->
 				</listeners>
 			</source>
 		</sources>
@@ -48,11 +31,6 @@
 		</switches>
 		<sharedListeners>
 			<add name="FileLog" type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" initializeData="FileLogWriter" />
-			<!-- Auskommentierung des nachfolgenden Abschnitts aufheben und APPLICATION_NAME durch den Namen der Anwendung ersetzen, um in das Anwendungsereignisprotokoll zu schreiben -->
-			<!--<add name="EventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="APPLICATION_NAME"/> -->
 		</sharedListeners>
 	</system.diagnostics>
-	<startup>
-		<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
-	</startup>
 </configuration>
\ No newline at end of file
diff --git a/VECTO3GUI/VECTO3GUI.csproj b/VECTO3GUI/VECTO3GUI.csproj
index b25f473425..1f614921ce 100644
--- a/VECTO3GUI/VECTO3GUI.csproj
+++ b/VECTO3GUI/VECTO3GUI.csproj
@@ -13,7 +13,6 @@
     <FileAlignment>512</FileAlignment>
     <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
     <WarningLevel>4</WarningLevel>
-    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <PlatformTarget>AnyCPU</PlatformTarget>
@@ -651,9 +650,6 @@
     </None>
     <AppDesigner Include="Properties\" />
   </ItemGroup>
-  <ItemGroup>
-    <None Include="App.config" />
-  </ItemGroup>
   <ItemGroup>
     <ProjectReference Include="..\VectoCommon\VectoCommon\VectoCommon.csproj">
       <Project>{79a066ad-69a9-4223-90f6-6ed5d2d084f4}</Project>
diff --git a/Vecto3GUI2020Test/Vecto3GUI2020Test.csproj b/Vecto3GUI2020Test/Vecto3GUI2020Test.csproj
index 0a447b85ac..aea32a189d 100644
--- a/Vecto3GUI2020Test/Vecto3GUI2020Test.csproj
+++ b/Vecto3GUI2020Test/Vecto3GUI2020Test.csproj
@@ -6,7 +6,7 @@
 
   <ItemGroup>
     <PackageReference Include="Appium.WebDriver" Version="4.3.1" />
-    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.0.0" />
+    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0" />
     <PackageReference Include="Microsoft.Toolkit.Mvvm" Version="7.1.2" />
     <PackageReference Include="Moq" Version="4.16.1" />
     <PackageReference Include="Ninject" Version="3.3.4" />
diff --git a/VectoCommon/VectoHashingTest/VectoHashingTest.csproj b/VectoCommon/VectoHashingTest/VectoHashingTest.csproj
index 4931318bca..7631c22a20 100644
--- a/VectoCommon/VectoHashingTest/VectoHashingTest.csproj
+++ b/VectoCommon/VectoHashingTest/VectoHashingTest.csproj
@@ -16,7 +16,7 @@
     <PackageReference Include="Ninject.Extensions.Factory" Version="3.3.3" />
     <PackageReference Include="NUnit" Version="3.13.2" />
     <PackageReference Include="NUnit3TestAdapter" Version="4.2.1" />
-    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.0.0" />
+    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0" />
     <PackageReference Include="System.Security.Cryptography.Xml" Version="6.0.0" />
   </ItemGroup>
 
diff --git a/VectoConsole/App.config b/VectoConsole/App.config
index 5f66454572..8ef55200ef 100644
--- a/VectoConsole/App.config
+++ b/VectoConsole/App.config
@@ -1,12 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
-
 <configuration>
 	<configSections>
 		<section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog" />
 	</configSections>
-	<startup>
-		<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
-	</startup>
 	<runtime>
 		<loadFromRemoteSources enabled="true" />
 		<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
diff --git a/VectoConsole/Program.cs b/VectoConsole/Program.cs
index 435e2835c8..9019335655 100644
--- a/VectoConsole/Program.cs
+++ b/VectoConsole/Program.cs
@@ -107,7 +107,7 @@ Examples:
 
 		private static int Main(string[] args)
 		{
-			
+
 			_kernel = new StandardKernel(new VectoNinjectModule());
 			try {
 				// on -h display help and terminate.
@@ -145,6 +145,12 @@ Examples:
 				}
 
 				var config = LogManager.Configuration;
+				if (config is null) {
+					// in .net5.0 the app is exported as dll, therefore the default config lookup of nlog doesn't work.
+					LogManager.LoadConfiguration($"{Assembly.GetExecutingAssembly().GetName().Name}.dll.config");
+					config = LogManager.Configuration;
+				}
+
 				config.LoggingRules.Add(new LoggingRule("*", logLevel, config.FindTargetByName("LogFile")));
 
 				if (logLevel > LogLevel.Warn) {
diff --git a/VectoCore/ModelbasedTests/ModelbasedTests.csproj b/VectoCore/ModelbasedTests/ModelbasedTests.csproj
index 874d9a7474..8e82aae326 100644
--- a/VectoCore/ModelbasedTests/ModelbasedTests.csproj
+++ b/VectoCore/ModelbasedTests/ModelbasedTests.csproj
@@ -10,7 +10,7 @@
   <ItemGroup>
     <PackageReference Include="NUnit" Version="3.13.2" />
     <PackageReference Include="NUnit3TestAdapter" Version="4.2.1" />
-    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.0.0" />
+    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0" />
   </ItemGroup>
   
   <ItemGroup>
diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj
index 9126ebc018..ab3a0dcb3d 100644
--- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj
+++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj
@@ -10,7 +10,7 @@
   <ItemGroup>
     <PackageReference Include="NUnit" Version="3.13.2" />
     <PackageReference Include="NUnit3TestAdapter" Version="4.2.1" />
-    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.0.0" />
+    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0" />
     <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
     <PackageReference Include="Ninject" Version="3.3.4" />
     <PackageReference Include="NLog" Version="4.7.13" />
-- 
GitLab