示例#1
0
        /// <summary>
        /// Prepares a builder to be ran in a given build context.
        ///
        /// <para>This is the place where a builder can add additional dependencies.</para>
        /// </summary>
        /// <param name="context">The current build context</param>
        public void AddToContext(IBuildContext context)
        {
            builders.Clear();

            if (alias != null && !context.Contains(this))
            {
                foreach (var childRef in alias.References)
                {
                    if (childRef.Type == reference.Type)
                    {
                        var builder = referenceBuilderFactory.CreateReferenceBuilder(childRef, project);
                        builder.AddToContext(context);

                        builders.Add(builder);
                    }
                }

                context.AddBuilder(this, builders);
            }
            else
            {
                foreach (var dep in context.GetDependencies(this))
                {
                    builders.Add(dep);
                }
            }
        }
示例#2
0
        private IBuilder CreateReferenceBuilder(Reference reference)
        {
            var builder = referenceBuilderFactory.CreateReferenceBuilder(reference, project);

            if (builder != null)
            {
                return(builder);
            }
            else
            {
                throw new InvalidReferenceTypeException(reference.Uri.Scheme);
            }
        }
示例#3
0
        private string GetTool(string uri, string fileName, Project project)
        {
            var referenceBuilder = referenceBuilderFactory.CreateReferenceBuilder(
                new Reference(new Uri(uri), ReferenceType.Build), project);

            var buildContext = buildContextFactory.CreateBuildContext();

            buildContext.AddBuilder(referenceBuilder, new IBuilder[0]);
            var files           = buildContext.Run(referenceBuilder);
            var file            = files.FirstOrDefault(f => Path.GetFileName(f).Equals(fileName, StringComparison.InvariantCultureIgnoreCase));
            var localTargetRoot = (LocalFileSystemDirectory)targetRoot;

            if (file != null)
            {
                return(Path.Combine(localTargetRoot.AbsolutePath, file));
            }
            else
            {
                return(null);
            }
        }
示例#4
0
        private string LoadReference(Uri referenceUri)
        {
            var dummyProject     = new Project("dummy", new Module("dummy", new Suite(suiteRoot)));
            var referenceBuilder =
                referenceBuilderFactory.CreateReferenceBuilder(new Reference(referenceUri, ReferenceType.Build), dummyProject);

            var buildContext = buildContextFactory.CreateBuildContext();

            buildContext.AddBuilder(referenceBuilder);
            var files           = buildContext.Run(referenceBuilder);
            var file            = files.FirstOrDefault(f => Path.GetExtension(f).ToLowerInvariant() == ".dll");
            var localTargetRoot = (LocalFileSystemDirectory)targetRoot;

            if (file != null)
            {
                return(Path.Combine(localTargetRoot.AbsolutePath, file));
            }
            else
            {
                return(null);
            }
        }
示例#5
0
        public IReferenceBuilder CreateReferenceBuilder(Reference reference, Project project)
        {
            var builder = baseImpl.CreateReferenceBuilder(reference, project);

            return(store.Add(builder));
        }