//
// Copyright (c) 2002
// Ronald Kevin Burton
//
// Z poniższym kodem nie jest związana żadna gwarancja poprawności działania.
// Program został dołączony do książki ".NET CLR. Księga eksperta" w celu
// ilustracji koncepcji i zasad przedstawionych w tej książce. Program może być 
// używany na własne ryzyko.
//
// Przyznaje się prawo do użycia lub kopiowania tego oprogramowania do dowolnego celu
// bez konieczności ponoszenia żadnych opłat pod warunkiem, że powyższe uwagi zostaną 
// zachowane we wszystkich kopiach. Przyznaje się także prawo do modyfikacji kodu
// i dystrybucji zmodyfikowanego kodu pod warunkiem zachowania powyższych uwag
// oraz dołączenia informacji mówiącej o modyfikacji kodu.
//
// 
using System;
using Microsoft.VisualBasic;
using System.CodeDom.Compiler;

namespace CodeDomHelloWorld
{
	/// <summary>
	/// Podsumowanie dla CodeDomHelloWorldMain.
	/// </summary>
	class VBCodeDomCompiler
	{
		public static void VBCompilerTest(string source, string target)
		{
			// Użycie interfejsu CodeProvider
			VBCodeProvider cscp = new VBCodeProvider();
			CompilerParameters param = new CompilerParameters(null, target, true);
			param.GenerateExecutable = true;
			ICodeCompiler cc = cscp.CreateCompiler();
			CompilerResults cr = cc.CompileAssemblyFromSource(param, source);
			System.Collections.Specialized.StringCollection output = cr.Output;
			foreach(string s in output)
			{
				Console.WriteLine(s);
			}

			if(cr.Errors.Count != 0)
			{
				CompilerErrorCollection es = cr.Errors;
				foreach(System.CodeDom.Compiler.CompilerError e in es)
				{
					Console.WriteLine(e.ToString());
				}
			}
			else
			{
				// Ustawienie ApplicationBase na aktualny katalog
				AppDomainSetup info = new AppDomainSetup();
				info.ApplicationBase = "file:\\\\" + System.Environment.CurrentDirectory;
				// Utworzenie domeny aplikacji z pustym dowodem
				AppDomain dom = AppDomain.CreateDomain("HelloWorld", null, info);
				dom.ExecuteAssembly(target);
				// Oczyszczenie poprzez usunięcie domeny aplikacji z pamięci
				AppDomain.Unload(dom);  
			}
		}
	}
}