Exemple #1
0
        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);
                }
            }
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
            }
        }
Exemple #4
0
 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);
     }
 }
Exemple #5
0
        /// <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);
 }