private void generateServerSideConsoleProjectCode(DevelopmentInstallation installation, ServerSideConsoleProject project) { var projectGeneratedCodeFolderPath = EwlStatics.CombinePaths(installation.GeneralLogic.Path, project.Name, "Generated Code"); Directory.CreateDirectory(projectGeneratedCodeFolderPath); var isuFilePath = EwlStatics.CombinePaths(projectGeneratedCodeFolderPath, "ISU.cs"); IoMethods.DeleteFile(isuFilePath); using (TextWriter writer = new StreamWriter(isuFilePath)) { writer.WriteLine("using System;"); writer.WriteLine("using System.Collections.Generic;"); writer.WriteLine("using System.Collections.Immutable;"); writer.WriteLine("using System.IO;"); writer.WriteLine("using System.Reflection;"); writer.WriteLine("using System.Runtime.InteropServices;"); writer.WriteLine("using System.Threading;"); writer.WriteLine("using EnterpriseWebLibrary;"); writer.WriteLine("using EnterpriseWebLibrary.DataAccess;"); writer.WriteLine(); writeAssemblyInfo(writer, installation, project.Name); writer.WriteLine(); writer.WriteLine("namespace " + project.NamespaceAndAssemblyName + " {"); writer.WriteLine("internal static partial class Program {"); writer.WriteLine("[ MTAThread ]"); writer.WriteLine("private static int Main( string[] args ) {"); writer.WriteLine("SystemInitializer globalInitializer = null;"); writer.WriteLine("initGlobalInitializer( ref globalInitializer );"); writer.WriteLine("var dataAccessState = new ThreadLocal<DataAccessState>( () => new DataAccessState() );"); writer.WriteLine( "GlobalInitializationOps.InitStatics( globalInitializer, \"" + project.Name + "\", false, mainDataAccessStateGetter: () => dataAccessState.Value );"); writer.WriteLine("try {"); writer.WriteLine("return GlobalInitializationOps.ExecuteAppWithStandardExceptionHandling( () => {"); // See https://stackoverflow.com/a/44135529/35349. writer.WriteLine("Console.SetIn( new StreamReader( Console.OpenStandardInput(), Console.InputEncoding, false, 4096 ) );"); writer.WriteLine("ewlMain( Newtonsoft.Json.JsonConvert.DeserializeObject<ImmutableArray<string>>( Console.ReadLine() ) );"); writer.WriteLine("} );"); writer.WriteLine("}"); writer.WriteLine("finally {"); writer.WriteLine("GlobalInitializationOps.CleanUpStatics();"); writer.WriteLine("}"); writer.WriteLine("}"); writer.WriteLine("static partial void initGlobalInitializer( ref SystemInitializer globalInitializer );"); writer.WriteLine("static partial void ewlMain( IReadOnlyList<string> arguments );"); writer.WriteLine("}"); writer.WriteLine("}"); } }
private void generateServerSideConsoleProjectCode( DevelopmentInstallation installation, ServerSideConsoleProject project ) { var projectGeneratedCodeFolderPath = EwlStatics.CombinePaths( installation.GeneralLogic.Path, project.Name, "Generated Code" ); Directory.CreateDirectory( projectGeneratedCodeFolderPath ); var isuFilePath = EwlStatics.CombinePaths( projectGeneratedCodeFolderPath, "ISU.cs" ); IoMethods.DeleteFile( isuFilePath ); using( TextWriter writer = new StreamWriter( isuFilePath ) ) { writer.WriteLine( "using System;" ); writer.WriteLine( "using System.Reflection;" ); writer.WriteLine( "using System.Runtime.InteropServices;" ); writer.WriteLine( "using System.Threading;" ); writer.WriteLine( "using EnterpriseWebLibrary;" ); writer.WriteLine( "using EnterpriseWebLibrary.DataAccess;" ); writer.WriteLine(); writeAssemblyInfo( writer, installation, project.Name ); writer.WriteLine(); writer.WriteLine( "namespace " + project.NamespaceAndAssemblyName + " {" ); writer.WriteLine( "internal static partial class Program {" ); writer.WriteLine( "[ MTAThread ]" ); writer.WriteLine( "private static int Main( string[] args ) {" ); writer.WriteLine( "SystemInitializer globalInitializer = null;" ); writer.WriteLine( "initGlobalInitializer( ref globalInitializer );" ); writer.WriteLine( "var dataAccessState = new ThreadLocal<DataAccessState>( () => new DataAccessState() );" ); writer.WriteLine( "GlobalInitializationOps.InitStatics( globalInitializer, \"" + project.Name + "\", false, mainDataAccessStateGetter: () => dataAccessState.Value );" ); writer.WriteLine( "try {" ); writer.WriteLine( "return GlobalInitializationOps.ExecuteAppWithStandardExceptionHandling( () => ewlMain( args ) );" ); writer.WriteLine( "}" ); writer.WriteLine( "finally {" ); writer.WriteLine( "GlobalInitializationOps.CleanUpStatics();" ); writer.WriteLine( "}" ); writer.WriteLine( "}" ); writer.WriteLine( "static partial void initGlobalInitializer( ref SystemInitializer globalInitializer );" ); writer.WriteLine( "static partial void ewlMain( string[] args );" ); writer.WriteLine( "}" ); writer.WriteLine( "}" ); } }
private void generateServerSideConsoleProjectCode(DevelopmentInstallation installation, ServerSideConsoleProject project) { var projectGeneratedCodeFolderPath = StandardLibraryMethods.CombinePaths(installation.GeneralLogic.Path, project.Name, "Generated Code"); Directory.CreateDirectory(projectGeneratedCodeFolderPath); var isuFilePath = StandardLibraryMethods.CombinePaths(projectGeneratedCodeFolderPath, "ISU.cs"); IoMethods.DeleteFile(isuFilePath); using (TextWriter writer = new StreamWriter(isuFilePath)) { writer.WriteLine("using System;"); writer.WriteLine("using System.Reflection;"); writer.WriteLine("using System.Runtime.InteropServices;"); writer.WriteLine("using System.Threading;"); writer.WriteLine("using RedStapler.StandardLibrary;"); writer.WriteLine("using RedStapler.StandardLibrary.DataAccess;"); writer.WriteLine(); writeAssemblyInfo(writer, installation, project.Name); writer.WriteLine(); writer.WriteLine("namespace " + project.NamespaceAndAssemblyName + " {"); writer.WriteLine("internal static partial class Program {"); writer.WriteLine("[ MTAThread ]"); writer.WriteLine("private static int Main( string[] args ) {"); writer.WriteLine("SystemInitializer globalInitializer = null;"); writer.WriteLine("initGlobalInitializer( ref globalInitializer );"); writer.WriteLine("var dataAccessState = new ThreadLocal<DataAccessState>( () => new DataAccessState() );"); writer.WriteLine("AppTools.Init( globalInitializer, \"" + project.Name + "\", false, mainDataAccessStateGetter: () => dataAccessState.Value );"); writer.WriteLine("try {"); writer.WriteLine("return AppTools.ExecuteAppWithStandardExceptionHandling( () => ewlMain( args ) );"); writer.WriteLine("}"); writer.WriteLine("finally {"); writer.WriteLine("AppTools.CleanUp();"); writer.WriteLine("}"); writer.WriteLine("}"); writer.WriteLine("static partial void initGlobalInitializer( ref SystemInitializer globalInitializer );"); writer.WriteLine("static partial void ewlMain( string[] args );"); writer.WriteLine("}"); writer.WriteLine("}"); } }