Example #1
0
        // unless user specifies which project to deploy, targetPath == repositoryRoot
        private ISiteBuilder ResolveProject(string repositoryRoot, string targetPath, IDeploymentSettingsManager perDeploymentSettings, IFileFinder fileFinder, bool tryWebSiteProject, SearchOption searchOption = SearchOption.AllDirectories, bool specificConfiguration = true)
        {
            if (DeploymentHelper.IsMsBuildProject(targetPath))
            {
                // needs to check for project file existence
                if (!File.Exists(targetPath))
                {
                    throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture,
                                                                      Resources.Error_ProjectDoesNotExist,
                                                                      targetPath));
                }
                return(DetermineProject(repositoryRoot, targetPath, perDeploymentSettings, fileFinder));
            }

            // Check for loose projects
            var projects = DeploymentHelper.GetMsBuildProjects(targetPath, fileFinder, searchOption);

            if (projects.Count > 1)
            {
                // Can't determine which project to build
                throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture,
                                                                  Resources.Error_AmbiguousProjects,
                                                                  String.Join(", ", projects)));
            }
            else if (projects.Count == 1)
            {
                return(DetermineProject(repositoryRoot, projects[0], perDeploymentSettings, fileFinder));
            }

            // Check for ASP.NET Core project without VS solution or project
            // for ASP.NET Core project which only has project.json, but not xproj ie: dotnet preview2 cli project
            string projectJson;

            if (AspNetCoreHelper.TryAspNetCoreWebProject(targetPath, fileFinder, out projectJson))
            {
                return(new AspNetCoreBuilder(_environment,
                                             perDeploymentSettings,
                                             _propertyProvider,
                                             repositoryRoot,
                                             projectJson,
                                             null));
            }

            if (tryWebSiteProject)
            {
                // Website projects need a solution to build so look for one in the repository path
                // that has this website in it.
                var solutions = VsHelper.FindContainingSolutions(repositoryRoot, targetPath, fileFinder);

                // More than one solution is ambiguous
                if (solutions.Count > 1)
                {
                    ThrowAmbiguousSolutionsError(solutions);
                }
                else if (solutions.Count == 1)
                {
                    // Unambiguously pick the root
                    return(new WebSiteBuilder(_environment,
                                              perDeploymentSettings,
                                              _propertyProvider,
                                              repositoryRoot,
                                              targetPath,
                                              solutions[0].Path));
                }
            }

            // This should only ever happen if the user specifies an invalid directory.
            // The other case where the method is called we always resolve the path so it's a non issue there.
            if (specificConfiguration && !Directory.Exists(targetPath))
            {
                throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture,
                                                                  Resources.Error_ProjectDoesNotExist,
                                                                  targetPath));
            }

            // If there's none then use the basic builder (the site is xcopy deployable)
            return(ResolveNonAspProject(repositoryRoot, targetPath, perDeploymentSettings));
        }
