Microsoft.JScript.CompilerGlobals.CompilerGlobals C# (CSharp) Method

CompilerGlobals() private method

private CompilerGlobals ( VsaEngine engine, String assemName, String assemblyFileName, PEFileKinds PEFileKind, bool save, bool run, bool debugOn, bool isCLSCompliant, System.Version version, Globals globals ) : Microsoft.JScript.Vsa
engine Microsoft.JScript.Vsa.VsaEngine
assemName String
assemblyFileName String
PEFileKind PEFileKinds
save bool
run bool
debugOn bool
isCLSCompliant bool
version System.Version
globals Globals
return Microsoft.JScript.Vsa
      internal CompilerGlobals(VsaEngine engine, String assemName, String assemblyFileName, PEFileKinds PEFileKind, bool save, bool run, bool debugOn, bool isCLSCompliant, Version version, Globals globals) {
        String moduleFileName = null;
        String directory = null; //Default has assembly stored in current directory
        
        if (assemblyFileName != null){
          //The directory is an absolute path where the assembly is written
          try{
            directory = Path.GetDirectoryName(Path.GetFullPath(assemblyFileName));
          }catch(Exception e){
            throw new VsaException(VsaError.AssemblyNameInvalid, assemblyFileName, e);
          }catch{
            throw new JScriptException(JSError.NonClsException);
          }
          
          //For a single file assembly module filename is set to assembly filename
          moduleFileName = Path.GetFileName(assemblyFileName);
          
          //If simple name is not specified, get it by extracting the basename from assembly name
          if (null == assemName || String.Empty == assemName){
            assemName = Path.GetFileName(assemblyFileName);
            if (Path.HasExtension(assemName))
              assemName = assemName.Substring(0, assemName.Length - Path.GetExtension(assemName).Length);
          }
        }
        
        //Setup default simple assembly name and module name for the case where no assemblyFileName is specified.
        if (assemName == null || assemName == String.Empty)
          assemName = "JScriptAssembly";
        if (moduleFileName == null) {
          if (PEFileKind == PEFileKinds.Dll)
            moduleFileName = "JScriptModule.dll";
          else
            moduleFileName = "JScriptModule.exe";
        }
        
        AssemblyName assemblyName = new AssemblyName();
        assemblyName.CodeBase = assemblyFileName;
        if (globals.assemblyCulture != null) assemblyName.CultureInfo = globals.assemblyCulture;
        assemblyName.Flags = AssemblyNameFlags.None;
        if ((globals.assemblyFlags & AssemblyFlags.PublicKey) != 0) assemblyName.Flags = AssemblyNameFlags.PublicKey;
        switch ((AssemblyFlags)(globals.assemblyFlags & AssemblyFlags.CompatibilityMask)){
          case AssemblyFlags.NonSideBySideAppDomain:
            assemblyName.VersionCompatibility = AssemblyVersionCompatibility.SameDomain; break;
          case AssemblyFlags.NonSideBySideMachine:
            assemblyName.VersionCompatibility = AssemblyVersionCompatibility.SameMachine; break;
          case AssemblyFlags.NonSideBySideProcess:
            assemblyName.VersionCompatibility = AssemblyVersionCompatibility.SameProcess; break;
          default:
            assemblyName.VersionCompatibility = (AssemblyVersionCompatibility)0; break;
        }

        assemblyName.HashAlgorithm = globals.assemblyHashAlgorithm;
        if (globals.assemblyKeyFileName != null){
          try
          {
            using (FileStream fs = new FileStream(globals.assemblyKeyFileName, FileMode.Open, FileAccess.Read))
            {
              StrongNameKeyPair keyPair = new StrongNameKeyPair(fs);

              if (globals.assemblyDelaySign)
                if (fs.Length == 160)
                {
                  Byte[] pkey = new Byte[160];
                  fs.Seek(0, SeekOrigin.Begin);
                  int len = fs.Read(pkey, 0, 160);
                  assemblyName.SetPublicKey(pkey);
                }
                else
                  assemblyName.SetPublicKey(keyPair.PublicKey);
              else {
                // Fetch to force reflection to try and process the key file data and throw an exception
                byte[] publicKey = keyPair.PublicKey; 
                assemblyName.KeyPair = keyPair;
              }
            }
          }
          catch
          {
            globals.assemblyKeyFileNameContext.HandleError(JSError.InvalidAssemblyKeyFile, globals.assemblyKeyFileName);
          }
        }else if (globals.assemblyKeyName != null){
          try{
            StrongNameKeyPair keyPair = new StrongNameKeyPair(globals.assemblyKeyName);
            byte[] publicKey = keyPair.PublicKey; // Force validation
            assemblyName.KeyPair = keyPair;
          }catch{
            globals.assemblyKeyNameContext.HandleError(JSError.InvalidAssemblyKeyFile, globals.assemblyKeyName);
          }
        }

        assemblyName.Name = assemName;
        if (version != null) assemblyName.Version = version;
        else if (globals.assemblyVersion != null) assemblyName.Version = globals.assemblyVersion;

        AssemblyBuilderAccess access = save ? (run ? AssemblyBuilderAccess.RunAndSave : AssemblyBuilderAccess.Save) : AssemblyBuilderAccess.Run;
        if (engine.ReferenceLoaderAPI == LoaderAPI.ReflectionOnlyLoadFrom)
          access = AssemblyBuilderAccess.ReflectionOnly;
        // Supply the evidence to assemblies built for VSA
        if (globals.engine.genStartupClass)
          this.assemblyBuilder = Thread.GetDomain().DefineDynamicAssembly(assemblyName, access, directory, globals.engine.Evidence);
        else
          this.assemblyBuilder = Thread.GetDomain().DefineDynamicAssembly(assemblyName, access, directory);
        if (save)
          this.module = this.assemblyBuilder.DefineDynamicModule("JScript Module", moduleFileName, debugOn);
        else
          this.module = this.assemblyBuilder.DefineDynamicModule("JScript Module", debugOn);
        if (isCLSCompliant)
          this.module.SetCustomAttribute(new CustomAttributeBuilder(CompilerGlobals.clsCompliantAttributeCtor, new Object[]{isCLSCompliant}));
        if (debugOn){
          ConstructorInfo debuggableAttr = Typeob.DebuggableAttribute.GetConstructor(new Type[] {Typeob.Boolean, Typeob.Boolean});
          assemblyBuilder.SetCustomAttribute(new CustomAttributeBuilder(debuggableAttr, 
            new Object[] {(globals.assemblyFlags & AssemblyFlags.EnableJITcompileTracking) != 0, 
                          (globals.assemblyFlags & AssemblyFlags.DisableJITcompileOptimizer) != 0}));
        }
        this.compilationEvidence = globals.engine.Evidence;
        this.classwriter = null;
      }
      
CompilerGlobals