Exemplo n.º 1
0
        public override string Generate(ProjectBase Project, bool WithBeutyConfigurationName)
        {
            CSProject project = (CSProject)Project;

            CSProject.Profile profile = (CSProject.Profile)project.Profiles[0];

            XmlElement projectElement = CreateProjectElement();

            {
                XmlElement propertyGroup = CreateElement("PropertyGroup", projectElement);
                {
                    SetElementValue("AssemblyName", profile.AssemblyName, propertyGroup);
                    SetElementValue("OutputPath", profile.OutputPath, propertyGroup);
                    SetElementValue("OutputType", GetOutputType(profile), propertyGroup);
                    SetElementValue("DefineConstants", GetFlattenStringList(profile.PreprocessorDefinitions), propertyGroup);
                    SetElementValue("TargetFrameworkVersion", profile.FrameworkVersion.ToString().Replace('_', '.'), propertyGroup);
                }

                XmlElement target = CreateElement("Target", projectElement);
                {
                    target.SetAttribute("Name", "Build");

                    XmlElement makeDir = CreateElement("MakeDir", target);
                    {
                        makeDir.SetAttribute("Directories", "$(OutputPath)");
                        makeDir.SetAttribute("Condition", "!Exists('$(OutputPath)')");

                        makeDir = CreateElement("Csc", target);
                        makeDir.SetAttribute("Sources", "@(Compile)");
                        makeDir.SetAttribute("OutputAssembly", "$(OutputPath)$(AssemblyName)");

                        target = CreateElement("Target", projectElement);
                        {
                            target.SetAttribute("Name", "Clean");

                            makeDir = CreateElement("Delete", target);
                            makeDir.SetAttribute("Files", "$(OutputPath)$(AssemblyName)");

                            target = CreateElement("Target", projectElement);
                            {
                                target.SetAttribute("Name", "Rebuild");
                                target.SetAttribute("DependsOnTargets", "Clean;Build");
                            }
                        }
                    }

                    XmlElement import = CreateElement("Import", projectElement);
                    import.SetAttribute("Project", "$(MSBuildToolsPath)/Microsoft.CSharp.targets");

                    XmlElement referencesItemGroup = CreateElement("ItemGroup", projectElement);
                    AddStringListToEllementAsAttribute(referencesItemGroup, "Reference", "Include", project.ReferenceBinaryFiles);

                    XmlElement compilesItemGroup = CreateElement("ItemGroup", projectElement);
                    AddStringListToEllementAsAttribute(compilesItemGroup, "Compile", "Include", project.CompileFiles);
                }
            }

            return(projectElement.OwnerDocument.OuterXml);
        }
Exemplo n.º 2
0
        private bool BuildWrapperLibrary(List <string> WrapperFiles)
        {
            const string ProjectName = "Wrapper";

            string projectDir = EnvironmentHelper.IntermediateDirectory + ProjectName + EnvironmentHelper.PathSeparator;

            if (!Directory.Exists(projectDir))
            {
                Directory.CreateDirectory(projectDir);
            }

            CSProject csproj = new CSProject();

            CSProject.Profile profile = (CSProject.Profile)csproj.CreateProfile();

            profile.FrameworkVersion = CSProject.Profile.FrameworkVersions.v4_5;
            profile.AssemblyName     = ProjectName;
            profile.OutputPath       = projectDir + "Build" + EnvironmentHelper.PathSeparator;
            profile.IntermediatePath = projectDir;
            profile.OutputType       = ProjectBase.ProfileBase.OutputTypes.DynamicLinkLibrary;

            DateTime startTime = DateTime.Now;

            ConsoleHelper.WriteInfo("Building wrapper starts at " + startTime.ToString());

            if (WrapperFiles.Count == 0)
            {
                ConsoleHelper.WriteInfo("No building rules found, aborting process");
                return(false);
            }

            foreach (string file in WrapperFiles)
            {
                csproj.AddCompileFile(file);
            }

            if (compiler.Build(profile))
            {
                return(true);
            }

            ConsoleHelper.WriteInfo("Building wrapper takes " + (DateTime.Now - startTime).ToHHMMSS());

            return(false);
        }
Exemplo n.º 3
0
        public bool Build()
        {
            string projectDir = EnvironmentHelper.IntermediateDirectory + ProjectName + EnvironmentHelper.PathSeparator;

            if (!Directory.Exists(projectDir))
            {
                Directory.CreateDirectory(projectDir);
            }

            CSProject csproj = new CSProject();

            CSProject.Profile profile = (CSProject.Profile)csproj.CreateProfile();

            profile.FrameworkVersion = CSProject.Profile.FrameworkVersions.v4_5;
            profile.AssemblyName     = ProjectName;
            profile.OutputPath       = projectDir + "Build" + EnvironmentHelper.PathSeparator;
            profile.IntermediatePath = projectDir;
            profile.OutputType       = ProjectBase.ProfileBase.OutputTypes.DynamicLinkLibrary;
            csproj.AddReferenceBinaryFile(Assembly.GetExecutingAssembly().Location);

            string[] files = FileSystemUtilites.GetAllFiles(processDirectory, "*" + BuildRules.BuildRuleFilePostfix);

            DateTime startTime = DateTime.Now;

            ConsoleHelper.WriteInfo("Building rules starts at " + startTime.ToString());
            ConsoleHelper.WriteInfo("Found rules :");

            if (files.Length == 0)
            {
                ConsoleHelper.WriteInfo("No building rules found, aborting process");
                return(false);
            }

            foreach (string rules in files)
            {
                csproj.AddCompileFile(rules);

                ConsoleHelper.WriteInfo("\t" + Path.GetFileName(rules));
            }

            Compiler compiler = new Compiler();

            compiler.ErrorRaised += OnError;

            if (compiler.Build(profile))
            {
                Assembly rulesLibrary = Assembly.LoadFile(profile.OutputPath + ProjectName + EnvironmentHelper.DynamicLibraryExtentions);

                List <string>     buildRulesFiles = new List <string>();
                List <BuildRules> buildRules      = new List <BuildRules>();

                foreach (string buildRuleName in files)
                {
                    string fileName = Path.GetFileNameWithoutExtension(buildRuleName);
                    string typeName = fileName.Replace(".", "");
                    Type   type     = rulesLibrary.GetType(BuildRules.NamespacePrefix + typeName);

                    if (type == null)
                    {
                        ConsoleHelper.WriteWarning("In " + fileName + ", type " + typeName + " doesn't exists, building related module will be ignore");
                        continue;
                    }

                    buildRulesFiles.Add(buildRuleName);

                    BuildRules buildRule = (BuildRules)Activator.CreateInstance(type);
                    buildRule.Path = FileSystemUtilites.PathSeperatorCorrection(Path.GetDirectoryName(buildRuleName)) + EnvironmentHelper.PathSeparator;

                    Type[] types = buildRule.GetType().GetNestedTypes();

                    buildRule.Rules = new BuildRules.RuleBase[types.Length];

                    for (int i = 0; i < types.Length; ++i)
                    {
                        buildRule.Rules[i] = (BuildRules.RuleBase)Activator.CreateInstance(types[i]);
                    }

                    buildRules.Add(buildRule);
                }

                RulesFiles = buildRulesFiles.ToArray();
                Rules      = buildRules.ToArray();

                return(true);
            }

            ConsoleHelper.WriteInfo("Building rules takes " + (DateTime.Now - startTime).ToHHMMSS());

            return(false);
        }