protected override void SetCustomOption(String name, Object value){
try{
if (String.Compare(name, "CLSCompliant", StringComparison.OrdinalIgnoreCase) == 0)
this.isCLSCompliant = (bool)value;
else if (String.Compare(name, "fast", StringComparison.OrdinalIgnoreCase) == 0)
this.doFast = (bool)value;
else if (String.Compare(name, "output", StringComparison.OrdinalIgnoreCase) == 0){
if (value is String){
this.PEFileName = (String)value;
this.doSaveAfterCompile = true;
}
}else if (String.Compare(name, "PEFileKind", StringComparison.OrdinalIgnoreCase) == 0)
this.PEFileKind = (PEFileKinds)value;
else if (String.Compare(name, "PortableExecutableKind", StringComparison.OrdinalIgnoreCase) == 0)
this.PEKindFlags = (PortableExecutableKinds)value;
else if (String.Compare(name, "ImageFileMachine", StringComparison.OrdinalIgnoreCase) == 0)
this.PEMachineArchitecture = (ImageFileMachine)value;
else if (String.Compare(name, "ReferenceLoaderAPI", StringComparison.OrdinalIgnoreCase) == 0) {
String loaderAPI = (string)value;
if (String.Compare(loaderAPI, "LoadFrom", StringComparison.OrdinalIgnoreCase) == 0)
this.ReferenceLoaderAPI = LoaderAPI.LoadFrom;
else if (String.Compare(loaderAPI, "LoadFile", StringComparison.OrdinalIgnoreCase) == 0)
this.ReferenceLoaderAPI = LoaderAPI.LoadFile;
else if (String.Compare(loaderAPI, "ReflectionOnlyLoadFrom", StringComparison.OrdinalIgnoreCase) == 0)
this.ReferenceLoaderAPI = LoaderAPI.ReflectionOnlyLoadFrom;
else
throw new VsaException(VsaError.OptionInvalid);
}
else if (String.Compare(name, "print", StringComparison.OrdinalIgnoreCase) == 0)
this.doPrint = (bool)value;
else if (String.Compare(name, "UseContextRelativeStatics", StringComparison.OrdinalIgnoreCase) == 0)
this.doCRS = (bool)value;
// the next two are needed because of the ICompiler interface. They should not fail even though they may not do anything
else if (String.Compare(name, "optimize", StringComparison.OrdinalIgnoreCase) == 0)
return;
else if (String.Compare(name, "define", StringComparison.OrdinalIgnoreCase) == 0)
return;
else if (String.Compare(name, "defines", StringComparison.OrdinalIgnoreCase) == 0)
this.Defines = (Hashtable)value;
else if (String.Compare(name, "ee", StringComparison.OrdinalIgnoreCase) == 0)
VsaEngine.executeForJSEE = (Boolean)value;
else if (String.Compare(name, "version", StringComparison.OrdinalIgnoreCase) == 0)
this.versionInfo = (Version)value;
else if (String.Compare(name, "VersionSafe", StringComparison.OrdinalIgnoreCase) == 0)
this.versionSafe = (Boolean)value;
else if (String.Compare(name, "libpath", StringComparison.OrdinalIgnoreCase) == 0)
this.libpath = (String)value;
else if (String.Compare(name, "warnaserror", StringComparison.OrdinalIgnoreCase) == 0)
this.doWarnAsError = (bool)value;
else if (String.Compare(name, "WarningLevel", StringComparison.OrdinalIgnoreCase) == 0)
this.nWarningLevel = (int)value;
else if (String.Compare(name, "managedResources", StringComparison.OrdinalIgnoreCase) == 0)
this.managedResources = (ICollection)value;
else if (String.Compare(name, "alwaysGenerateIL", StringComparison.OrdinalIgnoreCase) == 0)
this.alwaysGenerateIL = (bool)value;
else if (String.Compare(name, "DebugDirectory", StringComparison.OrdinalIgnoreCase) == 0){
// use null to turn off SaveSourceState source generation
if (value == null){
this.debugDirectory = null;
return;
}
string dir = value as string;
if (dir == null)
throw new VsaException(VsaError.OptionInvalid);
try{
dir = Path.GetFullPath(dir + Path.DirectorySeparatorChar);
if (!Directory.Exists(dir))
Directory.CreateDirectory(dir);
}catch(Exception e){
// we couldn't create the specified directory
throw new VsaException(VsaError.OptionInvalid, "", e);
}catch{
// we couldn't create the specified directory
throw new VsaException(VsaError.OptionInvalid);
}
this.debugDirectory = dir;
}else if (String.Compare(name, "AutoRef", StringComparison.OrdinalIgnoreCase) == 0)
this.autoRef = (bool)value;
else
throw new VsaException(VsaError.OptionNotSupported);
}catch(VsaException){
throw;
}catch{
throw new VsaException(VsaError.OptionInvalid);
}
}