/// <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); } }
/// <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); }