static void Main(string[] args)
        {
            var opts = new Options();
            CommandLine.Parser.Default.ParseArguments(args, opts);

            string tFileName = null;
            Action<string> writeLineHandler = null;

            switch (opts.Transform.ToLower())
            {
                case "mirtarbase":
                    tFileName = "mirtarbase.xslt";
                    writeLineHandler = Program.MirtarbaseWriteLineHandler;
                    break;

                default:
                    throw new NotSupportedException(string.Format(
                        "Unknown XSLT transform '{0}'.",
                        opts.Transform
                    ));
            }

            #if DEBUG
            var t = new XslCompiledTransform(true);
            #else
            var t = new XslCompiledTransform(false);
            #endif
            using (var tStream = ResourceHelper.GetAssemblyManifestResourceStream(
                typeof(Program),
                string.Format("XSLT.{0}", tFileName)))
            using (var tXr = XmlReader.Create(tStream))
            {
                t.Load(tXr);
            }

            using (var srcStream = new FileStream(opts.Input, FileMode.Open, FileAccess.Read, FileShare.Read))
            using (var srcXr = XmlReader.Create(srcStream))
            {
                t.Transform(
                    srcXr,
                    new XsltArgumentList(),
                    new MyTextWriter(
                        delegate(string line)
                        {
                            if (!line.StartsWith("#"))
                            {
                                writeLineHandler(line);
                            }
                        }));
            }
        }
        static void Main(string[] args)
        {
            // Application.EnableVisualStyles();
            // Application.SetCompatibleTextRenderingDefault(false);
            // Application.Run(new Form1());

            // Find out current working directory
            // var dir = Directory.GetCurrentDirectory();
            // Console.WriteLine(dir);

            var opts = new Options();
            CommandLine.Parser.Default.ParseArguments(args, opts);

            var connStrBldr = new SQLiteConnectionStringBuilder();
            connStrBldr.DataSource = opts.Database;
            connStrBldr.Version = 3;

            using (var srcStream = new FileStream(opts.Input, FileMode.Open, FileAccess.Read, FileShare.Read))
            using (var src = new StreamReader(srcStream))
            using (var conn = new SQLiteConnection(connStrBldr.ConnectionString))
            {
                conn.Open();

                using (var tran = conn.BeginTransaction())
                {
                    try
                    {
                        var engine = new GtfUploader(src, tran);
                        engine.Run();

                        tran.Commit();
                    }
                    catch (Exception ex)
                    {
                        tran.Rollback();

                        Console.WriteLine(ex.ToString());
                    }
                }
            }

            #if DEBUG
            Console.WriteLine("Press any key ...");
            Console.ReadKey();
            #endif
        }