// 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)); }
// 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)); }
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 })); }