private static bool IsCSharpValidIdentifier(string name) { return(CSharpCodeProviderFactory.CreateCompiler().IsValidIdentifier(name)); }
/// <exclude /> public static MethodInfo Create(IInlineFunction function, string code = null, InlineFunctionCreateMethodErrorHandler createMethodErrorHandler = null, List <string> selectedAssemblies = null) { if (string.IsNullOrWhiteSpace(code)) { try { code = GetFunctionCode(function); } catch (ThreadAbortException) { } catch (Exception ex) { if (createMethodErrorHandler != null) { createMethodErrorHandler.OnLoadSourceError(ex); } else { LogMessageIfNotShuttingDown(function, ex.Message); } return(null); } } var compilerParameters = new CompilerParameters { GenerateExecutable = false, GenerateInMemory = true }; if (selectedAssemblies == null) { IEnumerable <IInlineFunctionAssemblyReference> assemblyReferences = DataFacade.GetData <IInlineFunctionAssemblyReference>(f => f.Function == function.Id).Evaluate(); foreach (var assemblyReference in assemblyReferences) { var assemblyPath = GetAssemblyFullPath(assemblyReference.Name, assemblyReference.Location); compilerParameters.ReferencedAssemblies.Add(assemblyPath); } } else { foreach (var reference in selectedAssemblies) { compilerParameters.ReferencedAssemblies.Add(reference); } } var appCodeAssembly = AssemblyFacade.GetAppCodeAssembly(); if (appCodeAssembly != null) { compilerParameters.ReferencedAssemblies.Add(appCodeAssembly.Location); } var compiler = CSharpCodeProviderFactory.CreateCompiler(); var results = compiler.CompileAssemblyFromSource(compilerParameters, code); if (results.Errors.HasErrors) { foreach (CompilerError error in results.Errors) { if (createMethodErrorHandler != null) { createMethodErrorHandler.OnCompileError(error.Line, error.ErrorNumber, error.ErrorText); } else { LogMessageIfNotShuttingDown(function, error.ErrorText); } } return(null); } var type = results.CompiledAssembly.GetTypes().SingleOrDefault(f => f.Name == MethodClassContainerName); if (type == null) { var message = Texts.CSharpInlineFunction_OnMissingContainerType(MethodClassContainerName); if (createMethodErrorHandler != null) { createMethodErrorHandler.OnMissingContainerType(message); } else { LogMessageIfNotShuttingDown(function, message); } return(null); } if (type.Namespace != function.Namespace) { var message = Texts.CSharpInlineFunction_OnNamespaceMismatch(type.Namespace, function.Namespace); if (createMethodErrorHandler != null) { createMethodErrorHandler.OnNamespaceMismatch(message); } else { LogMessageIfNotShuttingDown(function, message); } return(null); } var methodInfo = type.GetMethods(BindingFlags.Public | BindingFlags.Static).SingleOrDefault(f => f.Name == function.Name); if (methodInfo == null) { var message = Texts.CSharpInlineFunction_OnMissionMethod(function.Name, MethodClassContainerName); if (createMethodErrorHandler != null) { createMethodErrorHandler.OnMissionMethod(message); } else { LogMessageIfNotShuttingDown(function, message); } return(null); } return(methodInfo); }