public void LoadDefaultCSharpFromEmbedded(CLogConfigurationFile configFile) { Assembly clogUtilsAssembly = typeof(CLogTypeEncoder).Assembly; string assemblyName = clogUtilsAssembly.GetName().Name; using (Stream embeddedStream = clogUtilsAssembly.GetManifestResourceStream($"{assemblyName}.defaults.clog.cs")) using (StreamReader reader = new StreamReader(embeddedStream)) { string sourceCode = reader.ReadToEnd(); _traceEmittorX.SetSourceCode(sourceCode); } }
/// <summary> /// Based on the config files 'mark' bit, update type encoders to persist their usage metrics on save /// </summary> /// <param name="ret"></param> private static void RefreshTypeEncodersMarkBit(CLogConfigurationFile ret, bool markBit) { ret.MarkPhase = markBit; foreach (var t in ret.TypeEncoders.FlattendTypeEncoder) { t.MarkPhase = markBit; } foreach (var config in ret.ChainedConfigurations) { RefreshTypeEncodersMarkBit(config, markBit); } }
public void LoadCustomCSharp(string customTypeClogCSharpFile, CLogConfigurationFile configFile) { if (!File.Exists(customTypeClogCSharpFile)) { CLogConsoleTrace.TraceLine(TraceType.Err, $"Custom C# file for custom decoder is missing. Please create the file, or remove its reference from the config file"); CLogConsoleTrace.TraceLine(TraceType.Err, $" Missing File: {customTypeClogCSharpFile}"); CLogConsoleTrace.TraceLine(TraceType.Err, $" Defined In Config File: {configFile.FilePath}"); throw new CLogEnterReadOnlyModeException("CustomCSharpFileMissing: " + customTypeClogCSharpFile, CLogHandledException.ExceptionType.UnableToOpenCustomDecoder, null); } string sourceCode = File.ReadAllText(customTypeClogCSharpFile); string sourceHash = Path.GetFileName(configFile.FilePath); _traceEmittorX.SetSourceCode(sourceCode); }
private static CLogConfigurationFile FromLoadedFile(string fileName, string json) { JsonSerializerSettings s = new JsonSerializerSettings(); s.Context = new StreamingContext(StreamingContextStates.Other, json); CLogConfigurationFile ret = JsonConvert.DeserializeObject <CLogConfigurationFile>(json, s); ret.FilePath = fileName; ret.ChainedConfigurations = new List <CLogConfigurationFile>(); if (!string.IsNullOrEmpty(ret.CustomTypeClogCSharpFile)) { if (ret.CustomTypeClogCSharpFile == EmbeddedDefaultName) { ret.TypeEncoders.LoadDefaultCSharpFromEmbedded(ret); } else { string cSharp = Path.GetDirectoryName(fileName); cSharp = Path.Combine(cSharp, ret.CustomTypeClogCSharpFile); ret.TypeEncoders.LoadCustomCSharp(cSharp, ret); } } // // Do sanity checks on the input configuration file - look for common (and easy) to make mistakes // HashSet <string> macros = new HashSet <string>(); foreach (var m in ret.SourceCodeMacros) { if (macros.Contains(m.MacroName)) { Console.WriteLine( $"Macro {m.MacroName} specified multiple times - each macro may only be specified once in the config file"); throw new CLogEnterReadOnlyModeException("MultipleMacrosWithSameName", CLogHandledException.ExceptionType.MultipleMacrosWithSameName, null); } macros.Add(m.MacroName); } foreach (string downstream in ret.ChainedConfigFiles) { if (downstream == EmbeddedDefaultName) { Assembly clogUtilsAssembly = typeof(CLogConfigurationFile).Assembly; string assemblyName = clogUtilsAssembly.GetName().Name; using (Stream embeddedStream = clogUtilsAssembly.GetManifestResourceStream($"{assemblyName}.defaults.clog_config")) using (StreamReader reader = new StreamReader(embeddedStream)) { string contents = reader.ReadToEnd(); var configFile = FromFileText(downstream, contents); ret.ChainedConfigurations.Add(configFile); } } else { string root = Path.GetDirectoryName(fileName); string toOpen = Path.Combine(root, downstream); if (!File.Exists(toOpen)) { Console.WriteLine($"Chained config file {toOpen} not found"); throw new CLogEnterReadOnlyModeException("ChainedConfigFileNotFound", CLogHandledException.ExceptionType.UnableToOpenChainedConfigFile, null); } var configFile = FromFile(toOpen); ret.ChainedConfigurations.Add(configFile); } } ret.InUseTypeEncoders = new CLogTypeEncoder(); RefreshTypeEncodersMarkBit(ret, ret.MarkPhase); return(ret); }