//------------------------------------------------------------------------------ // // // Microsoft // Copyright (c) Microsoft Corporation. All rights reserved. // //------------------------------------------------------------------------------ namespace System.CodeDom.Compiler { using System; using System.CodeDom; using System.Collections; using System.Collections.Specialized; using Microsoft.Win32; using Microsoft.Win32.SafeHandles; using System.Runtime.InteropServices; using System.Security.Permissions; using System.Security.Policy; using System.Runtime.Serialization; using System.Runtime.Versioning; /// /// /// Represents the parameters used in to invoke the compiler. /// /// [PermissionSet(SecurityAction.LinkDemand, Name="FullTrust")] [PermissionSet(SecurityAction.InheritanceDemand, Name="FullTrust")] [Serializable] public class CompilerParameters { [OptionalField] private string coreAssemblyFileName = String.Empty; private StringCollection assemblyNames = new StringCollection(); [OptionalField] private StringCollection embeddedResources = new StringCollection(); [OptionalField] private StringCollection linkedResources = new StringCollection(); private string outputName; private string mainClass; private bool generateInMemory = false; private bool includeDebugInformation = false; private int warningLevel = -1; // -1 means not set (use compiler default) private string compilerOptions; private string win32Resource; private bool treatWarningsAsErrors = false; private bool generateExecutable = false; private TempFileCollection tempFiles; [NonSerializedAttribute] #if MONO IntPtr userToken; #else private SafeUserTokenHandle userToken; #endif private Evidence evidence = null; /// /// /// Initializes a new instance of . /// /// [ResourceExposure(ResourceScope.None)] [ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)] public CompilerParameters() : this(null, null) { } /// /// /// Initializes a new instance of using the specified /// assembly names. /// /// [ResourceExposure(ResourceScope.None)] [ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)] public CompilerParameters(string[] assemblyNames) : this(assemblyNames, null, false) { } /// /// /// Initializes a new instance of using the specified /// assembly names and output name. /// /// [ResourceExposure(ResourceScope.Machine)] [ResourceConsumption(ResourceScope.Machine)] public CompilerParameters(string[] assemblyNames, string outputName) : this(assemblyNames, outputName, false) { } /// /// /// Initializes a new instance of using the specified /// assembly names, output name and a whether to include debug information flag. /// /// [ResourceExposure(ResourceScope.Machine)] public CompilerParameters(string[] assemblyNames, string outputName, bool includeDebugInformation) { if (assemblyNames != null) { ReferencedAssemblies.AddRange(assemblyNames); } this.outputName = outputName; this.includeDebugInformation = includeDebugInformation; } /// /// The "core" or "standard" assembly that contains basic types such as Object, Int32 and the like /// that is to be used for the compilation.
/// If the value of this property is an empty string (or null), the default core assembly will be used by the /// compiler (depending on the compiler version this may be mscorlib.dll or System.Runtime.dll in /// a Framework or reference assembly directory).
/// If the value of this property is not empty, CodeDOM will emit compiler options to not reference any assemblies /// implicitly during compilation. It will also explicitly reference the assembly file specified in this property.
/// For compilers that only implicitly reference the "core" or "standard" assembly by default, this option can be used on its own. /// For compilers that implicitly reference more assemblies on top of the "core" / "standard" assembly, using this option may require /// specifying additional entries in the System.CodeDom.Compiler.ReferencedAssemblies collection.
/// Note: An ICodeCompiler / CoodeDomProvider implementation may choose to ignore this property. ///
public string CoreAssemblyFileName { get { return coreAssemblyFileName; } set { coreAssemblyFileName = value; } } /// /// /// Gets or sets whether to generate an executable. /// /// public bool GenerateExecutable { get { return generateExecutable; } set { generateExecutable = value; } } /// /// /// Gets or sets whether to generate in memory. /// /// public bool GenerateInMemory { get { return generateInMemory; } set { generateInMemory = value; } } /// /// /// Gets or sets the assemblies referenced by the source to compile. /// /// public StringCollection ReferencedAssemblies { get { return assemblyNames; } } /// /// /// Gets or sets the main class. /// /// public string MainClass { get { return mainClass; } set { mainClass = value; } } /// /// /// Gets or sets the output assembly. /// /// public string OutputAssembly { [ResourceExposure(ResourceScope.Machine)] get { return outputName; } [ResourceExposure(ResourceScope.Machine)] set { outputName = value; } } /// /// /// Gets or sets the temp files. /// /// public TempFileCollection TempFiles { get { if (tempFiles == null) tempFiles = new TempFileCollection(); return tempFiles; } set { tempFiles = value; } } /// /// /// Gets or sets whether to include debug information in the compiled /// executable. /// /// public bool IncludeDebugInformation { get { return includeDebugInformation; } set { includeDebugInformation = value; } } /// /// [To be supplied.] /// public bool TreatWarningsAsErrors { get { return treatWarningsAsErrors; } set { treatWarningsAsErrors = value; } } /// /// [To be supplied.] /// public int WarningLevel { get { return warningLevel; } set { warningLevel = value; } } /// /// [To be supplied.] /// public string CompilerOptions { get { return compilerOptions; } set { compilerOptions = value; } } /// /// [To be supplied.] /// public string Win32Resource { get { return win32Resource; } set { win32Resource = value; } } /// /// /// Gets or sets the resources to be compiled into the target /// /// [ComVisible(false)] public StringCollection EmbeddedResources { get { return embeddedResources; } } /// /// /// Gets or sets the linked resources /// /// [ComVisible(false)] public StringCollection LinkedResources { get { return linkedResources; } } /// /// /// Gets or sets user token to be employed when creating the compiler process. /// /// public IntPtr UserToken { get { #if MONO return userToken; #else if (userToken != null) return userToken.DangerousGetHandle(); else return IntPtr.Zero; #endif } set { #if MONO userToken = value; #else if (userToken != null) userToken.Close(); userToken = new SafeUserTokenHandle(value, false); #endif } } #if !MONO internal SafeUserTokenHandle SafeUserToken { get { return userToken; } } #endif /// /// /// Set the evidence for partially trusted scenarios. /// /// [Obsolete("CAS policy is obsolete and will be removed in a future release of the .NET Framework." + " Please see http://go2.microsoft.com/fwlink/?LinkId=131738 for more information.")] public Evidence Evidence { get { Evidence e = null; if (evidence != null) e = evidence.Clone(); return e; } [SecurityPermissionAttribute( SecurityAction.Demand, ControlEvidence = true )] set { if (value != null) evidence = value.Clone(); else evidence = null; } } } }