private static void GetRef(PrjInfo prj) { //var pa = new ProjectAnalyzer(prj.PrjFullName); //prj.ProjectId = pa.GetProjectId().ToString(); //prj.OriginalRef = pa.GetProjectReferences()?.Select(item => item.Name).ToList(); var refFilter = new Regex("<.*Reference Include=\"(.*)\"", RegexOptions.IgnoreCase); var idFilter = new Regex(".*ProjectGuid>({.*})", RegexOptions.IgnoreCase); //< ProjectGuid >{ 4E3DAB94 - 04CC - 4F86 - ABB2 - C913680FBDAE}</ ProjectGuid > //< ProjectGuid >({.*}) using (var reader = File.OpenText(prj.PrjFullName)) { while (!reader.EndOfStream) { var text = reader.ReadLine(); if (string.IsNullOrEmpty(prj.ProjectId)) { var idMatch = idFilter.Match(text); if (!idMatch.Success) { continue; } prj.ProjectId = idMatch.Groups[1].Value; } var match = refFilter.Match(text); if (!match.Success) { continue; } prj.OriginalRef.Add(match.Groups[1].Value); } } }
private static PrjInfo CreatPrjInfoFromCiConfig(string[] x) { //不需要参与Build if (x[5] != "True") { return(null); } var prjFullPath = Path.Combine(BomBuildOption.InitPath, x[2]); if (!File.Exists(prjFullPath)) { var msg = $"Project File {prjFullPath} Not Exsits"; Util.Log(msg, LogLevel.Error); PrjFileNotFound.Add(msg); return(null); } var prj = new PrjInfo() { DevGroup = x[0], Module = x[1], PrjFullName = prjFullPath, AssemblyName = x[3], BuildStage = x[4], }; GetRef(prj); AddToDic(prj); return(prj); }
private static void AddToDic(PrjInfo prj) { PrjInfoDic.Add(prj.AssemblyName.ToLower(), prj); PrjInfoFileNameDic.Add(prj.PrjFullName.ToLower(), prj); if (prj.OriginalRef.Count == 0) { Root.Add(prj); } }
private static void RefPrj(PrjInfo refPrj, PrjInfo prjInfo) { if (CompareOrdinal(refPrj.BuildStage, prjInfo.BuildStage) > 0) { var errorMsg = $"\t{prjInfo.BuildStage.PadRight(13, ' ')} 层的项目 {prjInfo.ShortPrjPath},引用 {refPrj.BuildStage.PadRight(13, ' ')}层的项目{refPrj.ShortPrjPath}"; Util.Log($"Ref Stage Error:{errorMsg}", LogLevel.Error); RefStageError.Add(errorMsg); } else { prjInfo.Ref(refPrj); } }
/// <summary> /// 深度优先探测环 /// </summary> /// <param name="prjInfo"></param> /// <param name="path"></param> public static PrjInfo Deal(PrjInfo prjInfo, Stack <PrjInfo> path) { foreach (var refAssembly in prjInfo.PrjRef.Where(item => (!Root.Contains(item)))) { if (path.Contains(refAssembly)) { //发现环 var cycleRefError = new StringBuilder(); cycleRefError.Append(refAssembly.AssemblyName).Append("<-"); while (path.Peek() != refAssembly) { cycleRefError.Append(path.Pop().AssemblyName).Append("<-"); } cycleRefError.Append(refAssembly.AssemblyName); CycleRef.Add(cycleRefError.ToString()); cycleRefError.Append("\t Resolve it?[Y/n]\n"); Util.Log(cycleRefError, LogLevel.Error); //var decide = Console.ReadLine(); //if (decide == "Y") //{ //Root.Add(refAssembly); //PrjInfoDic.Remove(refAssembly.AssemblyName); return(refAssembly); //} } path.Push(refAssembly); var dealedPrj = Deal(refAssembly, path); if (dealedPrj != null) { return(dealedPrj); } path.Pop(); } return(null); }
public void Ref(PrjInfo refPrj) { PrjRef.Add(refPrj); refPrj.BeRefBy.Add(this); }