public void CompileSite(string siteRoot, ReferencedAssembly[] references) { List<AspViewFile> files = GetViewFiles(siteRoot); if (files.Count == 0) return; preProcessor.Process(files); List<AspViewFile> vbFiles = files.FindAll(delegate(AspViewFile file) { return (file.Language == ScriptingLanguage.VbNet); }); List<AspViewFile> csFiles = files.FindAll(delegate(AspViewFile file) { return (file.Language == ScriptingLanguage.CSharp); }); if (options.KeepTemporarySourceFiles) { string targetTemporarySourceFilesDirectory = options.TemporarySourceFilesDirectory; if (!Path.IsPathRooted(targetTemporarySourceFilesDirectory)) targetTemporarySourceFilesDirectory = Path.Combine(targetDirectory, targetTemporarySourceFilesDirectory); if (!Directory.Exists(targetTemporarySourceFilesDirectory)) Directory.CreateDirectory(targetTemporarySourceFilesDirectory); foreach (AspViewFile file in files) SaveFile(file, targetTemporarySourceFilesDirectory); } PathToAssembly = Compile(targetDirectory, csFiles, vbFiles, references); }
public void CompileSite(string siteRoot, ReferencedAssembly[] references) { List<AspViewFile> files = GetViewFiles(siteRoot ?? defaultSiteRoot); if (files.Count == 0) return; preProcessor.Process(files); string targetDirectory = Path.Combine(siteRoot, "Bin"); if (options.KeepTemporarySourceFiles) { string targetTemporarySourceFilesDirectory = GetTargetTemporarySourceFilesDirectory(targetDirectory); foreach (AspViewFile file in files) SaveFile(file, targetTemporarySourceFilesDirectory); } CompilerResults results = Compile(files, references, targetDirectory); if (options.InMemory) Assembly = results.CompiledAssembly; else PathToAssembly = results.PathToAssembly; }
private string Compile(string targetDirectory, List<AspViewFile> csFiles, List<AspViewFile> vbFiles, ReferencedAssembly[] references) { if (vbFiles.Count == 0) return CompileCSharpModule(targetDirectory, csFiles, references, true, null); if (csFiles.Count == 0) return CompileVbModule(targetDirectory, vbFiles, references, true, null); string vbModulePath = CompileVbModule(targetDirectory, vbFiles, references, false, null); return CompileCSharpModule(targetDirectory, csFiles, references, true, new string[1] { vbModulePath }); }
private string CompileVbModule(string targetDirectory, List<AspViewFile> files, ReferencedAssembly[] references, bool createAssembly, string[] modulesToAdd) { return CompileModule(new VBCodeProvider(), targetDirectory, files, references, createAssembly, modulesToAdd); }
private string CompileModule( CodeDomProvider codeProvider, string targetDirectory, List<AspViewFile> files, ReferencedAssembly[] references, bool createAssembly, string[] modulesToAdd) { string prefix = string.IsNullOrEmpty(options.GeneratedAssemblyNamePrefix) ? null : options.GeneratedAssemblyNamePrefix + "."; if (!createAssembly) { parameters.CompilerOptions = "/t:module"; parameters.OutputAssembly = Path.Combine(targetDirectory, string.Format("{0}CompiledViews.{1}.netmodule", prefix, codeProvider.FileExtension)); } else parameters.OutputAssembly = Path.Combine(targetDirectory, prefix + "CompiledViews.dll"); List<ReferencedAssembly> actualReferences = new List<ReferencedAssembly>(); if (options.References != null) actualReferences.AddRange(options.References); if (references != null) actualReferences.AddRange(references); foreach (ReferencedAssembly reference in actualReferences) { string assemblyName = reference.Name; if (reference.Source == ReferencedAssembly.AssemblySource.BinDirectory) assemblyName = Path.Combine(targetDirectory, assemblyName); parameters.CompilerOptions += " /r:\"" + assemblyName + "\""; } if (modulesToAdd != null && modulesToAdd.Length > 0) { StringBuilder sb = new StringBuilder(); sb.Append(" /addmodule: "); foreach (string moduleToAdd in modulesToAdd) sb.Append(Path.Combine(targetDirectory, moduleToAdd)); parameters.CompilerOptions += "\"" + sb.ToString() + "\""; } CompilerResults results; if (options.KeepTemporarySourceFiles) { string targetTemporarySourceFilesDirectory = Path.Combine(targetDirectory, options.TemporarySourceFilesDirectory); List<string> fileNames = new List<string>(files.Count); foreach (AspViewFile file in files) fileNames.Add(Path.Combine(targetTemporarySourceFilesDirectory, file.FileName)); results = codeProvider.CompileAssemblyFromFile(parameters, fileNames.ToArray()); } else { List<string> sources = new List<string>(files.Count); foreach (AspViewFile file in files) sources.Add(file.ConcreteClass); results = codeProvider.CompileAssemblyFromSource(parameters, sources.ToArray()); } if (results.Errors.Count > 0) { StringBuilder message = new StringBuilder(); foreach (CompilerError err in results.Errors) message.AppendLine(err.ToString()); throw new Exception(string.Format( "Error while compiling'':\r\n{0}", message.ToString())); } return results.PathToAssembly; }