private static S GetConfigHelper <S>(VirtualPath vpath) where S : ConfigurationSection
    {
        string physicalPath = null;

        if ((vpath == null) || !vpath.IsWithinAppRoot)
        {
            vpath        = HostingEnvironment.ApplicationVirtualPathObject;
            physicalPath = HostingEnvironment.ApplicationPhysicalPath;
        }
        else
        {
            if (!vpath.DirectoryExists())
            {
                vpath = vpath.Parent;
            }
            physicalPath = HostingEnvironment.MapPath(vpath);
        }
        System.Configuration.Configuration configuration = GetConfiguration(vpath, physicalPath);
        if (typeof(S) == typeof(CompilationSection))
        {
            return(configuration.GetSection("system.web/compilation") as S);
        }
        if (typeof(S) == typeof(PagesSection))
        {
            return(configuration.GetSection("system.web/pages") as S);
        }
        if (typeof(S) != typeof(ProfileSection))
        {
            throw new InvalidOperationException(System.Web.SR.GetString("Config_section_not_supported", new object[] { typeof(S).FullName }));
        }
        return(configuration.GetSection("system.web/profile") as S);
    }
Exemplo n.º 2
0
        internal string GetGeneratedSourceFile(VirtualPath virtualPath)
        {
            // Add a pending call to make sure our thread doesn't get killed
            AddPendingCall();

            Type codeDomProviderType;
            CompilerParameters compilerParameters;
            string             generatedFilesDir;

            try {
                if (!virtualPath.DirectoryExists())
                {
                    throw new ArgumentException(SR.GetString(SR.GetGeneratedSourceFile_Directory_Only,
                                                             virtualPath.VirtualPathString), "virtualPath");
                }

                // Calls GetCodeDirectoryInformation to ensure the source files are created for the
                // directory specified by virtualPath
                GetCodeDirectoryInformation(virtualPath,
                                            out codeDomProviderType, out compilerParameters,
                                            out generatedFilesDir);

                return(BuildManager.GenerateFileTable[virtualPath.VirtualPathStringNoTrailingSlash]);
            }
            finally {
                RemovePendingCall();
            }
        }
Exemplo n.º 3
0
 private static bool VirtualDirectoryExistsWithAssert(VirtualPath virtualDir)
 {
     try
     {
         string path = virtualDir.MapPathInternal();
         if (path != null)
         {
             new FileIOPermission(FileIOPermissionAccess.Read, path).Assert();
         }
         return(virtualDir.DirectoryExists());
     }
     catch
     {
         return(false);
     }
 }
    // Actual method performing to work to retrieve the required ConfigurationSection.
    static private S GetConfigHelper <S>(VirtualPath vpath) where S : ConfigurationSection
    {
        string physicalPath = null;

        if (vpath == null || !vpath.IsWithinAppRoot)
        {
            // If virtual path is null or outside the application root, we use the application level config.
            vpath        = HostingEnvironment.ApplicationVirtualPathObject;
            physicalPath = HostingEnvironment.ApplicationPhysicalPath;
        }
        else
        {
            // If it is not a directory, use the directory as the vpath
            if (!vpath.DirectoryExists())
            {
                vpath = vpath.Parent;
            }
            physicalPath = HostingEnvironment.MapPath(vpath);
        }

        Configuration config = GetConfiguration(vpath, physicalPath);

        // Retrieve the specified section
        if (typeof(S) == typeof(CompilationSection))
        {
            return(config.GetSection("system.web/compilation") as S);
        }
        else if (typeof(S) == typeof(PagesSection))
        {
            return(config.GetSection("system.web/pages") as S);
        }
        else if (typeof(S) == typeof(ProfileSection))
        {
            return(config.GetSection("system.web/profile") as S);
        }

        throw new InvalidOperationException(SR.GetString(SR.Config_section_not_supported, typeof(S).FullName));
    }
        internal string GetGeneratedSourceFile(VirtualPath virtualPath)
        {
            string str2;

            this.AddPendingCall();
            try
            {
                Type type;
                CompilerParameters parameters;
                string             str;
                if (!virtualPath.DirectoryExists())
                {
                    throw new ArgumentException(System.Web.SR.GetString("GetGeneratedSourceFile_Directory_Only", new object[] { virtualPath.VirtualPathString }), "virtualPath");
                }
                this.GetCodeDirectoryInformation(virtualPath, out type, out parameters, out str);
                str2 = BuildManager.GenerateFileTable[virtualPath.VirtualPathStringNoTrailingSlash];
            }
            finally
            {
                this.RemovePendingCall();
            }
            return(str2);
        }
