//
// 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.CSharp;

namespace CodeDomHelloWorld
{
	/// <summary>
	/// Podsumowanie dla CodeDomHelloWorldMain.
	/// </summary>
	class MicrosoftCompiler
	{
		public static void MicrosoftCompilerTest(string[] source, string[] names, string target)
		{
			CompilerError [] errors = 
				Microsoft.CSharp.Compiler.Compile(source,
				names,
				target,
				null,
				null);
			if(errors.Length > 0)
			{
				foreach(CompilerError error in errors)
				{
					Console.WriteLine("Poziom: {0}", error.ErrorLevel);
					Console.WriteLine("Wiadomość: {0}", error.ErrorMessage);
					Console.WriteLine("Numer: {0}", error.ErrorNumber);
					Console.WriteLine("Wiersz: {0}", error.SourceLine);
					Console.WriteLine("Kolumna: {0}", error.SourceColumn);
				}
			}
			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);  
			}
		}
	}
}