public void OnPreprocessBuild(BuildReport buildReport)
    {
        // NOTE:
        // Alert when the existing version is newr than build version.

        string filePath = Path.GetDirectoryName(buildReport.summary.outputPath) + "\\" + FileName;

        if (!File.Exists(filePath))
        {
            return;
        }

        TextFileIOResult result = TextFileReadWriter.ReadFromFile(filePath);

        if (result.success)
        {
            Version previousVersion = new Version(result.text);
            Version buildVersion    = new Version(PlayerSettings.bundleVersion);

            if (previousVersion > buildVersion)
            {
                bool ok = EditorUtility.DisplayDialog(typeof(VersionFileBuilder).Name,
                                                      "Existing" + FileName + " is newer than this build version.",
                                                      "Build",
                                                      "Cancel");
                if (!ok)
                {
                    throw new BuildFailedException("This build was cancelled in " + typeof(VersionFileBuilder).Name);
                }
            }
        }
    }
    public void OnPostprocessBuild(BuildReport buildReport)
    {
        // NOTE:
        // BuildReport sometime gets Unknown even if Succeeded.
        // in Unity ver.2018/2019.

        if (buildReport.summary.result == (BuildResult.Cancelled | BuildResult.Failed))
        {
            return;
        }

        string filePath = Path.GetDirectoryName(buildReport.summary.outputPath) + "\\" + FileName;

        string version = new Version(PlayerSettings.bundleVersion).ToString();

        TextFileIOResult result = TextFileReadWriter.WriteToFile(filePath, version);

        if (!result.success)
        {
            EditorUtility.DisplayDialog(typeof(VersionFileBuilder).Name,
                                        "Faild to write Version.txt", "OK");
        }
    }