Exemplo n.º 6
0
    private static bool VirtualDirectoryExistsWithAssert(VirtualPath virtualDir) {
        try {
            String physicalDir = virtualDir.MapPathInternal();
            if (physicalDir != null) {
                new FileIOPermission(FileIOPermissionAccess.Read, physicalDir).Assert();
            }

            return virtualDir.DirectoryExists();
        }
        catch {
            return false;
        }
    }
Exemplo n.º 7
0
        internal static void ReportDirectoryCompilationProgress(VirtualPath virtualDir) {

            // Nothing to do if there is no CBM callback
            if (CBMCallback == null)
                return;

            // Don't report anything if the directory doesn't exist
            if (!virtualDir.DirectoryExists())
                return;

            string message = SR.GetString(SR.Directory_progress, virtualDir.VirtualPathString);
            CBMCallback.ReportProgress(message);
        }
Exemplo n.º 8
0
        private static BuildResultCompiledType GetThemeBuildResultType(string themeName)
        {
            string appThemeCacheKey, globalThemeCacheKey = null;

            // First, check if the application theme is cached
            appThemeCacheKey = "Theme_" + Util.MakeValidTypeNameFromString(themeName);
            BuildResultCompiledType result = (BuildResultCompiledType)
                                             BuildManager.GetBuildResultFromCache(appThemeCacheKey);

            if (result == null)
            {
                // Then, check if the global theme is cached
                globalThemeCacheKey = "GlobalTheme_" + themeName;
                result = (BuildResultCompiledType)BuildManager.GetBuildResultFromCache(
                    globalThemeCacheKey);
            }

            // If we found a theme buildresulttype, return it
            if (result != null)
            {
                return(result);
            }

            bool gotLock = false;

            try {
                // Grab the compilation mutex
                CompilationLock.GetLock(ref gotLock);

                // Check the cache again now that we have the mutex
                result = (BuildResultCompiledType)BuildManager.GetBuildResultFromCache(appThemeCacheKey);
                if (result == null)
                {
                    result = (BuildResultCompiledType)BuildManager.GetBuildResultFromCache(
                        globalThemeCacheKey);
                }

                if (result != null)
                {
                    return(result);
                }

                // Theme was not found in the caches; check if the directory exists.
                VirtualPath appVirtualDir, globalVirtualDir = null;

                appVirtualDir = GetAppThemeVirtualDir(themeName);
                PageThemeBuildProvider themeBuildProvider = null;

                VirtualPath virtualDir = appVirtualDir;

                string cacheKey = appThemeCacheKey;
                // If the theme directories do not exist, simply throw
                if (appVirtualDir.DirectoryExists())
                {
                    themeBuildProvider = new PageThemeBuildProvider(appVirtualDir);
                }
                else
                {
                    globalVirtualDir = GetGlobalThemeVirtualDir(themeName);

                    if (!globalVirtualDir.DirectoryExists())
                    {
                        throw new HttpException(SR.GetString(SR.Page_theme_not_found, themeName));
                    }

                    virtualDir         = globalVirtualDir;
                    cacheKey           = globalThemeCacheKey;
                    themeBuildProvider = new GlobalPageThemeBuildProvider(globalVirtualDir);
                }

                // The directory exists (either app or global), so compile it
                DateTime utcStart = DateTime.UtcNow;

                VirtualDirectory vdir = virtualDir.GetDirectory();

                // Add all the .skin files to it
                AddThemeFilesToBuildProvider(vdir, themeBuildProvider, true);

                // Use predictable fixed names for theme assemblies.
                BuildProvidersCompiler bpc = new BuildProvidersCompiler(virtualDir,
                                                                        themeBuildProvider.AssemblyNamePrefix + BuildManager.GenerateRandomAssemblyName(themeName));

                // Add the single build provider to the BuildProvidersCompiler
                bpc.SetBuildProviders(new SingleObjectCollection(themeBuildProvider));

                // Compile it
                CompilerResults results = bpc.PerformBuild();

                // Get the Type we care about from the BuildProvider
                result = (BuildResultCompiledType)themeBuildProvider.GetBuildResult(results);

                // Cache it for next time
                BuildManager.CacheBuildResult(cacheKey, result, utcStart);
            }
            finally {
                // Always release the mutex if we had taken it
                if (gotLock)
                {
                    CompilationLock.ReleaseLock();
                }
            }
            return(result);
        }
