Ejemplo n.º 1
0
        /// <summary>
        /// Performs all notifications needed.
        /// </summary>
        private static void PerformNotifications()
        {
            var graph = new AdjacencyGraph <string, Edge <string> >();

            foreach (string projectFolder in Directory.GetDirectories(Arguments.RootPath))
            {
                string projectName         = Path.GetFileName(projectFolder);
                string referencesDirectory = Path.Combine(projectFolder, Arguments.ReferencesFolderName);

                graph.AddVerticesAndEdgeRange(
                    ReferenceMark.GetCurrent(ReferenceType.Internal, referencesDirectory)
                    .Select(referenceName => new Edge <string>(referenceName, projectName)));

                graph.AddVerticesAndEdgeRange(
                    ReferenceMark.GetCurrent(ReferenceType.External, referencesDirectory)
                    .Select(referenceName => new Edge <string>(referenceName, projectName)));
            }

            GraphHelper.RemoveExplicitEdges(graph);

            List <string> projectsToNotify = new List <string>();
            IEnumerable <Edge <string> > outEdges;

            if (graph.TryGetOutEdges(Arguments.ProjectName, out outEdges))
            {
                projectsToNotify.AddRange(outEdges.Select(edge => edge.Target));
            }

            string fileName = ReferenceMark.GetReferenceMarkName(Arguments.ProjectName);

            foreach (string file in FindReferenceMarks(fileName))
            {
                string path = Path.GetDirectoryName(file);
                path = Path.GetDirectoryName(path);
                path = Path.GetDirectoryName(path);
                string projectName = Path.GetFileName(path);

                Console.WriteLine(
                    Resources.LogReferencedBy,
                    projectName);

                if (projectsToNotify.Contains(projectName))
                {
                    ReferenceMark.MarkUpdatedFile(file);

                    Console.WriteLine(
                        Resources.LogTriggeredBuild,
                        projectName);
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Checks "WrongReferences" condition.
        /// </summary>
        public static void CheckWrongReferences()
        {
            StringBuilder message  = new StringBuilder();
            List <string> projects = ProjectHelper.GetProjectReferences();

            if (Arguments.ProjectType != ProjectType.Azure)
            {
                foreach (string project in projects)
                {
                    message.AppendLine(
                        Strings.DontUseProjectReference
                        .Display(project));
                }
            }

            List <Reference> references = ProjectHelper.GetBinaryReferences();

            CheckReferenceProperties(references, message);

            List <ReferenceFile> allExternals  = ReferenceFolder.GetAllFiles(Arguments.ExternalReferencesPath);
            List <ReferenceFile> allInternals  = ReferenceFolder.GetAllFiles(Arguments.InternalReferencesPath);
            List <ReferenceFile> usedExternals = new List <ReferenceFile>();
            List <ReferenceFile> usedInternals = new List <ReferenceFile>();
            List <Reference>     usedGac       = new List <Reference>();

            foreach (Reference reference in references)
            {
                ReferenceFile usedExternal = allExternals.Where(file => file.AssemblyName == reference.Name).FirstOrDefault();
                ReferenceFile usedInternal = allInternals.Where(file => file.AssemblyName == reference.Name).FirstOrDefault();

                if (usedExternal != null)
                {
                    usedExternals.Add(usedExternal);
                }
                else if (usedInternal != null)
                {
                    usedInternals.Add(usedInternal);
                }
                else
                {
                    usedGac.Add(reference);
                }
            }

            foreach (string project in projects)
            {
                ReferenceFile usedInternal = allInternals
                                             .Where(file => file.AssemblyName == Path.GetFileNameWithoutExtension(project))
                                             .FirstOrDefault();

                if (usedInternal != null)
                {
                    usedInternals.Add(usedInternal);
                }
            }

            ReferenceMark.SetupActual(
                ReferenceType.External,
                Arguments.ReferencesDirectory,
                usedExternals.Select(item => item.ProjectName).Distinct());

            ReferenceMark.SetupActual(
                ReferenceType.Internal,
                Arguments.ReferencesDirectory,
                usedInternals.Select(item => item.ProjectName).Distinct());

            List <string> requiredGac = new List <string>();
            List <string> allowedGac  = new List <string>();

            allowedGac.Add("envdte");
            allowedGac.Add("envdte80");
            allowedGac.Add("Microsoft.Contracts");
            allowedGac.Add("Microsoft.CSharp");
            allowedGac.Add("Microsoft.JScript");
            allowedGac.Add("Microsoft.mshtml");
            allowedGac.Add("Microsoft.ReportViewer.Common");
            allowedGac.Add("Microsoft.ReportViewer.WebForms");
            allowedGac.Add("Microsoft.Synchronization");
            allowedGac.Add("Microsoft.Synchronization.Data");
            allowedGac.Add("Microsoft.Synchronization.Data.SqlServer");
            allowedGac.Add("Microsoft.VisualBasic.Compatibility.Data");
            allowedGac.Add("Microsoft.VisualStudio.QualityTools.UnitTestFramework");
            allowedGac.Add("PresentationCore");
            allowedGac.Add("PresentationFramework");
            allowedGac.Add("System");
            allowedGac.Add("System.Core");
            allowedGac.Add("System.ComponentModel.DataAnnotations");
            allowedGac.Add("System.Configuration");
            allowedGac.Add("System.configuration");
            allowedGac.Add("System.Configuration.Install");
            allowedGac.Add("System.Data");
            allowedGac.Add("System.Data.DataSetExtensions");
            allowedGac.Add("System.Data.Entity");
            allowedGac.Add("System.Data.Linq");
            allowedGac.Add("System.Data.Services");
            allowedGac.Add("System.Data.Services.Client");
            allowedGac.Add("System.Deployment");
            allowedGac.Add("System.Design");
            allowedGac.Add("System.Drawing");
            allowedGac.Add("System.EnterpriseServices");
            allowedGac.Add("System.IdentityModel");
            allowedGac.Add("System.IdentityModel.Selectors");
            allowedGac.Add("System.Management");
            allowedGac.Add("System.Messaging");
            allowedGac.Add("System.Runtime.Remoting");
            allowedGac.Add("System.Runtime.Serialization");
            allowedGac.Add("System.Runtime.Serialization.Formatters.Soap");
            allowedGac.Add("System.Security");
            allowedGac.Add("System.ServiceModel");
            allowedGac.Add("System.ServiceModel.Web");
            allowedGac.Add("System.ServiceModel.DomainServices.EntityFramework");
            allowedGac.Add("System.ServiceModel.DomainServices.Hosting");
            allowedGac.Add("System.ServiceModel.DomainServices.Server");
            allowedGac.Add("System.ServiceProcess");
            allowedGac.Add("System.Transactions");
            allowedGac.Add("System.Web");
            allowedGac.Add("System.Web.Abstractions");
            allowedGac.Add("System.Web.ApplicationServices");
            allowedGac.Add("System.Web.DynamicData");
            allowedGac.Add("System.Web.Entity");
            allowedGac.Add("System.Web.Extensions");
            allowedGac.Add("System.Web.Extensions.Design");
            allowedGac.Add("System.Web.Helpers");
            allowedGac.Add("System.Web.Mobile");
            allowedGac.Add("System.Web.Routing");
            allowedGac.Add("System.Web.Services");
            allowedGac.Add("System.Web.WebPages");
            allowedGac.Add("System.Windows.Forms");
            allowedGac.Add("System.Xaml");
            allowedGac.Add("System.XML");
            allowedGac.Add("System.Xml");
            allowedGac.Add("System.Xml.Linq");
            allowedGac.Add("WindowsBase");

            string description;

            if (!ValidationHelper.CheckEntries(
                    usedGac.Select(reference => reference.Name).ToList(),
                    requiredGac,
                    allowedGac,
                    out description))
            {
                message.Append(description);
            }

            if (message.Length == 0)
            {
                return;
            }

            RaiseError.WrongReferences(message.ToString());
        }