static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            bool multiproject = MessageBox.Show(
                "Multi-Project?", "Project Type", MessageBoxButtons.YesNo) == DialogResult.Yes;
            bool webApiSharedPortable = false;

            if (multiproject)
            {
                webApiSharedPortable = MessageBox.Show(
                    "Web API Shared Portable?", "Shared Portable Exception", MessageBoxButtons.YesNo) == DialogResult.Yes;
            }

            var result = DialogResult.OK;

            while (result != DialogResult.Cancel)
            {
                var dialog = new EntitiesSelectionDialog(multiproject, webApiSharedPortable);
                result = dialog.ShowDialog();
                if (result == DialogResult.Cancel)
                {
                    continue;
                }
                string entitiesSelection = dialog.EntitiesSelection.ToString();
                MessageBox.Show(entitiesSelection, "Entities Selection");
            }
        }
        // Select entities template
        public static void SelectEntitiesTemplate(bool multiproject, string templateName)
        {
            // Disallow shared portable entities for WebApi due to Json.net compat issues:
            // Error: Method not found (Newtonsoft.Json.Serialization.DefaultContractResolver SET_IgnoreSerializableAttribute)
            bool webApiSharedPortable = templateName.Equals(Constants.ProjectTemplates.TrackableWebApi, StringComparison.InvariantCultureIgnoreCase) ||
                                        templateName.Equals(Constants.ProjectTemplates.TrackableWebApiPatterns, StringComparison.InvariantCultureIgnoreCase);

            // Prompt user for entities template
            var dialog = new EntitiesSelectionDialog(multiproject, webApiSharedPortable);

            if (dialog.ShowDialog() == DialogResult.Cancel)
            {
                throw new WizardBackoutException();
            }

            // Place "$entitiestempaltename$ in entities root dictionary
            string entitiesTemplateName = GetEntitiesTemplateName(dialog.EntitiesSelection);

            RootDictionary[Constants.DictionaryEntries.EntitiesTemplateName] = entitiesTemplateName;

            // Place $cliententitiestemplate$ and $serviceentitiestemplate$ in root dictionary
            string[] entitiesTemplateNames = entitiesTemplateName.Split('|');
            RootWizard.RootDictionary[Constants.DictionaryEntries.ClientEntitiesTemplate] = entitiesTemplateNames[0];
            if (entitiesTemplateNames.Length == 2)
            {
                RootWizard.RootDictionary[Constants.DictionaryEntries.ServiceEntitiesTemplate] = entitiesTemplateNames[1];
            }
            else
            {
                RootWizard.RootDictionary[Constants.DictionaryEntries.ServiceEntitiesTemplate] = entitiesTemplateNames[0];
            }
        }