Exemplo n.º 9
0
        private static BuildResultCompiledType GetThemeBuildResultType(string themeName)
        {
            string cacheKey = null;
            string str      = "Theme_" + Util.MakeValidTypeNameFromString(themeName);
            BuildResultCompiledType buildResultFromCache = (BuildResultCompiledType)BuildManager.GetBuildResultFromCache(str);

            if (buildResultFromCache == null)
            {
                cacheKey             = "GlobalTheme_" + themeName;
                buildResultFromCache = (BuildResultCompiledType)BuildManager.GetBuildResultFromCache(cacheKey);
            }
            if (buildResultFromCache == null)
            {
                bool gotLock = false;
                try
                {
                    CompilationLock.GetLock(ref gotLock);
                    buildResultFromCache = (BuildResultCompiledType)BuildManager.GetBuildResultFromCache(str);
                    if (buildResultFromCache == null)
                    {
                        buildResultFromCache = (BuildResultCompiledType)BuildManager.GetBuildResultFromCache(cacheKey);
                    }
                    if (buildResultFromCache != null)
                    {
                        return(buildResultFromCache);
                    }
                    VirtualPath            virtualDirPath     = null;
                    VirtualPath            appThemeVirtualDir = GetAppThemeVirtualDir(themeName);
                    PageThemeBuildProvider themeBuildProvider = null;
                    VirtualPath            configPath         = appThemeVirtualDir;
                    string str3 = str;
                    if (appThemeVirtualDir.DirectoryExists())
                    {
                        themeBuildProvider = new PageThemeBuildProvider(appThemeVirtualDir);
                    }
                    else
                    {
                        virtualDirPath = GetGlobalThemeVirtualDir(themeName);
                        if (!virtualDirPath.DirectoryExists())
                        {
                            throw new HttpException(System.Web.SR.GetString("Page_theme_not_found", new object[] { themeName }));
                        }
                        configPath         = virtualDirPath;
                        str3               = cacheKey;
                        themeBuildProvider = new GlobalPageThemeBuildProvider(virtualDirPath);
                    }
                    DateTime utcNow = DateTime.UtcNow;
                    AddThemeFilesToBuildProvider(configPath.GetDirectory(), themeBuildProvider, true);
                    BuildProvidersCompiler compiler = new BuildProvidersCompiler(configPath, themeBuildProvider.AssemblyNamePrefix + BuildManager.GenerateRandomAssemblyName(themeName));
                    compiler.SetBuildProviders(new SingleObjectCollection(themeBuildProvider));
                    CompilerResults results = compiler.PerformBuild();
                    buildResultFromCache = (BuildResultCompiledType)themeBuildProvider.GetBuildResult(results);
                    BuildManager.CacheBuildResult(str3, buildResultFromCache, utcNow);
                }
                finally
                {
                    if (gotLock)
                    {
                        CompilationLock.ReleaseLock();
                    }
                }
            }
            return(buildResultFromCache);
        }