Example #1
0
        /// <summary>
        ///     internal all-resolver
        /// </summary>
        /// <param name="query"> The query. </param>
        /// <returns> </returns>
        /// <remarks>
        /// </remarks>
        protected string[] InternalCachedResolve(FileSearchQuery query)
        {
            lock (Sync) {
                if (query.ProbeFiles.Length == 1 && query.PathType == FileSearchResultType.FullPath)
                {
                    var directpath = query.ProbeFiles[0];
                    //quick return of existed/non existed full path
                    if (Path.IsPathRooted(query.ProbeFiles[0]))
                    {
                        if (query.All && directpath.Contains("*"))
                        {
                            var dir  = Path.GetDirectoryName(directpath);
                            var mask = Path.GetFileName(directpath);
                            return(Directory.GetFiles(dir, mask));
                        }
                        if (query.ExistedOnly)
                        {
                            if (!(File.Exists(directpath) || Directory.Exists(directpath)))
                            {
                                return(new string[] {});
                            }
                        }
                        return(new[] { directpath });
                    }
                    else if (directpath.Contains(".."))
                    {
                        if (!EnvironmentInfo.IsWeb)
                        {
                            var dir = Path.GetDirectoryName(directpath);
                            dir = Path.Combine(Root, dir);
                            var mask = Path.GetFileName(directpath);
                            return(Directory.GetFiles(dir, mask));
                        }
                    }
                }
                query.UserLog = query.UserLog ?? Log;
                if (null == query.ProbeFiles || 0 == query.ProbeFiles.Length)
                {
                    throw new ArgumentException("empty probe files");
                }
                if (null != query.ProbeFiles.FirstOrDefault(x => x.Contains("..")))
                {
                    throw new ArgumentException("cannot use .. path modifiers in files");
                }
                query.ProbeFiles = query.ProbeFiles.Select(p => FileNameResolverExtensions.NormalizePath(p)).ToArray();
                if (null == query.ProbePaths)
                {
                    var ext = Path.GetExtension(query.ProbeFiles.First());
                    query.ProbePaths = FileNameResolverExtensions.GetDefaultProbesPaths(ext);
                }
                else
                {
                    if (null != query.ProbePaths.FirstOrDefault(x => x.Contains("..")))
                    {
                        throw new ArgumentException("cannot use .. path modifiers in dirs");
                    }
                    query.ProbePaths = query.ProbePaths.Select(p => FileNameResolverExtensions.NormalizePath(p)).ToArray();
                }

                var key = query.ToString();
                query.UserLog.Trace("start resolving files with key " + key, this);
                string[] result;
                if (!_cache.ContainsKey(key) || !query.UseCache)
                {
                    query.UserLog.Debug("no cached Context found", this);
                    result = InternalResolve(query);
                    Version++;
                    Timestamp   = DateTime.Now;
                    _cache[key] = result;
                }
                result = _cache[key];
                query.UserLog.Trace("resolution finished with " + result, this);
                return(result);
            }
        }
Example #2
0
        /// <summary>
        ///     When overridden in a derived class, executes the task.
        /// </summary>
        /// <returns> true if the task successfully executed; otherwise, false. </returns>
        public override bool Execute()
        {
            var assemblypath = Path.GetFullPath(AssemblyPath);
            var manifestpath = Path.GetFullPath(ManifestPath);

            Log.LogMessage("Start generate Short:{0} manifest for {1}", Short, assemblypath);
            var generator = new ManifestBxlGenerator();

            generator.NeedExportAttribute = false;
            var assembly = Assembly.Load(File.ReadAllBytes(assemblypath), File.ReadAllBytes(FileNameResolverExtensions.GetSymbolFileName(assemblypath)));
            var options  = new ManifestBxlGeneratorOptions {
                UseShortNames = Short
            };
            var result = generator.GenerateManifest(new[] { assembly }, options);

            Directory.CreateDirectory(Path.GetDirectoryName(manifestpath));
            File.WriteAllText(ManifestPath, result, Encoding.UTF8);
            Log.LogMessage("Manifest {0} generated", manifestpath);
            return(true);
        }