ClrPlus.Scripting.MsBuild.Utility.MsBuildMap.MsBuildMap C# (CSharp) Method

MsBuildMap() static private method

static private MsBuildMap ( ) : System
return System
        static MsBuildMap()
        {
            TaskClasses = new AsyncLazy<Dictionary<string, MSBuildTaskType>>(() => {
                var _taskClasses = new Dictionary<string, MSBuildTaskType>();

               // ensure a few assemblies are loaded.
                AppDomain.CurrentDomain.Load(new AssemblyName("Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"));
                AppDomain.CurrentDomain.Load(new AssemblyName("Microsoft.Build.Utilities.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"));
                AppDomain.CurrentDomain.Load(new AssemblyName("Microsoft.Build.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"));

                var assemblies = AppDomain.CurrentDomain.GetAssemblies();
                foreach (var asm in assemblies) {
                    var tasks = asm.GetTypes().Where(each => each.GetInterfaces().Contains(typeof (ITask))).Where(each => each.IsPublic);
                    foreach (var t in tasks) {
                        var properties = t.GetProperties().Where(each => !_ignoreProperties.Contains(each.Name)).ToArray();
                        if (!_taskClasses.Keys.Contains(t.Name)) {
                            _taskClasses.Add(t.Name.ToLower(), new MSBuildTaskType {
                                TaskClass = t,
                                Outputs = properties.Where(each => each.GetCustomAttributes(true).Any(attr => attr.GetType().Name == "OutputAttribute")).Select(each => each.Name).ToArray(),
                                RequiredInputs = properties.Where(each => each.GetCustomAttributes(true).Any(attr => attr.GetType().Name == "RequiredAttribute")).Select(each => each.Name).ToArray(),
                                OptionalInputs = properties.Where(each => each.GetCustomAttributes(true).All(attr => attr.GetType().Name != "OutputAttribute" && attr.GetType().Name != "RequiredAttribute")).Select(each => each.Name).ToArray()
                            });
                        }

                    }
                }
                return _taskClasses;
            });
        }