RedistVersionInfo.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / CompMod / System / CodeDOM / Compiler / RedistVersionInfo.cs / 5 / RedistVersionInfo.cs

                            //------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

namespace System.CodeDom.Compiler { 
    using System; 
    using System.Diagnostics;
    using System.IO; 
    using System.CodeDom.Compiler;
    using System.Configuration;
    using System.Collections.Generic;
 
    using Microsoft.Win32;
 
    internal static class RedistVersionInfo { 
        internal const String NameTag = "CompilerVersion";    // name of the tag for specifying the version
 
        internal const String DefaultVersion = InPlaceVersion;      // should match one of the versions below

        //internal const String LatestVersion = "Latest";       // always bind to the latest version
        internal const String InPlaceVersion = "v2.0";        // always bind to Whidbey version 
        internal const String RedistVersion = "v3.5";          // always bind to the Orcas version
 
        private const string dotNetFrameworkSdkInstallKeyValueV35 = "MSBuildToolsPath"; 
        private const string dotNetFrameworkRegistryPath = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\MSBuild\\ToolsVersions\\3.5";
 
        public static string GetCompilerPath(IDictionary provOptions, string compilerExecutable) {
            string compPath = Executor.GetRuntimeInstallDirectory();

            // if provOptions is provided check to see if it alters what version we should bind to. 
            // provOptions can be null if someone does new VB/CSCodeProvider(), in which case
            // they get the Whidbey behavior. 
            if (provOptions != null) { 
                string versionVal;//, newPath;
                if (provOptions.TryGetValue(RedistVersionInfo.NameTag, out versionVal)) { 
                    switch (versionVal) {
                        //case RedistVersionInfo.LatestVersion:
                            // always run against the latest version of the compiler
 
                        //    newPath = GetOrcasPath();
                        //    if (newPath != null && File.Exists(Path.Combine(newPath, compilerExecutable))) 
                        //        compPath = newPath; 
                        //    break;
                        case RedistVersionInfo.RedistVersion: 
                            // lock-forward to the Orcas version, if it's not available throw (we'll throw at compile time)

                            compPath = GetOrcasPath();
                            break; 
                        case RedistVersionInfo.InPlaceVersion:
                            // lock-back to the Whidbey version, no-op 
                            break; 
                        default:
                            compPath = null; 
                            break;
                    }
                }
            } 

            if (compPath == null) 
                throw new InvalidOperationException(SR.GetString(SR.CompilerNotFound, compilerExecutable)); 

            return compPath; 
        }

        ///
        /// this method returns the location of the Orcas compilers, but will return whatever 
        /// version is requested via the COMPlus_ environment variables first
        /// 
        private static string GetOrcasPath() { 

            string dir = null; 

            // if this is running in a private running environment such as Razzle, we would use the path
            // based on the environment variables: COMPLUS_InstallRoot and COMPLUS_Version.
            string comPlus_InstallRoot = Environment.GetEnvironmentVariable("COMPLUS_InstallRoot"); 
            string comPlus_Version = Environment.GetEnvironmentVariable("COMPLUS_Version");
            if (!string.IsNullOrEmpty(comPlus_InstallRoot) && !string.IsNullOrEmpty(comPlus_Version)) 
            { 
                dir = Path.Combine(comPlus_InstallRoot, comPlus_Version);
                if (Directory.Exists(dir)) 
                    return dir;
            }

            dir = Registry.GetValue(dotNetFrameworkRegistryPath, dotNetFrameworkSdkInstallKeyValueV35, null) as string; 
            if (dir != null && Directory.Exists(dir)) {
                return dir; 
            } 
            return null;
        } 
    }
}


// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

namespace System.CodeDom.Compiler { 
    using System; 
    using System.Diagnostics;
    using System.IO; 
    using System.CodeDom.Compiler;
    using System.Configuration;
    using System.Collections.Generic;
 
    using Microsoft.Win32;
 
    internal static class RedistVersionInfo { 
        internal const String NameTag = "CompilerVersion";    // name of the tag for specifying the version
 
        internal const String DefaultVersion = InPlaceVersion;      // should match one of the versions below

        //internal const String LatestVersion = "Latest";       // always bind to the latest version
        internal const String InPlaceVersion = "v2.0";        // always bind to Whidbey version 
        internal const String RedistVersion = "v3.5";          // always bind to the Orcas version
 
        private const string dotNetFrameworkSdkInstallKeyValueV35 = "MSBuildToolsPath"; 
        private const string dotNetFrameworkRegistryPath = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\MSBuild\\ToolsVersions\\3.5";
 
        public static string GetCompilerPath(IDictionary provOptions, string compilerExecutable) {
            string compPath = Executor.GetRuntimeInstallDirectory();

            // if provOptions is provided check to see if it alters what version we should bind to. 
            // provOptions can be null if someone does new VB/CSCodeProvider(), in which case
            // they get the Whidbey behavior. 
            if (provOptions != null) { 
                string versionVal;//, newPath;
                if (provOptions.TryGetValue(RedistVersionInfo.NameTag, out versionVal)) { 
                    switch (versionVal) {
                        //case RedistVersionInfo.LatestVersion:
                            // always run against the latest version of the compiler
 
                        //    newPath = GetOrcasPath();
                        //    if (newPath != null && File.Exists(Path.Combine(newPath, compilerExecutable))) 
                        //        compPath = newPath; 
                        //    break;
                        case RedistVersionInfo.RedistVersion: 
                            // lock-forward to the Orcas version, if it's not available throw (we'll throw at compile time)

                            compPath = GetOrcasPath();
                            break; 
                        case RedistVersionInfo.InPlaceVersion:
                            // lock-back to the Whidbey version, no-op 
                            break; 
                        default:
                            compPath = null; 
                            break;
                    }
                }
            } 

            if (compPath == null) 
                throw new InvalidOperationException(SR.GetString(SR.CompilerNotFound, compilerExecutable)); 

            return compPath; 
        }

        ///
        /// this method returns the location of the Orcas compilers, but will return whatever 
        /// version is requested via the COMPlus_ environment variables first
        /// 
        private static string GetOrcasPath() { 

            string dir = null; 

            // if this is running in a private running environment such as Razzle, we would use the path
            // based on the environment variables: COMPLUS_InstallRoot and COMPLUS_Version.
            string comPlus_InstallRoot = Environment.GetEnvironmentVariable("COMPLUS_InstallRoot"); 
            string comPlus_Version = Environment.GetEnvironmentVariable("COMPLUS_Version");
            if (!string.IsNullOrEmpty(comPlus_InstallRoot) && !string.IsNullOrEmpty(comPlus_Version)) 
            { 
                dir = Path.Combine(comPlus_InstallRoot, comPlus_Version);
                if (Directory.Exists(dir)) 
                    return dir;
            }

            dir = Registry.GetValue(dotNetFrameworkRegistryPath, dotNetFrameworkSdkInstallKeyValueV35, null) as string; 
            if (dir != null && Directory.Exists(dir)) {
                return dir; 
            } 
            return null;
        } 
    }
}


// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK