public void Compile([Option("config", new[] { 'c' })][FilePathExists] string configPath) { var configs = YamlHelper.ReadFile <AppConfig[]>(configPath); foreach (var config in configs) { var includeFiles = GlobFiles(config.Includes); foreach (var target in config.CompileTargets ?? throw new NullReferenceException(nameof(config.CompileTargets))) { try { var input = target.Input ?? throw new NullReferenceException(nameof(target.Input)); var output = target.Output ?? throw new NullReferenceException(nameof(target.Output)); // 読み込み var(rootDefinition, includedDefinitions) = DefinitionLoader.Load(input, includeFiles); // 出力先フォルダが存在しない場合は作成する CreateParentDirectory(output); // 書き込み using var writer = new StreamWriter(output, false, new UTF8Encoding(false)); var codeGenerator = new CodeGenerator(rootDefinition, includedDefinitions); writer.Write(codeGenerator.Generate()); } catch (Exception e) { _logger.Error(e); var sb = new StringBuilder(); sb.AppendLine($"input: {target.Input}"); sb.AppendLine($"output: {target.Output}"); _logger.Error(sb.ToString()); throw; } } } }