Пример #1
0
 /// <summary>
 /// Check if all files have received and proceed with building them.
 /// </summary>
 /// <param name="msg"></param>
 private void ProceedWithBuild(CommMessage msg)
 {
     if (this.files.Count > 0)
     {
         string baseDir         = CommunicationObject.GetBaseDirectory();
         bool   allFilesPresent = true;
         for (int i = 0; i < files.Count; i++)
         {
             allFilesPresent &= File.Exists(Path.Combine(baseDir, files[i]));
         }
         if (allFilesPresent)
         {
             Console.WriteLine("All files received and proceeding with build");
             if (BuildFiles())
             {
                 ForwardRequestToTestHarness();
             }
             else
             {
                 SendReadyMessage();
             }
         }
         else
         {
             Console.WriteLine("Some files are missings. Aborting build.");
             this.SendReadyMessage();
         }
     }
 }
Пример #2
0
        /// <summary>
        /// Logic to compile c# code.
        /// </summary>
        /// <param name="sessionID"></param>
        /// <param name="buildRequestDO"></param>
        private void Compile(BuildRequestDO buildRequest)
        {
            this.SessionID           = "Change";
            this.currentBuildRequest = buildRequest;
            directory = CommunicationObject.GetBaseDirectory();
            string sessionDir = Path.GetFullPath(Directory.CreateDirectory(Path.Combine(CommunicationObject.GetBaseDirectory(), this.SessionID)).FullName);

            currentBuildRequest.SessionDir = sessionDir;
            currentBuildRequest.SessionId  = this.SessionID;
            CommunicationObject.SetBaseDirectory(sessionDir);
            Console.WriteLine("Build request received. RequestID - " + SessionID);
            List <string> projectFiles = buildRequest.FilesToBuild;

            GetFilesToBuild(projectFiles);
        }
Пример #3
0
        /// <summary>
        /// Create process and run CSC.exe to build the c# files.
        /// </summary>
        private bool BuildFiles()
        {
            bool buildSuccessful = false;

            try
            {
                StringBuilder stringBuilder = new StringBuilder();
                stringBuilder.Append("Build Started:" + base.SessionID).AppendLine();
                stringBuilder.Append(WriteBuildRequestLog(currentBuildRequest)).AppendLine();

                //  Create process and start csc.
                Process p         = this.CreateProcess(CommunicationObject.GetBaseDirectory());
                string  arguments = ConstructBuildString(this.currentBuildRequest.CompilerOptions);
                p.StartInfo.Arguments = arguments;
                SendNotification(currentBuildRequest.ClientID, "[" + this.currentBuildRequest.SessionId + "] Build started.");
                p.Start();
                p.WaitForExit(30000);
                string output = p.StandardOutput.ReadToEnd();
                string error  = p.StandardError.ReadToEnd();
                buildSuccessful = DidBuildSucceed(output);

                //  Write results to console.
                stringBuilder.Append("Process complete:").AppendLine().Append(output).AppendLine().Append(error);
                string buildResult = "Build complete. Result - " + (buildSuccessful ? "Build Succeeded." : "Build Failed.");
                stringBuilder.Append(buildResult).AppendLine();
                Console.WriteLine(output + "\r\n" + error + "\r\n" + buildResult);
                Console.WriteLine("\nOutput of build: " + Path.GetFullPath(this.CommunicationObject.GetBaseDirectory()));
                Console.WriteLine(new string('-', 100));
                SendNotification(currentBuildRequest.ClientID, "[" + this.currentBuildRequest.SessionId + "] Build finished! Result - "
                                 + (DidBuildSucceed(output) ? "Build Succeeded." : "Build Failed."));

                //  Write build log file.
                string filename = WriteLogFile(stringBuilder);
                SendLogFileToRepository(filename);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Something went wrong in ChildBuilder while building files.\n" + ex.Message);
                SendNotification(currentBuildRequest.ClientID, "Build failed due to exception - " + ex.Message);
            }
            return(buildSuccessful);
        }