예제 #1
0
        private static int Main(string[] args)
        {
            if (args == null || args.Length != 1)
            {
                Console.WriteLine("Invalid argument. A signle argument is required, which must be the PetaPoco directory.");
                return(9);
            }

            var filePath         = Path.GetFullPath(args[0]);
            var databaseFilePath = Path.Combine(filePath, "Database.cs");

            if (!File.Exists(databaseFilePath))
            {
                Console.WriteLine($"PetaPoco not found at `${databaseFilePath}`.");
                return(9);
            }

            var files = Directory.GetFiles(filePath, "*.cs", SearchOption.AllDirectories)
                        .Where(f => f.IndexOf("AssemblyInfo.cs", StringComparison.OrdinalIgnoreCase) < 0)
                        .ToArray();

            var parsedFiles = files
                              .Select(f => CsFile.Parse(File.ReadAllText(f)))
                              .ToList();

            var builder = new StringBuilder();

            builder.Append(@"// <copyright file=""ColumnAttribute.cs"" company=""PetaPoco - CollaboratingPlatypus"">
//      Apache License, Version 2.0 https://github.com/CollaboratingPlatypus/PetaPoco/blob/master/LICENSE.txt
// </copyright>
// <author>PetaPoco - CollaboratingPlatypus</author>
// <date>")
            .Append(DateTime.Now.ToString("yyyy/MM/dd"))
            .AppendLine(@"</date>

// --------------------------WARNING--------------------------------
// -----------------------------------------------------------------
// This file was built by merging separate C# source files into one.
// DO NOT EDIT THIS FILE. Any edits will be overwritten when the
// nuget package is updated or reinstalled. If changes are required
// extend the Database class and place in a separate file.
// -----------------------------------------------------------------
// --------------------------WARNING--------------------------------

");

            var usings = parsedFiles
                         .SelectMany(pf => pf.Usings)
                         .Where(u => u.IndexOf("PetaPoco", StringComparison.OrdinalIgnoreCase) < 0)
                         .Distinct(StringComparer.Ordinal)
                         .OrderBy(s => s)
                         .ToList();

            usings.ForEach(u => builder.AppendLine(u));

            builder.AppendLine(@"
namespace PetaPoco
{
#pragma warning disable 1066,1570,1573,1591");

            parsedFiles.ForEach(p => builder.AppendLine(p.CodeBlock));
            builder.Append(@"#pragma warning restore 1066,1570,1573,1591
}");

            File.WriteAllText(Path.Combine(filePath, "..\\", "Output", "PetaPoco.cs"), builder.ToString());

            return(0);
        }