Ejemplo n.º 1
0
		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);

		}
Ejemplo n.º 2
0
		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;

		}
Ejemplo n.º 3
0
		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 });
		}
Ejemplo n.º 4
0
		private string CompileVbModule(string targetDirectory, List<AspViewFile> files, ReferencedAssembly[] references, bool createAssembly, string[] modulesToAdd)
		{
			return CompileModule(new VBCodeProvider(), targetDirectory, files, references, createAssembly, modulesToAdd);
		}
Ejemplo n.º 5
0
		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;
		}