public void Generate()
        {
            Directory.CreateDirectory(Path.GetDirectoryName(DtProjFilePath));
            ProjectWrapper.SaveTo(IspacFilePath);

            // Extract (from the .ispac) and create the basic files we need.
            ExtractRequiredFiles();
            GenerateDtProj();

            // Create other files required to prevent SSIS from thinking the whole project has been modified.
            GenerateDatabase();
            GenerateUser();

            // Create the obj files.
            string dtProjDirectory = Path.GetDirectoryName(DtProjFilePath);
            string objDirectory    = Path.Combine(dtProjDirectory, "obj", "Development");

            Directory.CreateDirectory(objDirectory);

            foreach (string file in Directory.GetFiles(dtProjDirectory))
            {
                string extension = Path.GetExtension(file);

                if (extension == ".conmgr" || extension == ".dtproj" || extension == ".dtsx" || extension == ".params")
                {
                    File.Copy(file, Path.Combine(objDirectory, Path.GetFileName(file)));
                }
            }

            GenerateBuildLog();

            // Copy .ispac to bin directory.
            string binDirectory             = Path.Combine(dtProjDirectory, "bin", "Development");
            string ispacDestinationFilePath = Path.Combine(binDirectory, $"{Name}.ispac");

            Directory.CreateDirectory(binDirectory);
            File.Copy(IspacFilePath, ispacDestinationFilePath);

            // Touch last modified time in order to make the .ispac more recent than everything else.
            File.SetLastWriteTime(ispacDestinationFilePath, DateTime.Now);
        }