Beispiel #1
0
        /// <summary>
        /// Adds the project.
        /// </summary>
        /// <param name="path">The path.</param>
        /// <param name="projectInfo">The project information.</param>
        internal void AddProject(
            string path,
            ProjectTemplateInfo projectInfo)
        {
            string message = $"ProjectsService::AddProjectIf project {projectInfo.Name}";

            TraceService.WriteLine(message);

            this.SettingsService.ActiveProject = projectInfo.FriendlyName;

            this.TryToAddProject(path, projectInfo);

            //// add reference to core project

            IProjectService coreProjectService = this.visualStudioService.CoreProjectService;

            IProjectService projectService = this.visualStudioService.GetProjectServiceBySuffix(projectInfo.ProjectSuffix);

            if (coreProjectService != null &&
                projectService != null &&
                projectInfo.ReferenceCoreProject)
            {
                if (projectService.Name != coreProjectService.Name)
                {
                    projectService.AddProjectReference(coreProjectService);
                }
                else
                {
                    TraceService.WriteError("Attemped to reference project to its self project=" + projectService.Name);
                }
            }

            //// now add references to xamarin forms if required.

            if (projectInfo.ReferenceXamarinFormsProject)
            {
                IProjectService formsProjectService = this.visualStudioService.XamarinFormsProjectService;

                if (formsProjectService != null &&
                    projectService != null)
                {
                    if (projectService.Name != formsProjectService.Name)
                    {
                        projectService.AddProjectReference(formsProjectService);
                    }
                    else
                    {
                        TraceService.WriteError("Attemped to reference project to its self project=" + projectService.Name);
                    }
                }
            }

            //// now add reference to the plaform project from the test platform project

            if (projectInfo.ReferencePlatformProject)
            {
                //// TODO : tidy this up a little bit!
                IProjectService platformProjectService = this.visualStudioService.GetProjectServiceBySuffix(
                    projectInfo.ProjectSuffix.Replace(".Tests", string.Empty));

                if (platformProjectService != null &&
                    projectService != null)
                {
                    //// for some reason cant add project reference to windows store project !!
                    //// as no one is developing mvvmcross windows store apps dont worry about it :-)
                    try
                    {
                        projectService.AddProjectReference(platformProjectService);
                    }
                    catch (Exception exception)
                    {
                        TraceService.WriteError("Unable to add project reference to " + platformProjectService.Name + " exception=" + exception.Message);
                    }
                }
            }

            if (projectInfo.ItemTemplates != null &&
                projectInfo.ItemTemplates.Any() &&
                projectService != null)
            {
                foreach (TextTemplateInfo textTemplateInfo in projectInfo.ItemTemplates)
                {
                    textTemplateInfo.Tokens = this.tokensTranslator.Translate(projectService);
                }

                this.textTemplatingService.AddTextTemplates(
                    "Adding items to project " + projectService.Name,
                    projectInfo.ItemTemplates);
            }
        }