return ret;
}
- static void SetCommonParameters (CompilationSection config, CompilerParameters p)
+ static void SetCommonParameters (CompilationSection config, CompilerParameters p, Type compilerType, string language)
{
p.IncludeDebugInformation = config.Debug;
+ MonoSettingsSection mss = WebConfigurationManager.GetSection ("system.web/monoSettings") as MonoSettingsSection;
+ if (mss == null || !mss.UseCompilersCompatibility)
+ return;
+
+ Compiler compiler = mss.CompilersCompatibility.Get (language);
+ if (compiler == null)
+ return;
+
+ Type type = HttpApplication.LoadType (compiler.Type, false);
+ if (type != compilerType)
+ return;
+
+ p.CompilerOptions = String.Concat (p.CompilerOptions, " ", compiler.CompilerOptions);
}
internal static CompilerType GetDefaultCompilerTypeForLanguage (string language, CompilationSection configSection)
Compiler compiler = config.Compilers.Get (language);
CompilerParameters p;
+ Type type;
+
if (compiler != null) {
- Type type = HttpApplication.LoadType (compiler.Type, true);
+ type = HttpApplication.LoadType (compiler.Type, true);
p = new CompilerParameters ();
p.CompilerOptions = compiler.CompilerOptions;
p.WarningLevel = compiler.WarningLevel;
- SetCommonParameters (config, p);
+ SetCommonParameters (config, p, type, language);
return new CompilerType (type, p);
}
if (CodeDomProvider.IsDefinedLanguage (language)) {
CompilerInfo info = CodeDomProvider.GetCompilerInfo (language);
- CompilerParameters par = info.CreateDefaultCompilerParameters ();
- SetCommonParameters (config, par);
- return new CompilerType (info.CodeDomProviderType, par);
+ p = info.CreateDefaultCompilerParameters ();
+ type = info.CodeDomProviderType;
+ SetCommonParameters (config, p, type, language);
+ return new CompilerType (type, p);
}
throw new HttpException (String.Concat ("No compiler for language '", language, "'."));
--- /dev/null
+//
+// System.Web.Configuration.CompilationSection
+//
+// Authors:
+// Marek Habersack (mhabersack@novell.com)
+//
+// (c) Copyright 2008 Novell, Inc (http://www.novell.com)
+//
+
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#if NET_2_0
+using System;
+using System.Configuration;
+using System.ComponentModel;
+
+namespace System.Web.Configuration
+{
+ internal sealed class MonoSettingsSection : ConfigurationSection
+ {
+ static ConfigurationPropertyCollection properties;
+ static ConfigurationProperty compilersCompatibilityProp;
+ static ConfigurationProperty useCompilersCompatibilityProp;
+
+ static MonoSettingsSection ()
+ {
+ compilersCompatibilityProp = new ConfigurationProperty ("compilersCompatibility", typeof (CompilerCollection), null, null, PropertyHelper.DefaultValidator,
+ ConfigurationPropertyOptions.None);
+ useCompilersCompatibilityProp = new ConfigurationProperty ("useCompilersCompatibility", typeof (bool), true);
+
+ properties = new ConfigurationPropertyCollection ();
+ properties.Add (compilersCompatibilityProp);
+ properties.Add (useCompilersCompatibilityProp);
+ }
+
+ [ConfigurationProperty ("compilersCompatibility")]
+ public CompilerCollection CompilersCompatibility {
+ get { return (CompilerCollection) base [compilersCompatibilityProp]; }
+ }
+
+ [ConfigurationProperty ("useCompilersCompatibility", DefaultValue = "True")]
+ public bool UseCompilersCompatibility {
+ get { return (bool) base [useCompilersCompatibilityProp]; }
+ set { base [useCompilersCompatibilityProp] = value; }
+ }
+
+ protected override ConfigurationPropertyCollection Properties {
+ get { return properties; }
+ }
+ }
+}
+#endif