public static NAnt.MSBuild.BuildEngine.Engine CreateMSEngine(NAnt.VSNet.Tasks.SolutionTask solutionTask) { if (_msbuild != null) { return(_msbuild); } try { _msbuild = NAnt.MSBuild.BuildEngine.Engine.LoadEngine(solutionTask.Project.TargetFramework); } catch (Exception e) { throw new BuildException( String.Format( "MSBuild v{0} can't be found. It is needed for building MSBuild projects. VS2005 and later is using MSBuild projects for C# and VB", solutionTask.Project.TargetFramework.Version), Location.UnknownLocation, e); } _msbuild.UnregisterAllLoggers(); NAntLoggerVerbosity _verbosity = solutionTask.Verbose ? NAntLoggerVerbosity.Normal : NAntLoggerVerbosity.Minimal; NAntLogger _logger = NAntLogger.Create(solutionTask.Project.TargetFramework, solutionTask, _verbosity, _msbuild); if (_logger != null) { _msbuild.RegisterLogger(_logger); } solutionTask.Log(Level.Verbose, "Using MSBuild version {0}.", FileVersionInfo.GetVersionInfo(_msbuild.Assembly.Location).ProductVersion); return(_msbuild); }
internal static NAntLogger Create(NAnt.Core.FrameworkInfo framework, Task task, NAntLoggerVerbosity verbosity, NAnt.MSBuild.BuildEngine.Engine engine) { CodeDomProvider codeDomProvider = CodeDomProvider.CreateProvider("C#"); CompilerParameters par = new CompilerParameters(); AssemblyName msbuildFrameworkName = engine.Assembly.GetName(); msbuildFrameworkName.Name = "Microsoft.Build.Framework"; Assembly msbuildFramework = Assembly.Load(msbuildFrameworkName); par.ReferencedAssemblies.Add(msbuildFramework.Location); par.ReferencedAssemblies.Add(typeof(NAnt.Core.Task).Assembly.Location); par.ReferencedAssemblies.Add(typeof(NAntLogger).Assembly.Location); par.GenerateInMemory = true; CompilerResults res = codeDomProvider.CompileAssemblyFromSource(par, _impl); if (res.Errors.HasErrors) { return null; } Type t = res.CompiledAssembly.GetType("NAntLoggerImpl"); return (NAntLogger)Activator.CreateInstance(t, task, verbosity); }
internal static NAntLogger Create(NAnt.Core.FrameworkInfo framework, Task task, NAntLoggerVerbosity verbosity, NAnt.MSBuild.BuildEngine.Engine engine) { CodeDomProvider codeDomProvider = CodeDomProvider.CreateProvider("C#"); CompilerParameters par = new CompilerParameters(); AssemblyName msbuildFrameworkName = engine.Assembly.GetName(); msbuildFrameworkName.Name = "Microsoft.Build.Framework"; Assembly msbuildFramework = Assembly.Load(msbuildFrameworkName); par.ReferencedAssemblies.Add(msbuildFramework.Location); par.ReferencedAssemblies.Add(typeof(NAnt.Core.Task).Assembly.Location); par.ReferencedAssemblies.Add(typeof(NAntLogger).Assembly.Location); par.GenerateInMemory = true; CompilerResults res = codeDomProvider.CompileAssemblyFromSource(par, _impl); if (res.Errors.HasErrors) { return(null); } Type t = res.CompiledAssembly.GetType("NAntLoggerImpl"); return((NAntLogger)Activator.CreateInstance(t, task, verbosity)); }