Example #2
0
        // used when we have a project file
        private ISiteBuilder DetermineProject(string repositoryRoot, string targetPath, IDeploymentSettingsManager perDeploymentSettings, IFileFinder fileFinder)
        {
            var    solution         = VsHelper.FindContainingSolution(repositoryRoot, targetPath, fileFinder);
            string solutionPath     = solution?.Path;
            var    projectTypeGuids = VsHelper.GetProjectTypeGuids(targetPath);

            if (VsHelper.IsWap(projectTypeGuids))
            {
                return(new WapBuilder(_environment,
                                      perDeploymentSettings,
                                      _propertyProvider,
                                      repositoryRoot,
                                      targetPath,
                                      solutionPath));
            }
            else if (AspNetCoreHelper.IsDotnetCoreFromProjectFile(targetPath, projectTypeGuids))
            {
                return(new AspNetCoreBuilder(_environment,
                                             perDeploymentSettings,
                                             _propertyProvider,
                                             repositoryRoot,
                                             targetPath,
                                             solutionPath));
            }
            else if (VsHelper.IsExecutableProject(targetPath))
            {
                // This is a console app
                if (VsHelper.IsDotNetCore3(targetPath))
                {
                    return(new DotNetCoreConsoleBuilder(_environment,
                                                        perDeploymentSettings,
                                                        _propertyProvider,
                                                        repositoryRoot,
                                                        targetPath,
                                                        solutionPath));
                }
                return(new DotNetConsoleBuilder(_environment,
                                                perDeploymentSettings,
                                                _propertyProvider,
                                                repositoryRoot,
                                                targetPath,
                                                solutionPath));
            }
            else if (FunctionAppHelper.LooksLikeFunctionApp())
            {
                if (FunctionAppHelper.IsCSharpFunctionFromProjectFile(targetPath))
                {
                    if (VsHelper.IsDotNetCore3(targetPath))
                    {
                        return(new FunctionDotNetCoreBuilder(_environment,
                                                             perDeploymentSettings,
                                                             _propertyProvider,
                                                             repositoryRoot,
                                                             targetPath,
                                                             solutionPath));
                    }
                    return(new FunctionMsbuildBuilder(_environment,
                                                      perDeploymentSettings,
                                                      _propertyProvider,
                                                      repositoryRoot,
                                                      targetPath,
                                                      solutionPath));
                }
                // csx or node function with extensions.csproj
                return(new FunctionBasicBuilder(_environment,
                                                perDeploymentSettings,
                                                _propertyProvider,
                                                repositoryRoot,
                                                Path.GetDirectoryName(targetPath)));
            }

            throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture,
                                                              Resources.Error_ProjectNotDeployable,
                                                              targetPath));
        }
Example #3
0
        public async Task <IActionResult> Comment(CommentViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(Json(new
                {
                    Error = "提交的信息有误,请检查后再试"
                }));
            }
            var validateCode = _session.GetString("ValidateCode");

            if (string.IsNullOrEmpty(validateCode))
            {
                return(Json(new
                {
                    Error = "验证码过期,请刷新重试!",
                }));
            }
            _session.Remove("ValidateCode");
            if (!string.Equals(validateCode, model.Captcha, StringComparison.OrdinalIgnoreCase))
            {
                return(Json(new
                {
                    Error = "提交的验证码错误!",
                }));
            }
            var replyToCommentId  = Request.Form["hiddenReplyTo"].ToString();
            var commentRepository = _unitOfWork.GetRepository <Comment>();
            var postRepository    = _unitOfWork.GetRepository <Post>();
            var post = await postRepository.GetFirstOrDefaultAsync(predicate : m => m.Id == model.PostId, disableTracking : false);

            var commentItem = new CommentItem()
            {
                PostId = model.PostId, DisplayName = model.UserName, Email = model.Email, Content = model.Content
            };

            if (!string.IsNullOrEmpty(replyToCommentId))
            {
                commentItem.ParentId = replyToCommentId;
            }
            var newItem = new Comment()
            {
                Content     = commentItem.Content,
                CreateDate  = DateTime.UtcNow,
                DisplayName = commentItem.DisplayName,
                Ip          = AspNetCoreHelper.GetRequestIP(),
                Posts       = post,
                Email       = commentItem.Email,
                IsApproved  = true,
                ParentId    = commentItem.ParentId,
            };
            await commentRepository.InsertAsync(newItem);

            await _unitOfWork.SaveChangesAsync();

            commentItem.Id          = newItem.Id;
            commentItem.HasChildren = false;
            commentItem.IsApproved  = true;
            commentItem.DateCreated = newItem.CreateDate.ToString("yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture);

            var result = await _viewRenderService.RenderToStringAsync(this, "_Comment", commentItem);

            return(Json(new
            {
                Error = "",
                CommentId = commentItem.Id,
                CommentCount = (post.Comments.Count + 1),
                Result = result,
                Content = model.Content
            }));
        }