diff --git a/.gitignore b/.gitignore
index 3ce91e72e..2920732f4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,7 +3,6 @@
**/libs
**/*.xproj
**/*.xproj.user
-**/*.sln
**/.vs
**/.vscode
**/*.error
diff --git a/ActionsRunner.sln b/ActionsRunner.sln
new file mode 100644
index 000000000..8eb5ef206
--- /dev/null
+++ b/ActionsRunner.sln
@@ -0,0 +1,73 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.29411.138
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Runner.Common", "src\Runner.Common\Runner.Common.csproj", "{084289A3-CD7A-42E0-9219-4348B4B7E19B}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Runner.Listener", "src\Runner.Listener\Runner.Listener.csproj", "{7D461AEE-BF2A-4855-BD96-56921160B36A}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Runner.PluginHost", "src\Runner.PluginHost\Runner.PluginHost.csproj", "{D0320EB1-CB6D-4179-BFDC-2F2B664A370C}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Runner.Plugins", "src\Runner.Plugins\Runner.Plugins.csproj", "{C23AFD6F-4DCD-4243-BC61-865BE31B9168}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Runner.Sdk", "src\Runner.Sdk\Runner.Sdk.csproj", "{D0484633-DA97-4C34-8E47-1DADE212A57A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RunnerService", "src\Runner.Service\Windows\RunnerService.csproj", "{D12EBD71-0464-46D0-8394-40BCFBA0A6F2}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Runner.Worker", "src\Runner.Worker\Runner.Worker.csproj", "{C2F5B9FA-2621-411F-8EB2-273ED276F503}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sdk", "src\Sdk\Sdk.csproj", "{D2EE812B-E4DF-49BB-AE87-12BC49949B5F}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Test", "src\Test\Test.csproj", "{C932061F-F6A1-4F1E-B854-A6C6B30DC3EF}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {084289A3-CD7A-42E0-9219-4348B4B7E19B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {084289A3-CD7A-42E0-9219-4348B4B7E19B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {084289A3-CD7A-42E0-9219-4348B4B7E19B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {084289A3-CD7A-42E0-9219-4348B4B7E19B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7D461AEE-BF2A-4855-BD96-56921160B36A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7D461AEE-BF2A-4855-BD96-56921160B36A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7D461AEE-BF2A-4855-BD96-56921160B36A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7D461AEE-BF2A-4855-BD96-56921160B36A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D0320EB1-CB6D-4179-BFDC-2F2B664A370C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D0320EB1-CB6D-4179-BFDC-2F2B664A370C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D0320EB1-CB6D-4179-BFDC-2F2B664A370C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D0320EB1-CB6D-4179-BFDC-2F2B664A370C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C23AFD6F-4DCD-4243-BC61-865BE31B9168}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C23AFD6F-4DCD-4243-BC61-865BE31B9168}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C23AFD6F-4DCD-4243-BC61-865BE31B9168}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C23AFD6F-4DCD-4243-BC61-865BE31B9168}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D0484633-DA97-4C34-8E47-1DADE212A57A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D0484633-DA97-4C34-8E47-1DADE212A57A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D0484633-DA97-4C34-8E47-1DADE212A57A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D0484633-DA97-4C34-8E47-1DADE212A57A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D12EBD71-0464-46D0-8394-40BCFBA0A6F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D12EBD71-0464-46D0-8394-40BCFBA0A6F2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D12EBD71-0464-46D0-8394-40BCFBA0A6F2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D12EBD71-0464-46D0-8394-40BCFBA0A6F2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C2F5B9FA-2621-411F-8EB2-273ED276F503}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C2F5B9FA-2621-411F-8EB2-273ED276F503}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C2F5B9FA-2621-411F-8EB2-273ED276F503}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C2F5B9FA-2621-411F-8EB2-273ED276F503}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D2EE812B-E4DF-49BB-AE87-12BC49949B5F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D2EE812B-E4DF-49BB-AE87-12BC49949B5F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D2EE812B-E4DF-49BB-AE87-12BC49949B5F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D2EE812B-E4DF-49BB-AE87-12BC49949B5F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C932061F-F6A1-4F1E-B854-A6C6B30DC3EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C932061F-F6A1-4F1E-B854-A6C6B30DC3EF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C932061F-F6A1-4F1E-B854-A6C6B30DC3EF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C932061F-F6A1-4F1E-B854-A6C6B30DC3EF}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {4A831DDA-3860-45E5-930E-BB3A7833AE80}
+ EndGlobalSection
+EndGlobal
diff --git a/src/Directory.Build.props b/src/Directory.Build.props
new file mode 100644
index 000000000..0799b4438
--- /dev/null
+++ b/src/Directory.Build.props
@@ -0,0 +1,52 @@
+
+
+
+ Windows
+ OSX
+ Linux
+
+
+
+
+ $(DefineConstants);OS_WINDOWS
+
+
+ $(DefineConstants);OS_OSX
+
+
+ $(DefineConstants);OS_LINUX
+
+
+ $(DefineConstants);OS_RHEL6
+
+
+
+
+ $(DefineConstants);X64
+
+
+ $(DefineConstants);X86
+
+
+
+ $(DefineConstants);X64
+
+
+
+ $(DefineConstants);X64
+
+
+ $(DefineConstants);X64
+
+
+ $(DefineConstants);ARM
+
+
+
+
+ $(DefineConstants);TRACE
+
+
+ $(DefineConstants);DEBUG
+
+
diff --git a/src/Runner.Common/Runner.Common.csproj b/src/Runner.Common/Runner.Common.csproj
index 1e866d71f..0ebf38336 100644
--- a/src/Runner.Common/Runner.Common.csproj
+++ b/src/Runner.Common/Runner.Common.csproj
@@ -27,43 +27,5 @@
portable
-
-
- OS_WINDOWS;X64;TRACE
-
-
- OS_WINDOWS;X86;TRACE
-
-
- OS_WINDOWS;X64;DEBUG;TRACE
-
-
- OS_WINDOWS;X86;DEBUG;TRACE
-
-
-
- OS_OSX;X64;TRACE
-
-
- OS_OSX;DEBUG;X64;TRACE
-
-
- OS_LINUX;X64;TRACE
-
-
- OS_LINUX;OS_RHEL6;X64;TRACE
-
-
- OS_LINUX;ARM;TRACE
-
-
- OS_LINUX;X64;DEBUG;TRACE
-
-
- OS_LINUX;OS_RHEL6;X64;DEBUG;TRACE
-
-
- OS_LINUX;ARM;DEBUG;TRACE
-
diff --git a/src/Runner.Listener/Runner.Listener.csproj b/src/Runner.Listener/Runner.Listener.csproj
index 235850887..243e5911f 100644
--- a/src/Runner.Listener/Runner.Listener.csproj
+++ b/src/Runner.Listener/Runner.Listener.csproj
@@ -30,43 +30,5 @@
portable
-
-
- OS_WINDOWS;X64;TRACE
-
-
- OS_WINDOWS;X86;TRACE
-
-
- OS_WINDOWS;X64;DEBUG;TRACE
-
-
- OS_WINDOWS;X86;DEBUG;TRACE
-
-
-
- OS_OSX;X64;TRACE
-
-
- OS_OSX;DEBUG;X64;TRACE
-
-
- OS_LINUX;X64;TRACE
-
-
- OS_LINUX;OS_RHEL6;X64;TRACE
-
-
- OS_LINUX;ARM;TRACE
-
-
- OS_LINUX;X64;DEBUG;TRACE
-
-
- OS_LINUX;OS_RHEL6;X64;DEBUG;TRACE
-
-
- OS_LINUX;ARM;DEBUG;TRACE
-
diff --git a/src/Runner.PluginHost/Runner.PluginHost.csproj b/src/Runner.PluginHost/Runner.PluginHost.csproj
index 56255ebfe..6066911f4 100644
--- a/src/Runner.PluginHost/Runner.PluginHost.csproj
+++ b/src/Runner.PluginHost/Runner.PluginHost.csproj
@@ -24,42 +24,4 @@
portable
-
- OS_WINDOWS;X64;TRACE
-
-
- OS_WINDOWS;X86;TRACE
-
-
- OS_WINDOWS;X64;DEBUG;TRACE
-
-
- OS_WINDOWS;X86;DEBUG;TRACE
-
-
-
- OS_OSX;X64;TRACE
-
-
- OS_OSX;DEBUG;X64;TRACE
-
-
-
- OS_LINUX;X64;TRACE
-
-
- OS_LINUX;OS_RHEL6;X64;TRACE
-
-
- OS_LINUX;ARM;TRACE
-
-
- OS_LINUX;X64;DEBUG;TRACE
-
-
- OS_LINUX;OS_RHEL6;X64;DEBUG;TRACE
-
-
- OS_LINUX;ARM;DEBUG;TRACE
-
diff --git a/src/Runner.Plugins/Runner.Plugins.csproj b/src/Runner.Plugins/Runner.Plugins.csproj
index 439f35740..da5d92f9b 100644
--- a/src/Runner.Plugins/Runner.Plugins.csproj
+++ b/src/Runner.Plugins/Runner.Plugins.csproj
@@ -19,43 +19,5 @@
portable
-
-
- OS_WINDOWS;X64;TRACE
-
-
- OS_WINDOWS;X86;TRACE
-
-
- OS_WINDOWS;X64;DEBUG;TRACE
-
-
- OS_WINDOWS;X86;DEBUG;TRACE
-
-
-
- OS_OSX;X64;TRACE
-
-
- OS_OSX;DEBUG;X64;TRACE
-
-
- OS_LINUX;X64;TRACE
-
-
- OS_LINUX;OS_RHEL6;X64;TRACE
-
-
- OS_LINUX;ARM;TRACE
-
-
- OS_LINUX;X64;DEBUG;TRACE
-
-
- OS_LINUX;OS_RHEL6;X64;DEBUG;TRACE
-
-
- OS_LINUX;ARM;DEBUG;TRACE
-
diff --git a/src/Runner.Sdk/Runner.Sdk.csproj b/src/Runner.Sdk/Runner.Sdk.csproj
index 332b55328..ba5caa935 100644
--- a/src/Runner.Sdk/Runner.Sdk.csproj
+++ b/src/Runner.Sdk/Runner.Sdk.csproj
@@ -24,43 +24,5 @@
portable
-
-
- OS_WINDOWS;X64;TRACE
-
-
- OS_WINDOWS;X86;TRACE
-
-
- OS_WINDOWS;X64;DEBUG;TRACE
-
-
- OS_WINDOWS;X86;DEBUG;TRACE
-
-
-
- OS_OSX;X64;TRACE
-
-
- OS_OSX;DEBUG;X64;TRACE
-
-
- OS_LINUX;X64;TRACE
-
-
- OS_LINUX;OS_RHEL6;X64;TRACE
-
-
- OS_LINUX;ARM;TRACE
-
-
- OS_LINUX;X64;DEBUG;TRACE
-
-
- OS_LINUX;OS_RHEL6;X64;DEBUG;TRACE
-
-
- OS_LINUX;ARM;DEBUG;TRACE
-
diff --git a/src/Runner.Worker/Runner.Worker.csproj b/src/Runner.Worker/Runner.Worker.csproj
index 64d35e90e..1b25f492a 100644
--- a/src/Runner.Worker/Runner.Worker.csproj
+++ b/src/Runner.Worker/Runner.Worker.csproj
@@ -35,42 +35,4 @@
portable
-
- OS_WINDOWS;X64;TRACE
-
-
- OS_WINDOWS;X86;TRACE
-
-
- OS_WINDOWS;X64;DEBUG;TRACE
-
-
- OS_WINDOWS;X86;DEBUG;TRACE
-
-
-
- OS_OSX;X64;TRACE
-
-
- OS_OSX;DEBUG;X64;TRACE
-
-
-
- OS_LINUX;X64;TRACE
-
-
- OS_LINUX;OS_RHEL6;X64;TRACE
-
-
- OS_LINUX;ARM;TRACE
-
-
- OS_LINUX;X64;DEBUG;TRACE
-
-
- OS_LINUX;OS_RHEL6;X64;DEBUG;TRACE
-
-
- OS_LINUX;ARM;DEBUG;TRACE
-
diff --git a/src/Test/Test.csproj b/src/Test/Test.csproj
index 035a3c182..0b8ec45a3 100644
--- a/src/Test/Test.csproj
+++ b/src/Test/Test.csproj
@@ -29,42 +29,4 @@
portable
-
- OS_WINDOWS;X64;TRACE
-
-
- OS_WINDOWS;X86;TRACE
-
-
- OS_WINDOWS;X64;DEBUG;TRACE
-
-
- OS_WINDOWS;X86;DEBUG;TRACE
-
-
-
- OS_OSX;X64;TRACE
-
-
- OS_OSX;DEBUG;X64;TRACE
-
-
-
- OS_LINUX;X64;TRACE
-
-
- OS_LINUX;OS_RHEL6;X64;TRACE
-
-
- OS_LINUX;ARM;TRACE
-
-
- OS_LINUX;X64;DEBUG;TRACE
-
-
- OS_LINUX;OS_RHEL6;X64;DEBUG;TRACE
-
-
- OS_LINUX;ARM;DEBUG;TRACE
-