diff --git a/Directory.Build.targets b/Directory.Build.targets
new file mode 100644
index 0000000..fbd2893
--- /dev/null
+++ b/Directory.Build.targets
@@ -0,0 +1,7 @@
+
+
+
+ VNEXT
+
+
+
diff --git a/appveyor.yml b/appveyor.yml
index 6a8e6d1..85fb39f 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -34,16 +34,20 @@ after_build:
test_script:
# Runner for NUnit2
-- ps: nunit-console 'src/Test/winswTests/bin/Release/net40/winswTests.dll' 'src/Test/winswTests/bin/Release/net40/SharedDirectoryMapper.dll' 'src/Test/winswTests/bin/Release/net40/RunawayProcessKiller.dll'
+- ps: nunit-console 'src\Test\winswTests\bin\Release\net40\winswTests.dll' 'src\Test\winswTests\bin\Release\net40\SharedDirectoryMapper.dll' 'src\Test\winswTests\bin\Release\net40\RunawayProcessKiller.dll'
artifacts:
- - path: 'src/Core/ServiceWrapper/bin/Release/net20/WinSW.exe'
+ - path: 'src\Core\ServiceWrapper\bin\Release\net20\WinSW.exe'
name: WinSW.NET2.exe
- - path: 'src/Core/ServiceWrapper/bin/Release/net40/WinSW.exe'
+ - path: 'src\Core\ServiceWrapper\bin\Release\net40\WinSW.exe'
name: WinSW.NET4.exe
+ - path: 'src\Core\ServiceWrapper\bin\Release\net45\WinSW.exe'
+ name: WinSW.NET45.exe
+ - path: 'src\Core\ServiceWrapper\bin\Release\netcoreapp3.1\'
+ name: WinSW.NETCore
- path: 'WinSW.$(appveyor_build_version).nupkg'
name: WinSW.nupkg
- - path: 'examples/sample-allOptions.xml'
+ - path: 'examples\sample-allOptions.xml'
name: 'sample-allOptions.xml'
- - path: 'examples/sample-minimal.xml'
+ - path: 'examples\sample-minimal.xml'
name: 'sample-minimal.xml'
diff --git a/src/Core/ServiceWrapper/Main.cs b/src/Core/ServiceWrapper/Main.cs
index 93465fd..ec0fa74 100644
--- a/src/Core/ServiceWrapper/Main.cs
+++ b/src/Core/ServiceWrapper/Main.cs
@@ -32,7 +32,11 @@ namespace winsw
internal WinSWExtensionManager ExtensionManager { get; private set; }
- private static readonly ILog Log = LogManager.GetLogger("WinSW");
+ private static readonly ILog Log = LogManager.GetLogger(
+#if NETCOREAPP
+ Assembly.GetExecutingAssembly(),
+#endif
+ "WinSW");
private static readonly WrapperServiceEventLogProvider eventLogProvider = new WrapperServiceEventLogProvider();
///
@@ -827,7 +831,11 @@ namespace winsw
systemEventLogger.ActivateOptions();
appenders.Add(systemEventLogger);
- BasicConfigurator.Configure(appenders.ToArray());
+ BasicConfigurator.Configure(
+#if NETCOREAPP
+ LogManager.GetRepository(Assembly.GetExecutingAssembly()),
+#endif
+ appenders.ToArray());
}
private static string ReadPassword()
diff --git a/src/Core/ServiceWrapper/winsw.csproj b/src/Core/ServiceWrapper/winsw.csproj
index a28a710..80c8367 100644
--- a/src/Core/ServiceWrapper/winsw.csproj
+++ b/src/Core/ServiceWrapper/winsw.csproj
@@ -2,9 +2,8 @@
Exe
- net20;net40
-
-
+ net20;net40;net45;netcoreapp3.1
+
Windows Service Wrapper
Allows arbitrary process to run as a Windows service by wrapping it.
CloudBees, Inc.
@@ -16,13 +15,27 @@
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -35,19 +48,6 @@
-
-
- False
- .NET Framework 3.5 SP1 Client Profile
- false
-
-
- False
- .NET Framework 3.5 SP1
- true
-
-
-
@@ -55,20 +55,19 @@
-
-
-
- v2
-
-
-
-
- v4
-
-
-
+
-
+
+ v2
+
+
+
+ v4
+
+
+
+ v4.5
+
"$(OutDir)$(TargetFileName)"
diff --git a/src/Core/WinSWCore/DynamicProxy.cs b/src/Core/WinSWCore/DynamicProxy.cs
index dcda669..c706722 100644
--- a/src/Core/WinSWCore/DynamicProxy.cs
+++ b/src/Core/WinSWCore/DynamicProxy.cs
@@ -2,7 +2,6 @@
using System.Collections;
using System.Reflection;
using System.Reflection.Emit;
-using System.Threading;
namespace DynamicProxy
{
@@ -174,15 +173,18 @@ namespace DynamicProxy
Type objType = typeof(object);
Type handlerType = typeof(IProxyInvocationHandler);
- AppDomain domain = Thread.GetDomain();
AssemblyName assemblyName = new AssemblyName();
assemblyName.Name = ASSEMBLY_NAME;
assemblyName.Version = new Version(1, 0, 0, 0);
// create a new assembly for this proxy, one that isn't presisted on the file system
- AssemblyBuilder assemblyBuilder = domain.DefineDynamicAssembly(
- assemblyName, AssemblyBuilderAccess.Run);
- // assemblyName, AssemblyBuilderAccess.RunAndSave,"."); // to save it to the disk
+ AssemblyBuilder assemblyBuilder =
+#if VNEXT
+ AssemblyBuilder.DefineDynamicAssembly(
+#else
+ AppDomain.CurrentDomain.DefineDynamicAssembly(
+#endif
+ assemblyName, AssemblyBuilderAccess.Run);
// create a new module for this proxy
ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule(MODULE_NAME);
@@ -206,7 +208,7 @@ namespace DynamicProxy
ConstructorBuilder delegateConstructor = typeBuilder.DefineConstructor(
MethodAttributes.Public, CallingConventions.Standard, new Type[] { handlerType });
- #region( "Constructor IL Code" )
+#region( "Constructor IL Code" )
ILGenerator constructorIL = delegateConstructor.GetILGenerator();
// Load "this"
@@ -221,7 +223,7 @@ namespace DynamicProxy
constructorIL.Emit(OpCodes.Call, superConstructor);
// Constructor return
constructorIL.Emit(OpCodes.Ret);
- #endregion
+#endregion
// for every method that the interfaces define, build a corresponding
// method in the dynamic type that calls the handlers invoke method.
@@ -270,7 +272,7 @@ namespace DynamicProxy
CallingConventions.Standard,
methodInfo.ReturnType, methodParameters);
- #region( "Handler Method IL Code" )
+#region( "Handler Method IL Code" )
ILGenerator methodIL = methodBuilder.GetILGenerator();
// load "this"
@@ -341,7 +343,7 @@ namespace DynamicProxy
// Return
methodIL.Emit(OpCodes.Ret);
- #endregion
+#endregion
}
// for (int i = 0; i < props.Length; i++)
diff --git a/src/Core/WinSWCore/LogAppenders.cs b/src/Core/WinSWCore/LogAppenders.cs
index 7df463f..d76e349 100644
--- a/src/Core/WinSWCore/LogAppenders.cs
+++ b/src/Core/WinSWCore/LogAppenders.cs
@@ -1,8 +1,13 @@
using System;
using System.Diagnostics;
+#if VNEXT
+using System.IO.Compression;
+#endif
using System.IO;
using System.Threading;
+#if !VNEXT
using ICSharpCode.SharpZipLib.Zip;
+#endif
namespace winsw
{
@@ -522,9 +527,34 @@ namespace winsw
}
}
+#if VNEXT
+ private void ZipTheFile(string sourceFilePath, string zipDirectory, string zipFilePattern, string baseZipFileName)
+ {
+ string zipFilePath = Path.Combine(zipDirectory, $"{baseZipFileName}.{zipFilePattern}.zip");
+ ZipArchive zipArchive = null;
+ try
+ {
+ zipArchive = ZipFile.Open(zipFilePath, ZipArchiveMode.Update);
+
+ string fileName = Path.GetFileName(sourceFilePath);
+ if (zipArchive.GetEntry(fileName) is null)
+ {
+ zipArchive.CreateEntryFromFile(sourceFilePath, fileName);
+ }
+ }
+ catch (Exception e)
+ {
+ EventLogger.LogEvent($"Failed to Zip the File {sourceFilePath}. Error {e.Message}");
+ }
+ finally
+ {
+ zipArchive?.Dispose();
+ }
+ }
+#else
private void ZipTheFile(string filename, string zipPath, string zipFilePattern, string baseZipfilename)
{
- var zipfilename = Path.Combine(zipPath, string.Format("{0}.{1}.zip", baseZipfilename, zipFilePattern));
+ var zipfilename = Path.Combine(zipPath, $"{baseZipfilename}.{zipFilePattern}.zip");
ZipFile zipFile = null;
bool commited = false;
try
@@ -559,10 +589,7 @@ namespace winsw
}
finally
{
- if (zipFile != null)
- {
- zipFile.Close();
- }
+ zipFile?.Close();
}
}
@@ -575,6 +602,7 @@ namespace winsw
throw new ApplicationException(em);
}
}
+#endif
private double SetupRollTimer()
{
diff --git a/src/Core/WinSWCore/WinSWCore.csproj b/src/Core/WinSWCore/WinSWCore.csproj
index 7836980..415ebd7 100644
--- a/src/Core/WinSWCore/WinSWCore.csproj
+++ b/src/Core/WinSWCore/WinSWCore.csproj
@@ -1,21 +1,32 @@
- net20;net40
-
-
+ net20;net40;net45;netcoreapp3.1
+
winsw
true
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Plugins/RunawayProcessKiller/RunawayProcessKiller.csproj b/src/Plugins/RunawayProcessKiller/RunawayProcessKiller.csproj
index d899262..34d777e 100644
--- a/src/Plugins/RunawayProcessKiller/RunawayProcessKiller.csproj
+++ b/src/Plugins/RunawayProcessKiller/RunawayProcessKiller.csproj
@@ -1,15 +1,17 @@
- net20;net40
-
-
+ net20;net40;net45;netcoreapp3.1
+
winsw.Plugins.RunawayProcessKiller
true
+
+
+
diff --git a/src/Plugins/SharedDirectoryMapper/SharedDirectoryMapper.csproj b/src/Plugins/SharedDirectoryMapper/SharedDirectoryMapper.csproj
index c96d452..3219d86 100644
--- a/src/Plugins/SharedDirectoryMapper/SharedDirectoryMapper.csproj
+++ b/src/Plugins/SharedDirectoryMapper/SharedDirectoryMapper.csproj
@@ -1,15 +1,17 @@
- net20;net40
-
-
+ net20;net40;net45;netcoreapp3.1
+
winsw.Plugins.SharedDirectoryMapper
true
+
+
+
diff --git a/src/Test/winswTests/winswTests.csproj b/src/Test/winswTests/winswTests.csproj
index 8d87847..02f54cc 100644
--- a/src/Test/winswTests/winswTests.csproj
+++ b/src/Test/winswTests/winswTests.csproj
@@ -1,9 +1,8 @@
- net20;net40
-
-
+ net20;net40;net45;netcoreapp3.1
+
winswTests
@@ -11,12 +10,12 @@
-
-
+
+