Пример #1
0
		BuildProvider GetBuildProviderFor (string file, BuildProviderCollection buildProviders)
		{
			if (file == null || file.Length == 0 || buildProviders == null || buildProviders.Count == 0)
				return null;

			BuildProvider ret = buildProviders.GetProviderInstanceForExtension (Path.GetExtension (file));
			if (ret != null && IsCorrectBuilderType (ret)) {
				ret.SetVirtualPath (PhysicalToVirtual (file));
				return ret;
			}
				
			return null;
		}
		public static BuildProvider GetBuildProvider (VirtualPath virtualPath, BuildProviderCollection coll)
		{
			if (virtualPath == null || String.IsNullOrEmpty (virtualPath.Original) || coll == null)
				return null;
			
			string extension = virtualPath.Extension;
			BuildProvider bp = coll.GetProviderForExtension (extension);
			if (bp == null) {
				if (String.Compare (extension, ".asax", StringComparison.OrdinalIgnoreCase) == 0)
					bp = new ApplicationFileBuildProvider ();
				else if (StrUtils.StartsWith (virtualPath.AppRelative, "~/App_Themes/"))
					bp = new ThemeDirectoryBuildProvider ();

				if (bp != null)
					bp.SetVirtualPath (virtualPath);
				
				return bp;
			}
			
			object[] attrs = bp.GetType ().GetCustomAttributes (typeof (BuildProviderAppliesToAttribute), true);
			if (attrs == null || attrs.Length == 0)
				return bp;

			BuildProviderAppliesTo appliesTo = ((BuildProviderAppliesToAttribute)attrs [0]).AppliesTo;
			if ((appliesTo & BuildProviderAppliesTo.Web) == 0)
				return null;

			bp.SetVirtualPath (virtualPath);
			return bp;
		}
		void AddVirtualFile (VirtualFile file, BuildProviderCollection bpcoll)
		{
			if (file == null || BuildManager.IgnoreVirtualPath (file.VirtualPath))
				return;
			
			BuildProvider bp = GetBuildProvider (file.VirtualPath, bpcoll);
			if (bp == null)
				return;
			AddBuildProvider (bp);
		}
		public static BuildProvider GetBuildProvider (string virtualPath, BuildProviderCollection coll)
		{
			return GetBuildProvider (new VirtualPath (virtualPath), coll);
		}
		void AddVirtualDir (VirtualDirectory vdir, BuildProviderCollection bpcoll, Dictionary <string, bool> cache)
		{
			if (vdir == null)
				return;
			
			BuildProvider bp;
			IDictionary <string, bool> deps;
			var dirs = new List <string> ();
			string fileVirtualPath;
			
			foreach (VirtualFile file in vdir.Files) {
				fileVirtualPath = file.VirtualPath;
				if (BuildManager.IgnoreVirtualPath (fileVirtualPath))
					continue;
				
				bp = GetBuildProvider (fileVirtualPath, bpcoll);
				if (bp == null)
					continue;
				if (!AddBuildProvider (bp))
					continue;
				
				deps = bp.ExtractDependencies ();
				if (deps == null)
					continue;

				string depDir, s;
				dirs.Clear ();
				foreach (var dep in deps) {
					s = dep.Key;
					depDir = VirtualPathUtility.GetDirectory (s); // dependencies are assumed to contain absolute paths
					if (cache.ContainsKey (depDir))
						continue;
					cache.Add (depDir, true);
					AddVirtualDir (GetVirtualDirectory (s), bpcoll, cache);
				}
			}
		}