Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / ndp / fx / src / xsp / System / Web / Compilation / BuildProvider.cs / 3 / BuildProvider.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- /********************************* Class hierarchy BuildProvider ProfileBuildProvider BaseResourcesBuildProvider ResXBuildProvider ResourcesBuildProvider XsdBuildProvider WsdlBuildProvider InternalBuildProvider SourceFileBuildProvider SimpleHandlerBuildProvider WebServiceBuildProvider WebHandlerBuildProvider ImageGeneratorBuildProvider BaseTemplateBuildProvider ApplicationBuildProvider TemplateControlBuildProvider PageBuildProvider UserControlBuildProvider MasterPageBuildProvider PageThemeBuildProvider GlobalPageThemeBuildProvider **********************************/ namespace System.Web.Compilation { using System; using System.Security.Permissions; using System.IO; using System.Collections; using System.Collections.Generic; using System.Collections.Specialized; using System.CodeDom; using System.CodeDom.Compiler; using System.Web.Util; using System.Web.UI; using System.Web.Hosting; // Flags returned from BuildProvider.GetResultFlags [Flags] public enum BuildProviderResultFlags { Default = 0, ShutdownAppDomainOnChange = 1, } ////// [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.High)] [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.High)] public abstract class BuildProvider { // // Public interface // ////// Base class for build providers that want to participate in a compilation. /// It should be used by build providers that process files based on a virtual path. /// ////// Returns the CompilerType for the language that this build provider /// needs to use, or null of it can use any language. /// public virtual CompilerType CodeCompilerType { get { return null; } } ////// Asks this build provider to generate any code that it needs, using the various /// methods on the passed in BuildProvider. /// public virtual void GenerateCode(AssemblyBuilder assemblyBuilder) {} ////// Returns the class generated by this buildprovider /// public virtual Type GetGeneratedType(CompilerResults results) { return null; } ////// Returns a string that the provider wants to have persisted with the compiled assembly. /// public virtual string GetCustomString(CompilerResults results) { return null; } ////// Returns some flags that drives the behavior of the persisted result. /// public virtual BuildProviderResultFlags GetResultFlags(CompilerResults results) { return BuildProviderResultFlags.Default; } ////// Returns the list of files (virtual paths) that this provider depends on. /// Those files need to be built before this BuildProvider. The resulting assemblies /// are added as references when compiling this BuildProvider. /// This does not include things like server side includes, which don't directly /// produce a BuildResult. /// This is used to implement batching by separating BuildProviders /// internal virtual ICollection GetBuildResultVirtualPathDependencies() { return null; } public virtual ICollection VirtualPathDependencies { get { // By default, return the virtual path as its only dependency return new SingleObjectCollection(VirtualPath); } } ////// Returns the virtual path that this build provider handles /// protected internal string VirtualPath { get { return System.Web.VirtualPath.GetVirtualPathString(_virtualPath); } } ////// Returns the virtual path object that this build provider handles /// internal VirtualPath VirtualPathObject { get { return _virtualPath; } } ////// Opens a stream for the virtual file handled by this provider /// protected Stream OpenStream() { return OpenStream(VirtualPath); } ////// Opens a stream for a virtual file /// protected Stream OpenStream(string virtualPath) { return VirtualPathProvider.OpenFile(virtualPath); } internal /*protected*/ Stream OpenStream(VirtualPath virtualPath) { return virtualPath.OpenFile(); } ////// Opens a reader for the virtual file handled by this provider /// protected TextReader OpenReader() { return OpenReader(VirtualPathObject); } ////// Opens a reader for a virtual file /// protected TextReader OpenReader(string virtualPath) { return OpenReader(System.Web.VirtualPath.Create(virtualPath)); } internal /*protected*/ TextReader OpenReader(VirtualPath virtualPath) { Stream stream = OpenStream(virtualPath); return Util.ReaderFromStream(stream, virtualPath); } ////// Returns a collection of assemblies that the build provider will be compiled with. /// protected ICollection ReferencedAssemblies { get { return _referencedAssemblies; } } ////// Returns the default CompilerType to be used for a specific language /// protected CompilerType GetDefaultCompilerTypeForLanguage(string language) { return CompilationUtil.GetCompilerInfoFromLanguage(VirtualPathObject, language); } ////// Returns the default CompilerType to be used for the default language /// protected CompilerType GetDefaultCompilerType() { return CompilationUtil.GetDefaultLanguageCompilerInfo(null /*compConfig*/, VirtualPathObject); } // // Internal code // #pragma warning disable 0649 internal SimpleBitVector32 flags; #pragma warning restore 0649 // const masks into the BitVector32 internal const int isDependedOn = 0x00000001; internal const int noBuildResult = 0x00000002; internal const int ignoreParseErrors = 0x00000004; internal const int ignoreControlProperties = 0x00000008; internal const int dontThrowOnFirstParseError = 0x00000010; internal const int contributedCode = 0x00000020; private VirtualPath _virtualPath; private ICollection _referencedAssemblies; private BuildProviderSet _buildProviderDependencies; internal BuildProviderSet BuildProviderDependencies { get { return _buildProviderDependencies; } } // Is any other BuildProvider depending on this BuildProvider internal bool IsDependedOn { get { return flags[isDependedOn]; } } internal void SetNoBuildResult() { flags[noBuildResult] = true; } // Remember that this BuildProvider has contributed to the compilation internal void SetContributedCode() { flags[contributedCode] = true; } internal void SetVirtualPath(VirtualPath virtualPath) { _virtualPath = virtualPath; } internal void SetReferencedAssemblies(ICollection referencedAssemblies) { _referencedAssemblies = referencedAssemblies; } internal void AddBuildProviderDependency(BuildProvider dependentBuildProvider) { if (_buildProviderDependencies == null) _buildProviderDependencies = new BuildProviderSet(); _buildProviderDependencies.Add(dependentBuildProvider); dependentBuildProvider.flags[isDependedOn] = true; } /* * Return the culture name for this provider (e.g. "fr" or "fr-fr"). * If no culture applies, return null. */ internal string GetCultureName() { return Util.GetCultureName(VirtualPath); } internal BuildResult GetBuildResult(CompilerResults results) { BuildResult result = CreateBuildResult(results); if (result == null) return null; result.VirtualPath = VirtualPathObject; SetBuildResultDependencies(result); return result; } internal virtual BuildResult CreateBuildResult(CompilerResults results) { // If the build provider is not supposed to have a build result, just return if (flags[noBuildResult]) return null; // Ask the build provider if it wants to persist a Type Type type = GetGeneratedType(results); BuildResult result; if (type != null) { // Create a BuildResult for it BuildResultCompiledType resultCompiledType = CreateBuildResult(type); // If the returned type doesn't come from the generated assembly, set a flag if (results == null || type.Assembly != results.CompiledAssembly) resultCompiledType.UsesExistingAssembly = true; result = resultCompiledType; } else { // Ask the build provider if it instead wants to persist a custom string string customString = GetCustomString(results); // If it does, persist it if (customString != null) { // Only preserve an assembly if the BuildProvider has actually contributed code // to the compilation. result = new BuildResultCustomString( flags[contributedCode] ? results.CompiledAssembly : null, customString); } else { // Nothing was built: nothing to persist if (results == null) return null; // Otherwise, just persist the assembly, if any result = new BuildResultCompiledAssembly(results.CompiledAssembly); } } // Ask the provider it it wants to set some flags on the result int resultFlags = (int) GetResultFlags(results); if (resultFlags != 0) { // Make sure only the lower bits are set Debug.Assert((resultFlags & 0xFFFF0000) == 0); resultFlags &= 0x0000FFFF; result.Flags |= resultFlags; } return result; } internal virtual BuildResultCompiledType CreateBuildResult(Type t) { return new BuildResultCompiledType(t); } internal void SetBuildResultDependencies(BuildResult result) { result.AddVirtualPathDependencies(VirtualPathDependencies); } // // Helper methods // internal static CompilerType GetCompilerTypeFromBuildProvider( BuildProvider buildProvider) { HttpContext context = null; if (EtwTrace.IsTraceEnabled(EtwTraceLevel.Verbose, EtwTraceFlags.Infrastructure) && (context = HttpContext.Current) != null) EtwTrace.Trace(EtwTraceType.ETW_TYPE_PARSE_ENTER, context.WorkerRequest); try { CompilerType compilerType = buildProvider.CodeCompilerType; if (compilerType != null) { CompilationUtil.CheckCompilerOptionsAllowed(compilerType.CompilerParameters.CompilerOptions, false /*config*/, null, 0); } return compilerType; } finally { if (EtwTrace.IsTraceEnabled(EtwTraceLevel.Verbose, EtwTraceFlags.Infrastructure) && context != null) EtwTrace.Trace(EtwTraceType.ETW_TYPE_PARSE_LEAVE, context.WorkerRequest); } } // // Return a 'friendly' string that identifies the build provider // internal static string GetDisplayName(BuildProvider buildProvider) { // If it has a VirtualPath, use it if (buildProvider.VirtualPath != null) { return buildProvider.VirtualPath; } // Otherwise, the best we can do is the type name return buildProvider.GetType().Name; } internal virtual ICollection GetGeneratedTypeNames() { return null; } #region Methods from InternalBuildProvider // Protected internal methods: IgnoreParseErrors and GetCodeCompileUnit // When this is set, we ignore parse errors and keep on processing the page as // well as possible. This is used for the Venus CBM scenario internal virtual bool IgnoreParseErrors { get { return flags[ignoreParseErrors]; } set { flags[ignoreParseErrors] = value; } } // This is used in CBM to instruct the control builders to skip control properties internal bool IgnoreControlProperties { get { return flags[ignoreControlProperties]; } set { flags[ignoreControlProperties] = value; } } // Indicates whether the parser should continue processing for more errors. // This is used in both CBM and aspnet_compiler tool. internal bool ThrowOnFirstParseError { get { return !flags[dontThrowOnFirstParseError]; } set { flags[dontThrowOnFirstParseError] = !value; } } // This is used in the CBM scenario only internal virtual IAssemblyDependencyParser AssemblyDependencyParser { get { return null; } } // This is used in the CBM scenario only ////// Returns the CodeCompileUnit and sets the associated dictionary containing the line pragmas. /// protected internal virtual CodeCompileUnit GetCodeCompileUnit(out IDictionary linePragmasTable) { // Default implementation with code at line 1 string sourceString = Util.StringFromVirtualPath(VirtualPathObject); CodeSnippetCompileUnit snippetCompileUnit = new CodeSnippetCompileUnit(sourceString); LinePragmaCodeInfo codeInfo = new LinePragmaCodeInfo(1 /* startLine */, 1 /* startColumn */, 1 /* startGeneratedColumn */, -1 /* codeLength */, false /* isCodeNuggest */); linePragmasTable = new Hashtable(); linePragmasTable[1] = codeInfo; return snippetCompileUnit; } internal virtual ICollection GetCompileWithDependencies() { return null; } #endregion Methods from InternalBuildProvider } // The InternalBuildProvider class is still retained to internally distinguish between // buildProviders that actually implement the required methods and those that don't, and // also to minimize code change where possible. internal abstract class InternalBuildProvider: BuildProvider { } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- HostVisual.cs
- CoreSwitches.cs
- ActionMessageFilter.cs
- ChangeTracker.cs
- TypeResolvingOptions.cs
- CodeGotoStatement.cs
- NamespaceList.cs
- HttpProcessUtility.cs
- BitArray.cs
- DataGridViewHeaderCell.cs
- NotifyIcon.cs
- DefaultMergeHelper.cs
- AsymmetricSignatureFormatter.cs
- CheckStoreFileValidityRequest.cs
- BitmapEffectInput.cs
- IIS7UserPrincipal.cs
- EditingScope.cs
- Application.cs
- ProfileBuildProvider.cs
- WsatTransactionFormatter.cs
- ReliableSessionElement.cs
- DesignerVerb.cs
- StickyNote.cs
- WebPartTransformer.cs
- DelegateTypeInfo.cs
- SeparatorAutomationPeer.cs
- MetadataImporter.cs
- PngBitmapDecoder.cs
- HttpPostedFile.cs
- ColorMatrix.cs
- ProcessRequestArgs.cs
- XmlSerializationReader.cs
- AssemblyResourceLoader.cs
- SizeConverter.cs
- HandleCollector.cs
- DataTableExtensions.cs
- GregorianCalendar.cs
- AtomMaterializerLog.cs
- DocumentApplicationJournalEntry.cs
- OdbcPermission.cs
- DeploymentSectionCache.cs
- DomNameTable.cs
- tooltip.cs
- ControlParser.cs
- Error.cs
- DragSelectionMessageFilter.cs
- AuthorizationRule.cs
- InputBindingCollection.cs
- DesignerActionVerbList.cs
- ResourcesGenerator.cs
- AppDomainProtocolHandler.cs
- ListViewItemSelectionChangedEvent.cs
- DoWhile.cs
- TableRow.cs
- MSAANativeProvider.cs
- GenericNameHandler.cs
- CodeBlockBuilder.cs
- MessageSmuggler.cs
- InteropTrackingRecord.cs
- Run.cs
- ActivityDesignerAccessibleObject.cs
- GeneralTransform3DTo2DTo3D.cs
- WindowHideOrCloseTracker.cs
- TraceLevelStore.cs
- DbParameterCollectionHelper.cs
- TokenizerHelper.cs
- _HeaderInfo.cs
- MarkedHighlightComponent.cs
- BypassElement.cs
- ProfessionalColorTable.cs
- URIFormatException.cs
- MethodAccessException.cs
- GZipStream.cs
- InkSerializer.cs
- ListViewSortEventArgs.cs
- DBSchemaRow.cs
- DataPagerFieldCollection.cs
- SystemDiagnosticsSection.cs
- PropertyHelper.cs
- SyndicationElementExtension.cs
- CaseExpr.cs
- DataGridCellAutomationPeer.cs
- NGCPageContentSerializerAsync.cs
- CultureTableRecord.cs
- StringKeyFrameCollection.cs
- FormViewCommandEventArgs.cs
- TextBoxAutoCompleteSourceConverter.cs
- DataSourceCache.cs
- CryptoConfig.cs
- PropertyMappingExceptionEventArgs.cs
- FlowDocumentPaginator.cs
- TemplateColumn.cs
- Executor.cs
- TypeConstant.cs
- AssemblyContextControlItem.cs
- ChangePassword.cs
- OAVariantLib.cs
- BufferedGenericXmlSecurityToken.cs
- NullableConverter.cs
- ImageKeyConverter.cs