/// <summary> /// 获取接口模板 /// </summary> /// <returns></returns> private string GetIServiceTxt(BuildDto buildDto) { bool isDto = false; foreach (var item in buildDto.fieldDtos) { if (item.IsSearch) { isDto = true; break; } } var usingDto = isDto && buildDto.areaName.ToUpperFirst() != "" ? "using DL.Domain.Dto.AdminDto." + buildDto.areaName.ToUpperFirst() + "ModelsDto;" : ""; var txt = ReadTemplate("IService.txt").Replace("{AreaName}", $"{buildDto.areaName.ToUpperFirst() ?? ""}") .Replace("{ModelName}", buildDto.modelName) .Replace("{UsingDto}", usingDto) .Replace("{DescName}", buildDto.descName); if (isDto) { txt = txt.Replace("{PageParm}", buildDto.modelName); } txt = txt.Replace("{PageParm}", ""); return(txt); }
public OperationResult Add(BuildDto model) { if (ExistBuildCode(model.dorm_core) == false) { return(new OperationResult(OperationResultType.Error, "名称重复!")); } Dormitory dorm = new Dormitory(); dorm.dorm_Code = model.dorm_core; dorm.dorm_Level = 1; dorm.dorm_ParentId = null; if (model.dorm_levels > 0) { dorm.dorm_State = "closed"; } else { dorm.dorm_State = "open"; } dorm = RecursionDormGeneral(dorm, model); try { this._dormRepository.Add(dorm); return(new OperationResult(OperationResultType.Success, "新增成功!", new DormitoryDto { id = dorm.Id, text = dorm.dorm_Code, level = dorm.dorm_Level, pid = dorm.dorm_ParentId, state = dorm.dorm_State })); } catch (Exception e) { return(new OperationResult(OperationResultType.Error, "新增保存失败!", e)); } }
/// <summary> /// 获取实体模板 /// </summary> /// <returns></returns> private string GetModelTxt(BuildDto buildDto) { var strbuilder = new StringBuilder(); //创建列 foreach (var item in buildDto.fieldDtos) { strbuilder.Append("\r"); strbuilder.AppendLine("\t\t/// <summary>"); strbuilder.AppendLine("\t\t///" + item.FieldDesc); strbuilder.AppendLine("\t\t/// </summary>"); strbuilder.Append("\t\t[SugarColumn(ColumnName = \"" + item.FieldName + "\""); if (item.IsKey != "") { strbuilder.Append(",IsPrimaryKey = true"); } if (item.IsIdentity != "") { strbuilder.Append(",IsIdentity = true"); } if (item.IsNullable != "") { strbuilder.Append(",IsNullable = true"); } strbuilder.Append(")]"); strbuilder.AppendLine("\r\n\t\tpublic " + item.FiledType + " " + item.FieldName.ToUpperFirst() + " { get; set; }"); } var txt = ReadTemplate("Model.txt").Replace("{AreaName}", $"{buildDto.areaName.ToUpperFirst() + "Models" ?? ""}") .Replace("{TableName}", buildDto.tableName) .Replace("{ModelName}", buildDto.modelName) .Replace("{Models}", strbuilder.ToString()) .Replace("{DescName}", buildDto.descName); return(txt); }
/// <summary> /// 获取实现模板 /// </summary> /// <returns></returns> private string GetDtoModelTxt(BuildDto buildDto) { var strbuilder = new StringBuilder(); var isSearch = false; var txt = string.Empty; //创建列 foreach (var item in buildDto.fieldDtos) { if (item.IsSearch) { strbuilder.AppendLine("\r\t\t/// <summary>"); strbuilder.AppendLine("\t\t///" + item.FieldDesc); strbuilder.Append("\t\t/// </summary>"); if (item.FiledType == "DateTime" || item.FiledType == "DateTime?") { strbuilder.AppendLine("\r\n\t\tpublic string " + item.FieldName.ToLowerFirst() + " { get; set; }"); } else { strbuilder.AppendLine("\r\t\tpublic " + item.FiledType + " " + item.FieldName.ToLowerFirst() + " { get; set; }"); } isSearch = true; } } if (isSearch) { txt = ReadTemplate("DtoModel.txt").Replace("{AreaName}", $"{buildDto.areaName.ToUpperFirst() + "Models" ?? ""}") .Replace("{ModelName}", buildDto.modelName) .Replace("{Models}", strbuilder.ToString()); } return(txt); }
private async Task PollBuildProgressAsync(string engineId, int minRevision, Action <ProgressData> progress, CancellationToken ct) { while (true) { ct.ThrowIfCancellationRequested(); string url = $"translation/builds/engine:{engineId}?minRevision={minRevision}"; HttpResponse response = await HttpClient.SendAsync(HttpRequestMethod.Get, url, null, null, ct); if (response.StatusCode == 200) { BuildDto buildDto = JsonConvert.DeserializeObject <BuildDto>(response.Content, SerializerSettings); progress(CreateProgressData(buildDto)); minRevision = buildDto.Revision + 1; } else if (response.StatusCode == 204) { continue; } else if (response.StatusCode == 404) { break; } else { throw new HttpException("Error getting build status.") { StatusCode = response.StatusCode }; } } }
/// <summary> /// Trigger a build /// </summary> /// <param name="build"></param> /// <returns></returns> private async Task TriggerBuild(BuildDto build) { Console.WriteLine($"Triggering Build: {build.name}"); var createdBuild = await PostBuild(build); while (createdBuild.status != "completed") { Thread.Sleep(5000); Console.WriteLine($"Triggered Build: {build.name} - Not Completed.. Waiting..."); createdBuild = await GetBuild(createdBuild.id); } if (createdBuild.result == "succeeded") { Console.WriteLine($"Triggered Build: {build.name} - succeeded"); buildOrder++; build.BuildSuccessOrder = buildOrder; } else { Console.WriteLine($"Triggered Build: {build.name} - failed"); counter++; build.BuildFailedCounter++; build.BuildSuccessOrder = 0; } }
public void CanConvertBuildCompletedEventToBuildDto() { //Arrange var mockAdoClient = new Mock <IAdoClient>(); var fakeBuild = new BuildDto() { Id = 1, Project = new ProjectDto() { Id = new System.Guid("3ededfb7-5b60-49d9-9c47-80bbf8f2dcb1") } }; var fakeBuildEvent = new BuildCompletedEvent() { EventType = BuildCompletedEvent.EventIdentifier, Resource = JsonDocument.Parse("{\"id\": 1}").RootElement, ResourceContainers = JsonDocument.Parse("{\"project\": {\"id\": \"3ededfb7-5b60-49d9-9c47-80bbf8f2dcb1\"}}").RootElement, }; mockAdoClient.Setup(m => m.GetBuild(It.IsAny <string>(), It.IsAny <int>(), It.IsAny <string>(), It.IsAny <CancellationToken>())).Returns(Task.FromResult(fakeBuild)); ITypeConverter <AdoEvent, AdoDto> sut = new AdoEventToAdoDtoConverter(mockAdoClient.Object); //Act var result = sut.Convert(fakeBuildEvent, null, null) as BuildDto; //Assert Assert.NotNull(sut); Assert.NotNull(result); Assert.Equal(result.Id, fakeBuildEvent.Resource?.GetProperty("id").GetInt32()); Assert.Equal(result.Project.Id, fakeBuildEvent.ResourceContainers?.GetProperty("project").GetProperty("id").GetGuid()); Mock.VerifyAll(mockAdoClient); }
public ResultHelper SetBuild(BuildDto buildDto) { try { build item = new build(); if (buildDto.SiteID == 0) { item.SiteID = null; } else { item.SiteID = buildDto.SiteID; } item.BuildID = buildDto.BuildID; item.CampusID = buildDto.CampusID; item.Gps = buildDto.Gps; item.Name = buildDto.Name; item.Adress = buildDto.Address; item.Properties = buildDto.Properties; using (UnitOfWork unitofWork = new UnitOfWork()) { unitofWork.GetRepository <build>().Update(item); unitofWork.saveChanges(); return(new ResultHelper(true, buildDto.BuildID, ResultHelper.SuccessMessage)); } } catch (Exception ex) { return(new ResultHelper(false, buildDto.BuildID, ResultHelper.UnSuccessMessage)); } }
public ActionResult Edit(BuildDto model) { ResultHelper result = JsonConvert.DeserializeObject <ResultHelper>(buildService.SetBuild(model)); ViewBag.Message = Helper.GetResultMessage(result.Result, result.ResultDescription); GetCampus(); GetSites(model.CampusID); return(View()); }
public List <BuildScoreDetailDto> CalulateScoreDetails(BuildDto build) { var metrics = this.metricRepository.GetAll().ToList(); var buildScoreDetails = metrics.Select(x => this.scoreService.CalculateScoreDetail(TypeAdapterHelper.Adapt <Build>(build), TypeAdapterHelper.Adapt <Metric>(x))).ToList(); return(TypeAdapterHelper.Adapt <List <BuildScoreDetailDto> >(buildScoreDetails)); }
public List <BuildDto> GetAllBuild() { try { using (UnitOfWork unitofWork = new UnitOfWork()) { List <BuildDto> list = new List <BuildDto>(); var buildList = from b in unitofWork.GetRepository <build>().Select(null, null) join c in unitofWork.GetRepository <campu>().Select(null, null) on b.CampusID equals c.CampusID join s in unitofWork.GetRepository <site>().Select(null, null) on b.SiteID equals s.SiteID into site from s in site.DefaultIfEmpty() select new { BID = b.BuildID, BName = b.Name, BAdress = b.Adress, BGps = b.Gps, BProperties = b.Properties, BCID = b.CampusID, CID = c.CampusID, CName = c.Name, CDesc = c.Description, COther = c.Other, SID = s == null ? 0 : s.SiteID, SName = s == null ? "(-)" : s.Name, SDesc = s == null ? "(-)" : s.Description, SGps = s == null ? "(-)" : s.Gps, }; foreach (var item in buildList) { BuildDto bDto = new BuildDto(); bDto.BuildID = item.BID; bDto.Name = item.BName; bDto.Address = item.BAdress; bDto.CampusID = item.BCID.Value; bDto.Properties = item.BProperties; bDto.CampusDto = new CampusDto(); bDto.CampusDto.CampusID = item.CID; bDto.CampusDto.Name = item.CName; bDto.CampusDto.Description = item.CDesc; bDto.CampusDto.Other = item.COther; bDto.SiteDto = new SiteDto(); bDto.SiteDto.SiteID = item.SID; bDto.SiteDto.Name = item.SName; bDto.SiteDto.Description = item.SDesc; bDto.SiteDto.Gps = item.SGps; list.Add(bDto); } return(list); } } catch (Exception ex) { return(new List <BuildDto>()); } }
public IAggregateRoot Convert(AdoDto source, IAggregateRoot destination, ResolutionContext context) { return(source switch { BuildDto build => _mapper.Map <IAggregateRoot>(build), ProjectDto project => _mapper.Map <IAggregateRoot>(project), ReleaseDto release => _mapper.Map <IAggregateRoot>(release), _ => null, });
public async Task TrainAsync(string projectId, Action <ProgressData> progress, CancellationToken ct) { EngineDto engineDto = await GetEngineAsync(projectId); BuildDto buildDto = await CreateBuildAsync(engineDto.Id); progress(CreateProgressData(buildDto)); await PollBuildProgressAsync(engineDto.Id, buildDto.Revision + 1, progress, ct); }
private static void ListenForTrainingStatus_NoErrors(Assert assert) { var httpClient = new MockHttpClient(); var engineDto = new EngineDto { Id = "engine1" }; httpClient.Requests.Add(new MockRequest { Method = HttpRequestMethod.Get, Url = "translation/engines/project:project1", ResponseText = JsonConvert.SerializeObject(engineDto, RestClientBase.SerializerSettings) }); var buildDto = new BuildDto { Id = "build1", StepCount = 10 }; httpClient.Requests.Add(new MockRequest { Method = HttpRequestMethod.Get, Url = "translation/builds/engine:engine1?minRevision=0", Action = (body, ct) => Delay(10, ct), ResponseText = JsonConvert.SerializeObject(buildDto, RestClientBase.SerializerSettings) }); for (int i = 0; i < 10; i++) { buildDto.CurrentStep++; buildDto.Revision++; httpClient.Requests.Add(new MockRequest { Method = HttpRequestMethod.Get, Url = string.Format("translation/builds/engine:engine1?minRevision={0}", buildDto.Revision), Action = (body, ct) => Delay(10, ct), ResponseText = JsonConvert.SerializeObject(buildDto, RestClientBase.SerializerSettings) }); } var engine = new TranslationEngine("http://localhost/", "project1", httpClient); Action done = assert.Async(); int expectedStep = -1; engine.ListenForTrainingStatus( progress => { expectedStep++; assert.Equal(progress.CurrentStep, expectedStep); }, success => { assert.Equal(expectedStep, 10); assert.Equal(success, true); done(); }); }
public void CanBeConstructed() { //Arrange BuildDto sut; //Act sut = new BuildDto(); //Assert Assert.NotNull(sut); }
public async Task <BuildDto> UpdateBuild(string projectIdentifier, BuildDto build, string organization = default, CancellationToken cancellationToken = default) { var request = new UpdateBuildRequest(organization ?? _options.Value.DefaultOrganization, projectIdentifier, build); request.Headers.Authorization = GetAuthZHeader(); var response = await SendAsync(request, cancellationToken); var buildDto = await response.Content.ReadFromJsonAsync <BuildDto>(null, cancellationToken); return(buildDto); }
public async Task <IActionResult> CreateAsync([FromBody] string engineId) { Build build = await _engineService.StartBuildAsync(EngineLocatorType.Id, engineId); if (build == null) { return(StatusCode(422)); } BuildDto dto = CreateDto(build); return(Created(dto.Href, dto)); }
public IHttpActionResult PostAdd(BuildDto model) { if (model == null) { return(BadRequest(ModelState)); } OperationResult result = this._dormService.Add(model); if (result.ResultType == OperationResultType.Success) { DormitoryDto dorm = (DormitoryDto)result.AppendData; return(CreatedAtRoute("DefaultApi", new { id = dorm.id }, dorm)); } return(BadRequest(ModelState)); }
public bool IsThere(BuildDto buildDto) { using (UnitOfWork unitofWork = new UnitOfWork()) { var item = unitofWork.GetRepository <build>().GetById(x => x.Name == buildDto.Name); if (item != null) { return(true); } else { return(false); } } }
public void CanBeSerialized() { //Arrange var sut = new BuildDto() { Id = 1, BuildNumber = "1234" }; //Act var payload = JsonSerializer.Serialize(sut, new JsonSerializerOptions { IgnoreNullValues = true }); //Assert Assert.NotNull(JsonDocument.Parse(payload)); }
public async Task <IActionResult> PutBuild(int id, BuildDto buildDto) { Build build = _mapper.Map <Build>(buildDto); if (id != build.Id) { return(BadRequest()); } var uid = int.Parse(HttpContext.User.Identity.Name); User user = await _context.FindAsync <User>(uid); User buildUser = await _context.FindAsync <User>(build.BuildPerson?.Id); if (user == null || buildUser == null) { return(BadRequest(new { message = "User not found" })); } build.BuildPerson = buildUser; build.UpdatePerson = user; _context.Entry(build).State = EntityState.Modified; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!BuildExists(id)) { return(NotFound()); } else { throw; } } return(NoContent()); }
/// <summary> /// Post Build /// </summary> /// <param name="build"></param> /// <returns></returns> public async Task <BuildDto> PostBuild(BuildDto build) { DefinitionRequestDto definitionRequestDto = new DefinitionRequestDto { Definition = build, SourceBranch = _optionsDto.SourceBranch }; string json = JsonConvert.SerializeObject(definitionRequestDto); // Setup resources string uri = $"{ _optionsDto.SourceUri }/_apis/build/builds?api-version=5.0"; // Post build var response = await _httpClient.PostAsync <BuildDto>(uri, json); //Return Repository List return(response); }
private async Task PollBuildProgressAsync(string locatorType, string locator, int minRevision, Action <ProgressStatus> progress, CancellationToken ct) { while (true) { ct.ThrowIfCancellationRequested(); string url = $"translation/builds/{locatorType}:{locator}?minRevision={minRevision}"; HttpResponse response = await HttpClient.SendAsync(HttpRequestMethod.Get, url, null, null, ct); if (response.StatusCode == 200) { BuildDto buildDto = JsonConvert.DeserializeObject <BuildDto>(response.Content, SerializerSettings); progress(CreateProgressStatus(buildDto)); locatorType = "id"; locator = buildDto.Id; if (buildDto.State == BuildStates.Completed || buildDto.State == BuildStates.Canceled) { break; } else if (buildDto.State == BuildStates.Faulted) { throw new InvalidOperationException("Error occurred during build: " + buildDto.Message); } minRevision = buildDto.Revision + 1; } else if (response.StatusCode == 204) { continue; } else if (response.StatusCode == 404) { break; } else { throw new HttpException("Error getting build status.") { StatusCode = response.StatusCode }; } } }
public BuildTile Convert(BuildDto buildDto, TestResults testResultsDto) { return(new BuildTile { Id = buildDto.Id, BuildReportUrl = buildDto.Links.Web.Href, RequestedByName = buildDto.RequestedFor.DisplayName, Status = string.IsNullOrEmpty(buildDto.Result) ? buildDto.Status : buildDto.Result, TotalNumberOfTests = testResultsDto?.TotalTests ?? 0, PassedNumberOfTests = testResultsDto?.PassedTests ?? 0, TeamProject = _displayTransformer.Tranform(buildDto.Project.Name), BuildDefinition = _displayTransformer.Tranform(buildDto.Definition.Name), StartBuildDateTime = buildDto.StartTime, FinishBuildDateTime = buildDto.FinishTime, Branch = ConvertBranchName(buildDto.SourceBranch), RepoName = _displayTransformer.Tranform(buildDto.Repository.Name), UserEmail = buildDto.RequestedFor.UniqueName.ToLower() }); }
private static void ListenForTrainingStatus_Close(Assert assert) { var httpClient = new MockHttpClient(); var engineDto = new EngineDto { Id = "engine1" }; httpClient.Requests.Add(new MockRequest { Method = HttpRequestMethod.Get, Url = "translation/engines/project:project1", ResponseText = JsonConvert.SerializeObject(engineDto, RestClientBase.SerializerSettings) }); var buildDto = new BuildDto { Id = "build1", StepCount = 10 }; httpClient.Requests.Add(new MockRequest { Method = HttpRequestMethod.Get, Url = "translation/builds/engine:engine1?minRevision=0", Action = (body, ct) => Delay(1000, ct), ResponseText = JsonConvert.SerializeObject(buildDto, RestClientBase.SerializerSettings) }); var engine = new TranslationEngine("http://localhost/", "project1", httpClient); Action done = assert.Async(); engine.ListenForTrainingStatus( progress => { }, success => { assert.Equal(success, false); done(); }); engine.Close(); }
public async Task <IActionResult> CreateAsync([FromBody] string engineId) { Engine engine = await _engines.GetAsync(engineId); if (engine == null) { return(StatusCode(StatusCodes.Status422UnprocessableEntity)); } if (!await AuthorizeAsync(engine, Operations.Update)) { return(StatusCode(StatusCodes.Status403Forbidden)); } Build build = await _engineService.StartBuildAsync(engine.Id); if (build == null) { return(StatusCode(StatusCodes.Status422UnprocessableEntity)); } BuildDto dto = CreateDto(build); return(Created(dto.Href, dto)); }
public async Task <ActionResult <BuildDto> > PostBuild(BuildDto buildDto) { Build build = _mapper.Map <Build>(buildDto); var id = int.Parse(HttpContext.User.Identity.Name); User user = await _context.FindAsync <User>(id); User buildUser = await _context.FindAsync <User>(build.BuildPerson?.Id); if (user == null || buildUser == null) { return(BadRequest(new { message = "User not found" })); } build.BuildPerson = buildUser; build.UpdatePerson = user; await _context.Builds.AddAsync(build); await _context.SaveChangesAsync(); var dto = _mapper.Map <BuildDto>(build); return(CreatedAtAction("GetBuild", new { id = build.Id }, dto)); }
public List <BlockDto> GetAllBlock() { try { List <BlockDto> list = new List <BlockDto>(); using (UnitOfWork unitofWork = new UnitOfWork()) { List <block> collection = unitofWork.GetRepository <block>().Select(null, null).ToList(); foreach (var item in collection) { BlockDto blockDto = new BlockDto(); blockDto.Name = item.Name; blockDto.BlockID = item.BlockID; blockDto.BuildID = item.BuildID.Value; blockDto.Gps = item.Gps; var build = unitofWork.GetRepository <build>().GetById(model => model.BuildID == item.BuildID); BuildDto buildDto = new BuildDto(); buildDto.BuildID = build.BuildID; buildDto.Name = build.Name; buildDto.Address = build.Adress; buildDto.Gps = build.Gps; buildDto.CampusID = build.CampusID.Value; buildDto.SiteID = build.SiteID.Value; buildDto.Properties = build.Properties; blockDto.BuildDto = buildDto; list.Add(blockDto); } return(list); } } catch (Exception ex) { return(new List <BlockDto>()); } }
public BuildDto GetBuild(int buildID) { try { using (UnitOfWork unitofWork = new UnitOfWork()) { build item = new build(); item = unitofWork.GetRepository <build>().GetById(x => x.BuildID == buildID); BuildDto buildDto = new BuildDto(); buildDto.BuildID = item.BuildID; buildDto.SiteID = (int)item.SiteID; buildDto.CampusID = (int)item.CampusID; buildDto.Name = item.Name; buildDto.Address = item.Adress; buildDto.Gps = item.Gps; buildDto.Properties = item.Properties; return(buildDto); } } catch (Exception ex) { return(null); } }
/// <summary> /// 获取修改UI模板 /// </summary> /// <returns></returns> private string GetModifyUITxt(BuildDto buildDto) { var formBuilder = new StringBuilder(); var hiddenBuilder = new StringBuilder(); var jsBuilder = new StringBuilder(); //创建列 foreach (var item in buildDto.fieldDtos) { if (item.IsShowForm) { formBuilder.AppendLine("<div class=\"layui-form-item\">"); formBuilder.AppendLine("<label class=\"layui-form-label\">" + item.FieldDesc + "</label>"); formBuilder.AppendLine("<div class=\"layui-input-block\">"); if (item.FiledType == "bool" || item.FiledType == "bool?") { formBuilder.AppendLine("<input type=\"checkbox\" name=\"" + item.FieldName + "\" lay-skin=\"switch\" lay-text = \"开启|禁用\" value = \"true\" @(Model." + item.FieldName + " ? \"checked\" : \"\") > "); } else if (item.FiledType == "DateTime" || item.FiledType == "DateTime?") { formBuilder.AppendLine("<input type=\"text\" class=\"layui-input\" lay-verify=\"date\" id=\"" + item.FieldName + "\" name=\"" + item.FieldName + "\" value =\"@Model." + item.FieldName + "\" >"); jsBuilder.AppendLine("laydate.render({"); jsBuilder.AppendLine("elem: '#" + item.FieldName + "',"); jsBuilder.AppendLine("theme: '#393D49'"); jsBuilder.AppendLine("});"); } else { if (item.FiledType == "string" && item.FiledLength > 255) { formBuilder.AppendLine("<textarea name = \"" + item.FieldName + "\" class=\"layui-textarea\" style =\"min-height: 60px;\" placeholder =\"请输入" + item.FieldDesc + "\">@Model." + item.FieldName + "</textarea>"); } else { formBuilder.AppendLine("<input type=\"text\" name=\"" + item.FieldName + "\" value =\"@Model." + item.FieldName + "\" "); if (!string.IsNullOrEmpty(item.IsNullable)) { formBuilder.Append("lay-verify =\"required\" lay-verType=\"tips\" autocomplete=\"off\" "); } formBuilder.Append("placeholder =\"请输入" + item.FieldDesc + "\" class=\"layui-input\">"); } } formBuilder.AppendLine("</div>"); formBuilder.AppendLine("</div>"); } else { hiddenBuilder.AppendLine("<input type=\"hidden\" name=\"" + item.FieldName + "\" id=\"" + item.FieldName + "\" value=\"@Model." + item.FieldName + "\" />"); } } var txt = ReadTemplate("Modify.txt").Replace("$AreaName$", $"{buildDto.areaName.ToUpperFirst() ?? ""}") .Replace("$ControllerName$", buildDto.controllerName) .Replace("$Form$", formBuilder.ToString()) .Replace("$Hidden$", hiddenBuilder.ToString()) .Replace("$JavaScript$", jsBuilder.ToString()) .Replace("$ModelName$", buildDto.modelName) .Replace("$Models$", buildDto.modelName) .Replace("$Using$", "DL.Domain.Models." + $"{buildDto.areaName.ToUpperFirst() + "Models" ?? ""}") .Replace("$DescName$", buildDto.descName); return(txt); }