⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 codecompiler.cs

📁 drools 一个开放源码的规则引擎
💻 CS
字号:
using System;
using System.Reflection;
using System.CodeDom;
using System.CodeDom.Compiler;
using Microsoft.CSharp;
using System.IO;
using System.Text;
using System.Configuration;

namespace org.drools.semantics.dotnet
{
	/// <summary>
	/// Compiles .NET code
	/// </summary>
	internal class CodeCompiler
	{
		public static Assembly Compile(CodeCompileUnit code)
		{
			CodeDomProvider provider = GetProvider();
			CompilerParameters compilerParameters = new CompilerParameters();
			compilerParameters.GenerateInMemory = true;
			compilerParameters.IncludeDebugInformation = false;
			compilerParameters.GenerateExecutable = false;

			CompilerResults results = provider.CompileAssemblyFromDom(compilerParameters,
				new CodeCompileUnit[1] { code });

			if (results.Errors.Count > 0)
			{
				StringBuilder sb = new StringBuilder();
				sb.Append("Unable to compile source code.  See below for errors and source.");
				sb.Append(Environment.NewLine);
				sb.Append(Environment.NewLine);
				sb.Append("Compiler Errors:");
				sb.Append(Environment.NewLine);

				//Append error list
				foreach (CompilerError error in results.Errors)
				{
					sb.Append(error.ToString());
					sb.Append(Environment.NewLine);
				}

				//Append source
				StringWriter sr = new StringWriter();
				provider.GenerateCodeFromCompileUnit(code, sr, new CodeGeneratorOptions());
				string source = sr.ToString();
				sr.Close();

				sb.Append(Environment.NewLine);
				sb.Append("Source Code:");
				sb.Append(Environment.NewLine);
				sb.Append(source);

				throw new CodeCompilationException(sb.ToString());
			}
			return results.CompiledAssembly;
		}

		private static CodeDomProvider GetProvider()
		{
			string providerName = ConfigurationManager.AppSettings["drools.dotnet.codedomprovider"];
			if (providerName != null && providerName.Trim().Length > 0)
			{
				Type providerType = Type.GetType(providerName);
				if (providerType == null)
				{
					throw new CodeGenerationException("Unable to find CodeDomProvider [" +
						providerName + "]");
				}
				return (CodeDomProvider) Activator.CreateInstance(providerType);
			}
			else
			{
				return new CSharpCodeProvider();
			}

		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -