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 @@ - - + +