diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj index 95ea403635..bb48b207f5 100644 --- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj +++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj @@ -57,10 +57,9 @@ - - False - + + 3.0 @@ -822,11 +821,6 @@ ICSharpCode.Core.WinForms False - - {C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F} - ICSharpCode.SharpDevelop.BuildWorker - False - {924EE450-603D-49C1-A8E5-4AFAA31CE6F3} ICSharpCode.SharpDevelop.Dom diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj.user b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj.user deleted file mode 100644 index a4461a2a13..0000000000 --- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj.user +++ /dev/null @@ -1,7 +0,0 @@ - - - 8.0.50215 - ProjectFiles - 0 - - \ No newline at end of file diff --git a/src/Main/Base/Project/Src/Project/MSBuildEngine.cs b/src/Main/Base/Project/Src/Project/MSBuildEngine.cs index 114445915a..8802a59b70 100644 --- a/src/Main/Base/Project/Src/Project/MSBuildEngine.cs +++ b/src/Main/Base/Project/Src/Project/MSBuildEngine.cs @@ -16,7 +16,6 @@ using ICSharpCode.Core; using ICSharpCode.SharpDevelop.Gui; using Microsoft.Build.BuildEngine; using Microsoft.Build.Framework; -using ICSharpCode.SharpDevelop.BuildWorker; namespace ICSharpCode.SharpDevelop.Project { @@ -105,11 +104,6 @@ namespace ICSharpCode.SharpDevelop.Project this.feedbackSink = feedbackSink; } - const EventTypes ControllableEvents = EventTypes.Message - | EventTypes.TargetStarted | EventTypes.TargetFinished - | EventTypes.TaskStarted | EventTypes.TaskFinished - | EventTypes.Unknown; - /// /// Controls whether messages should be made available to loggers. /// Logger AddIns should set this property in their CreateLogger method. @@ -168,6 +162,9 @@ namespace ICSharpCode.SharpDevelop.Project void StartBuild() { + feedbackSink.ReportError(new BuildError { ErrorText = "Compiling is not yet implemented" }); + feedbackSink.Done(false); + /* WorkerManager.ShowError = MessageService.ShowError; BuildWorker.BuildSettings settings = new BuildWorker.BuildSettings(); SharpDevelopLogger logger = new SharpDevelopLogger(this); @@ -263,7 +260,7 @@ namespace ICSharpCode.SharpDevelop.Project }; WorkerManager.StartBuild(job, settings); - } + }*/ } static int isBuildingInProcess = 0; @@ -312,6 +309,7 @@ namespace ICSharpCode.SharpDevelop.Project feedbackSink.ReportError(error); } + /* class SharpDevelopLogger : ILogger { MSBuildEngine worker; @@ -430,5 +428,6 @@ namespace ICSharpCode.SharpDevelop.Project } #endregion } + */ } } diff --git a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/BuildJob.cs b/src/Main/ICSharpCode.SharpDevelop.BuildWorker/BuildJob.cs deleted file mode 100644 index 3002226b46..0000000000 --- a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/BuildJob.cs +++ /dev/null @@ -1,90 +0,0 @@ -// -// -// -// -// $Revision$ -// - -using System; -using System.Collections.Generic; -using System.Text; - -namespace ICSharpCode.SharpDevelop.BuildWorker -{ - /// - /// The settings used to start a build. - /// - [Serializable] - public class BuildJob - { - /// - /// The value of IntPtr.Size on the host. The build worker will report an error if its IntPtr.Size - /// doesn't match. This is a safety feature to prevent compiling half of a solution using 32-bit MSBuild - /// and the other half using 64-bit MSBuild. - /// - public int IntPtrSize { get; set; } - - - public string ProjectFileName { get; set; } - public string Target { get; set; } - - EventTypes eventMask = EventTypes.All; - - /// - /// Gets/Sets the mask that controls which events are reported back to the host. - /// - public EventTypes EventMask { - get { return eventMask; } - set { eventMask = value; } - } - - Dictionary properties = new Dictionary(); - - public Dictionary Properties { - get { return properties; } - } - - List additionalImports = new List(); - - public IList AdditionalImports { - get { return additionalImports; } - } - - HashSet interestingTaskNames = new HashSet(StringComparer.OrdinalIgnoreCase); - - public ICollection InterestingTaskNames { - get { return interestingTaskNames; } - } - - public override string ToString() - { - StringBuilder b = new StringBuilder(); - b.AppendLine("BuildJob:"); - b.AppendLine(" ProjectFileName = " + ProjectFileName); - b.AppendLine(" Target = " + Target); - b.AppendLine(" " + Properties.Count + " Properties:"); - foreach (KeyValuePair pair in Properties) { - b.AppendLine(" " + pair.Key + " = " + pair.Value); - } - b.AppendLine(" " + AdditionalImports.Count + " Additional Imports:"); - foreach (string import in AdditionalImports) { - b.AppendLine(" " + import); - } - b.AppendLine(" " + InterestingTaskNames.Count + " Interesting Task Names:"); - foreach (string name in InterestingTaskNames) { - b.AppendLine(" " + name); - } - return b.ToString(); - } - - [NonSerialized] - internal Action CancelCallback; - - public void Cancel() - { - if (CancelCallback != null) { - CancelCallback(); - } - } - } -} diff --git a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/Configuration/AssemblyInfo.cs b/src/Main/ICSharpCode.SharpDevelop.BuildWorker/Configuration/AssemblyInfo.cs deleted file mode 100644 index 3d3864f779..0000000000 --- a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/Configuration/AssemblyInfo.cs +++ /dev/null @@ -1,17 +0,0 @@ -// -// -// -// -// $Revision$ -// - -using System; -using System.Reflection; -using System.Runtime.CompilerServices; - -[assembly: AssemblyTitle("SharpDevelop Build Worker")] -[assembly: AssemblyDescription("Runs MSBuild")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] -[assembly: CLSCompliant(true)] diff --git a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/EventSource.cs b/src/Main/ICSharpCode.SharpDevelop.BuildWorker/EventSource.cs deleted file mode 100644 index 7818baf8e4..0000000000 --- a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/EventSource.cs +++ /dev/null @@ -1,131 +0,0 @@ -// -// -// -// -// $Revision$ -// - -using System; -using Microsoft.Build.Framework; - -namespace ICSharpCode.SharpDevelop.BuildWorker -{ - [Flags] - public enum EventTypes - { - None = 0, - Message = 0x0001, - Error = 0x0002, - Warning = 0x0004, - BuildStarted = 0x0008, - BuildFinished = 0x0010, - ProjectStarted = 0x0020, - ProjectFinished = 0x0040, - TargetStarted = 0x0080, - TargetFinished = 0x0100, - TaskStarted = 0x0200, - TaskFinished = 0x0400, - Custom = 0x0800, - Unknown = 0x1000, - All = 0x1fff - } - - class EventSource : IEventSource - { - public event BuildMessageEventHandler MessageRaised; - public event BuildErrorEventHandler ErrorRaised; - public event BuildWarningEventHandler WarningRaised; - public event BuildStartedEventHandler BuildStarted; - public event BuildFinishedEventHandler BuildFinished; - public event ProjectStartedEventHandler ProjectStarted; - public event ProjectFinishedEventHandler ProjectFinished; - public event TargetStartedEventHandler TargetStarted; - public event TargetFinishedEventHandler TargetFinished; - public event TaskStartedEventHandler TaskStarted; - public event TaskFinishedEventHandler TaskFinished; - public event CustomBuildEventHandler CustomEventRaised; - public event BuildStatusEventHandler StatusEventRaised; - - public event AnyEventHandler AnyEventRaised; - - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")] - public void RaiseEvent(BuildEventArgs e) - { - if (e is BuildStatusEventArgs) { - if (e is TaskStartedEventArgs) { - if (TaskStarted != null) - TaskStarted(this, (TaskStartedEventArgs)e); - } else if (e is TaskFinishedEventArgs) { - if (TaskFinished != null) - TaskFinished(this, (TaskFinishedEventArgs)e); - } else if (e is TargetStartedEventArgs) { - if (TargetStarted != null) - TargetStarted(this, (TargetStartedEventArgs)e); - } else if (e is TargetFinishedEventArgs) { - if (TargetFinished != null) - TargetFinished(this, (TargetFinishedEventArgs)e); - } else if (e is ProjectStartedEventArgs) { - if (ProjectStarted != null) - ProjectStarted(this, (ProjectStartedEventArgs)e); - } else if (e is ProjectFinishedEventArgs) { - if (ProjectFinished != null) - ProjectFinished(this, (ProjectFinishedEventArgs)e); - } else if (e is BuildStartedEventArgs) { - if (BuildStarted != null) - BuildStarted(this, (BuildStartedEventArgs)e); - } else if (e is BuildFinishedEventArgs) { - if (BuildFinished != null) - BuildFinished(this, (BuildFinishedEventArgs)e); - } - if (StatusEventRaised != null) - StatusEventRaised(this, (BuildStatusEventArgs)e); - } else if (e is BuildMessageEventArgs) { - if (MessageRaised != null) - MessageRaised(this, (BuildMessageEventArgs)e); - } else if (e is BuildWarningEventArgs) { - if (WarningRaised != null) - WarningRaised(this, (BuildWarningEventArgs)e); - } else if (e is BuildErrorEventArgs) { - if (ErrorRaised != null) - ErrorRaised(this, (BuildErrorEventArgs)e); - } else if (e is CustomBuildEventArgs) { - if (CustomEventRaised != null) - CustomEventRaised(this, (CustomBuildEventArgs)e); - } - - if (AnyEventRaised != null) - AnyEventRaised(this, e); - } - - public static EventTypes GetEventType(BuildEventArgs e) - { - if (e is TaskStartedEventArgs) { - return EventTypes.TaskStarted; - } else if (e is TaskFinishedEventArgs) { - return EventTypes.TaskFinished; - } else if (e is TargetStartedEventArgs) { - return EventTypes.TargetStarted; - } else if (e is TargetFinishedEventArgs) { - return EventTypes.TargetFinished; - } else if (e is BuildMessageEventArgs) { - return EventTypes.Message; - } else if (e is BuildWarningEventArgs) { - return EventTypes.Warning; - } else if (e is BuildErrorEventArgs) { - return EventTypes.Error; - } else if (e is ProjectStartedEventArgs) { - return EventTypes.ProjectStarted; - } else if (e is ProjectFinishedEventArgs) { - return EventTypes.ProjectFinished; - } else if (e is BuildStartedEventArgs) { - return EventTypes.BuildStarted; - } else if (e is BuildFinishedEventArgs) { - return EventTypes.BuildFinished; - } else if (e is CustomBuildEventArgs) { - return EventTypes.Custom; - } else { - return EventTypes.Unknown; - } - } - } -} diff --git a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/ICSharpCode.SharpDevelop.BuildWorker.csproj b/src/Main/ICSharpCode.SharpDevelop.BuildWorker/ICSharpCode.SharpDevelop.BuildWorker.csproj deleted file mode 100644 index e9d1e4cef5..0000000000 --- a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/ICSharpCode.SharpDevelop.BuildWorker.csproj +++ /dev/null @@ -1,74 +0,0 @@ - - - {C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F} - Debug - AnyCPU - Exe - ICSharpCode.SharpDevelop.BuildWorker - ICSharpCode.SharpDevelop.BuildWorker - v4.0 - False - False - 4 - false - ..\..\..\bin\ - True - ..\ICSharpCode.SharpDevelop.snk - False - File - False - -Microsoft.Globalization#CA1303 - - - true - Full - False - True - DEBUG;TRACE - - - False - None - True - False - TRACE - - - False - Auto - 4194304 - x86 - 4096 - - - - - - - - 3.5 - - - - - - - Configuration\GlobalAssemblyInfo.cs - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/Interprocess/HostProcess.cs b/src/Main/ICSharpCode.SharpDevelop.BuildWorker/Interprocess/HostProcess.cs deleted file mode 100644 index 30f9d45384..0000000000 --- a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/Interprocess/HostProcess.cs +++ /dev/null @@ -1,112 +0,0 @@ -// -// -// -// -// $Revision$ -// - -using System; -using System.Diagnostics; -using System.Globalization; -using System.IO; -using System.Net; -using System.Net.Sockets; -using System.Reflection; -using System.Threading; - -namespace ICSharpCode.SharpDevelop.BuildWorker.Interprocess -{ - /// - /// Used in the worker process to refer to the host. - /// - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1001:TypesThatOwnDisposableFieldsShouldBeDisposable")] - public class HostProcess - { - readonly object workerObject; - - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1720:AvoidTypeNamesInParameters")] - public HostProcess(object workerObject) - { - if (workerObject == null) - throw new ArgumentNullException("workerObject"); - this.workerObject = workerObject; - } - - TcpClient client; - PacketReceiver receiver; - PacketSender sender; - - ManualResetEvent shutdownEvent; - bool connectionIsLost; - - internal const int SendKeepAliveInterval = 10000; - - public void WorkerProcessMain(string argument, string passwordBase64) - { - int port = int.Parse(argument, CultureInfo.InvariantCulture); - - client = new TcpClient(); - client.Connect(new IPEndPoint(IPAddress.Loopback, port)); - Stream stream = client.GetStream(); - receiver = new PacketReceiver(); - sender = new PacketSender(stream); - shutdownEvent = new ManualResetEvent(false); - receiver.ConnectionLost += OnConnectionLost; - receiver.PacketReceived += OnPacketReceived; - sender.WriteFailed += OnConnectionLost; - - // send password - sender.Send(Convert.FromBase64String(passwordBase64)); - - receiver.StartReceive(stream); - while (!shutdownEvent.WaitOne(SendKeepAliveInterval, false)) { - Program.Log("Sending keep-alive packet"); - sender.Send(new byte[0]); - } - - Program.Log("Closing client (end of WorkerProcessMain)"); - client.Close(); - shutdownEvent.Close(); - } - - public void Disconnect() - { - client.Close(); - } - - public void CallMethodOnHost(string methodName, params object[] args) - { - Program.Log("CallMethodOnHost: " + methodName); - sender.Send(WorkerProcess.SerializeObject(new WorkerProcess.MethodCall(methodName, args))); - } - - void OnConnectionLost(object sender, EventArgs e) - { - lock (this) { - if (connectionIsLost) - return; - Program.Log("OnConnectionLost"); - connectionIsLost = true; - shutdownEvent.Set(); - } - } - - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")] - void OnPacketReceived(object sender, PacketReceivedEventArgs e) - { - Program.Log("OnPacketReceived"); - if (e.Packet.Length != 0) { - try { - WorkerProcess.MethodCall mc = (WorkerProcess.MethodCall)WorkerProcess.DeserializeObject(e.Packet); - mc.CallOn(workerObject); - } catch (TargetInvocationException ex) { - Program.Log(ex.ToString()); - CallMethodOnHost("ReportException", ex.InnerException.ToString()); - } catch (Exception ex) { - Program.Log(ex.ToString()); - CallMethodOnHost("ReportException", ex.ToString()); - } - } - } - } -} diff --git a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/Interprocess/IHostObject.cs b/src/Main/ICSharpCode.SharpDevelop.BuildWorker/Interprocess/IHostObject.cs deleted file mode 100644 index df1e484c6c..0000000000 --- a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/Interprocess/IHostObject.cs +++ /dev/null @@ -1,16 +0,0 @@ -// -// -// -// -// $Revision$ -// - -using System; - -namespace ICSharpCode.SharpDevelop.BuildWorker.Interprocess -{ - public interface IHostObject - { - void ReportException(string exceptionText); - } -} diff --git a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/Interprocess/PacketReceiver.cs b/src/Main/ICSharpCode.SharpDevelop.BuildWorker/Interprocess/PacketReceiver.cs deleted file mode 100644 index ad9700d731..0000000000 --- a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/Interprocess/PacketReceiver.cs +++ /dev/null @@ -1,148 +0,0 @@ -// -// -// -// -// $Revision$ -// - -using System; -using System.Net; -using System.Net.Sockets; -using System.Diagnostics; -using System.IO; -using System.Runtime; -using System.Runtime.Serialization; -using System.Runtime.Serialization.Formatters; -using System.Runtime.Serialization.Formatters.Binary; - -namespace ICSharpCode.SharpDevelop.BuildWorker.Interprocess -{ - public sealed class PacketReceiver - { - Stream stream; - byte[] buffer = new byte[10000]; - int bufferReadOffset; - - public void StartReceive(Stream stream) - { - if (stream == null) - throw new ArgumentNullException("stream"); - if (this.stream != null) - throw new InvalidOperationException("StartReceive can be called only once."); - this.stream = stream; - try { - stream.BeginRead(buffer, 0, buffer.Length, OnReceive, null); - } catch (ObjectDisposedException) { - OnConnectionLost(); - } catch (IOException) { - OnConnectionLost(); - } - } - - int maxPacketSize = int.MaxValue - 20000; - - /// - /// Gets/Sets the maximum allowed packet size in bytes. - /// - public int MaxPacketSize { - get { return maxPacketSize; } - set { - if (value < 1) - throw new ArgumentOutOfRangeException("value", value, "MaxPacketSize must be >0"); - maxPacketSize = value; - } - } - - void OnReceive(IAsyncResult ar) - { - int bytes; - try { - bytes = stream.EndRead(ar); - } catch (ObjectDisposedException) { - OnConnectionLost(); - return; - } catch (IOException) { - OnConnectionLost(); - return; - } - if (bytes == 0) { - // 0 bytes read indicates the end of the stream - OnConnectionLost(); - return; - } - bufferReadOffset += bytes; - int packetStart = 0; - int packetSize = -1; - while (bufferReadOffset >= packetStart + 4) { - packetSize = BitConverter.ToInt32(buffer, packetStart); - if (packetSize < 4) - throw new ProtocolViolationException("packetSize must be > 4"); - if (packetSize - 4 > MaxPacketSize) - throw new ProtocolViolationException("packetSize must be smaller than MaxPacketSize"); - if (bufferReadOffset >= packetStart + packetSize) { - //Debug.WriteLine("receiving packet of size " + packetSize); - byte[] packet = new byte[packetSize - 4]; - Array.Copy(buffer, packetStart + 4, packet, 0, packet.Length); - OnPacketReceived(packet); - packetStart += packetSize; - } else { - break; - } - } - if (packetStart != 0) { - // copy half-received packet to the beginning of the buffer - int copyAmount = bufferReadOffset - packetStart; - for (int i = 0; i < copyAmount; i++) { - buffer[i] = buffer[i + packetStart]; - } - bufferReadOffset = copyAmount; - } - if (packetSize > buffer.Length) { - Debug.WriteLine("resizing receive buffer for packet of size " + packetSize); - Array.Resize(ref buffer, Math.Max(packetSize, buffer.Length * 2)); - } - if (bufferReadOffset >= buffer.Length) { - // should never happen - the buffer now is large enough to contain the packet, - // and we would have already processed the packet if received it completely - throw new InvalidOperationException("trying to read 0 bytes from socket"); - } - try { - stream.BeginRead(buffer, bufferReadOffset, buffer.Length - bufferReadOffset, OnReceive, null); - } catch (ObjectDisposedException) { - OnConnectionLost(); - } catch (IOException) { - OnConnectionLost(); - } - } - - void OnConnectionLost() - { - if (ConnectionLost != null) - ConnectionLost(this, EventArgs.Empty); - } - - void OnPacketReceived(byte[] packet) - { - if (PacketReceived != null) - PacketReceived(this, new PacketReceivedEventArgs(packet)); - } - - public event EventHandler ConnectionLost; - public event EventHandler PacketReceived; - } - - public class PacketReceivedEventArgs : EventArgs - { - byte[] packet; - - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")] - public byte[] Packet { - get { return packet; } - } - - public PacketReceivedEventArgs(byte[] packet) - { - this.packet = packet; - } - } -} diff --git a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/Interprocess/PacketSender.cs b/src/Main/ICSharpCode.SharpDevelop.BuildWorker/Interprocess/PacketSender.cs deleted file mode 100644 index 61b5570bf8..0000000000 --- a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/Interprocess/PacketSender.cs +++ /dev/null @@ -1,70 +0,0 @@ -// -// -// -// -// $Revision$ -// - -using System; -using System.IO; -using System.Threading; - -namespace ICSharpCode.SharpDevelop.BuildWorker.Interprocess -{ - /// - /// Description of PacketSender. - /// - public sealed class PacketSender - { - Stream targetStream; - public PacketSender(Stream stream) - { - if (stream == null) - throw new ArgumentNullException("stream"); - targetStream = stream; - } - - public void Send(byte[] packet) - { - if (packet == null) - throw new ArgumentNullException("packet"); - Send(new MemoryStream(packet, false)); - } - - public void Send(Stream stream) - { - if (stream == null) - throw new ArgumentNullException("stream"); - byte[] buffer = new byte[4 + stream.Length]; - unchecked { - buffer[0] = (byte)buffer.Length; - buffer[1] = (byte)(buffer.Length >> 8); - buffer[2] = (byte)(buffer.Length >> 16); - buffer[3] = (byte)(buffer.Length >> 24); - } - int pos = 4; - int c; - do { - c = stream.Read(buffer, pos, buffer.Length - pos); - pos += c; - } while (c > 0); - try { - targetStream.Write(buffer, 0, buffer.Length); - } catch (IOException ex) { - ICSharpCode.SharpDevelop.BuildWorker.Program.Log(ex.ToString()); - OnWriteFailed(); - } catch (ObjectDisposedException ex) { - ICSharpCode.SharpDevelop.BuildWorker.Program.Log(ex.ToString()); - OnWriteFailed(); - } - } - - void OnWriteFailed() - { - if (WriteFailed != null) - WriteFailed(this, EventArgs.Empty); - } - - public event EventHandler WriteFailed; - } -} diff --git a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/Interprocess/WorkerProcess.cs b/src/Main/ICSharpCode.SharpDevelop.BuildWorker/Interprocess/WorkerProcess.cs deleted file mode 100644 index 8d10b78fcf..0000000000 --- a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/Interprocess/WorkerProcess.cs +++ /dev/null @@ -1,270 +0,0 @@ -// -// -// -// -// $Revision$ -// - -using System; -using System.Diagnostics; -using System.Globalization; -using System.IO; -using System.Net; -using System.Net.Sockets; -using System.Reflection; -using System.Runtime.Serialization; -using System.Runtime.Serialization.Formatters; -using System.Runtime.Serialization.Formatters.Binary; -using System.Security.Cryptography; -using System.Threading; - -namespace ICSharpCode.SharpDevelop.BuildWorker.Interprocess -{ - /// - /// Manages a worker process that communicates with the host using a local TCP connection. - /// - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1001:TypesThatOwnDisposableFieldsShouldBeDisposable")] - public sealed class WorkerProcess - { - readonly object hostObject; - - public WorkerProcess(IHostObject hostObject) - { - if (hostObject == null) - throw new ArgumentNullException("hostObject"); - this.hostObject = hostObject; - } - - TcpListener listener; - Process process; - - TcpClient client; - PacketSender sender; - PacketReceiver receiver; - - // We use TCP, so we'll have to deal with "attackers" trying to hijack our connection. - // There are two lines of defense: - // 1. the only local connections are accepted - // 2. the client must authenticate with a random password - // We're not protecting against DOS - we're only vulnerable to local attackers during a short - // time frame. The password is only to defend against deserializing arbitrary objects from - // unauthenticated clients. - // We probably should use Named Pipes instead of TCP. - byte[] password; - bool clientAuthenticated; - - public void Start(ProcessStartInfo info) - { - if (info == null) - throw new ArgumentNullException("info"); - - password = new byte[16]; - new RNGCryptoServiceProvider().GetBytes(password); - - listener = new TcpListener(IPAddress.Loopback, 0); - listener.Start(); - string argument = ((IPEndPoint)listener.LocalEndpoint).Port.ToString(CultureInfo.InvariantCulture); - - string oldArguments = info.Arguments; - info.Arguments += " " + argument + " " + Convert.ToBase64String(password); - process = Process.Start(info); - // "manual process start" - useful for profiling the build worker - //System.Windows.Forms.MessageBox.Show(info.Arguments); - //process = Process.GetProcessesByName("ICSharpCode.SharpDevelop.BuildWorker")[0]; - - info.Arguments = oldArguments; - - SetTimeout(); - listener.BeginAcceptTcpClient(OnAcceptTcpClient, null); - } - - Timer currentTimer; - - void SetTimeout() - { - lock (this) { - ClearTimeout(); - currentTimer = new Timer(OnTimeout, null, HostProcess.SendKeepAliveInterval * 5 / 2, -1); - } - } - - void ClearTimeout() - { - lock (this) { - if (currentTimer != null) { - currentTimer.Dispose(); - currentTimer = null; - } - } - } - - void OnTimeout(object state) - { - Program.Log("OnTimeout"); - Kill(); - } - - void OnAcceptTcpClient(IAsyncResult ar) - { - clientAuthenticated = false; - SetTimeout(); - try { - client = listener.EndAcceptTcpClient(ar); - } catch (SocketException) { - // error connecting - } - listener.Stop(); - listener = null; - - if (client == null) { - OnConnectionLost(null, null); - } else { - Stream stream = client.GetStream(); - receiver = new PacketReceiver(); - sender = new PacketSender(stream); - receiver.ConnectionLost += OnConnectionLost; - receiver.PacketReceived += OnPacketReceived; - - receiver.StartReceive(stream); - OnReady(); - } - } - - public void Shutdown() - { - Program.Log("Shutdown"); - OnWorkerLost(); - if (client != null) { - client.Close(); - } - } - - void OnConnectionLost(object sender, EventArgs e) - { - Program.Log("OnConnectionLost"); - SetTimeout(); - OnWorkerLost(); - } - - void OnPacketReceived(object sender, PacketReceivedEventArgs e) - { - SetTimeout(); - if (e.Packet.Length != 0) { - if (clientAuthenticated) { - MethodCall mc = (MethodCall)DeserializeObject(e.Packet); - mc.CallOn(hostObject); - } else { - if (ArrayEquals(e.Packet, password)) { - clientAuthenticated = true; - } else { - Kill(); - throw new InvalidOperationException("Worker process authentication failed."); - } - } - } - } - - static bool ArrayEquals(byte[] a, byte[] b) - { - if (a.Length != b.Length) - return false; - for (int i = 0; i < a.Length; i++) { - if (a[i] != b[i]) - return false; - } - return true; - } - - public void Kill() - { - Program.Log("Kill"); - ClearTimeout(); - OnWorkerLost(); - if (client != null) { - client.Close(); - client = null; - } - if (process != null) { - try { - if (!process.HasExited) { - process.Kill(); - } - } catch (InvalidOperationException) { - // may occur when the worker process crashes - } - process = null; - } - } - - int workerIsLost; - - void OnReady() - { - if (workerIsLost == 1) - return; - Program.Log("OnReady"); - if (Ready != null) - Ready(this, EventArgs.Empty); - } - - void OnWorkerLost() - { - if (Interlocked.Exchange(ref workerIsLost, 1) == 1) - return; - Program.Log("OnWorkerLost"); - if (WorkerLost != null) - WorkerLost(this, EventArgs.Empty); - } - - /// - /// Occurs when the worker process is ready to execute a job. - /// - public event EventHandler Ready; - - /// - /// Occurs when the connection to the worker process broke. - /// - public event EventHandler WorkerLost; - - public void CallMethodOnWorker(string methodName, params object[] args) - { - Debug.WriteLine("CallMethodOnWorker: " + methodName); - sender.Send(SerializeObject(new MethodCall(methodName, args))); - } - - internal static MemoryStream SerializeObject(object obj) - { - MemoryStream ms = new MemoryStream(); - BinaryFormatter bf = new BinaryFormatter(); - bf.Serialize(ms, obj); - ms.Position = 0; - return ms; - } - - internal static object DeserializeObject(byte[] packet) - { - BinaryFormatter bf = new BinaryFormatter(); - return bf.Deserialize(new MemoryStream(packet, false)); - } - - [Serializable] - internal class MethodCall - { - public readonly string MethodName; - public readonly object[] Arguments; - - public MethodCall(string methodName, object[] arguments) - { - this.MethodName = methodName; - this.Arguments = arguments; - } - - public void CallOn(object target) - { - target.GetType().InvokeMember(MethodName, - BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance, - null, target, Arguments, CultureInfo.InvariantCulture); - } - } - } -} diff --git a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/Program.cs b/src/Main/ICSharpCode.SharpDevelop.BuildWorker/Program.cs deleted file mode 100644 index bf01824377..0000000000 --- a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/Program.cs +++ /dev/null @@ -1,477 +0,0 @@ -// -// -// -// -// $Revision$ -// - -// activate this define to see the build worker window -//#define WORKERDEBUG - -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using System.Runtime.Serialization; -using System.Threading; - -using ICSharpCode.SharpDevelop.BuildWorker.Interprocess; -using Microsoft.Build.BuildEngine; -using Microsoft.Build.Framework; - -namespace ICSharpCode.SharpDevelop.BuildWorker -{ - class Program - { - static HostProcess host; - BuildJob currentJob; - bool requestCancellation; - - [STAThread] - internal static void Main(string[] args) - { - AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(AppDomain_CurrentDomain_UnhandledException); - - if (args.Length == 3 && args[0] == "worker") { - try { - host = new HostProcess(new Program()); - host.WorkerProcessMain(args[1], args[2]); - } catch (Exception ex) { - ShowMessageBox(ex.ToString()); - } - } else { - Console.WriteLine("ICSharpCode.SharpDevelop.BuildWorker.exe is used to compile " + - "MSBuild projects inside SharpDevelop."); - Console.WriteLine("If you want to compile projects on the command line, use " + - "MSBuild.exe (part of the .NET Framework)"); - } - } - - static void AppDomain_CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) - { - ShowMessageBox(e.ExceptionObject.ToString()); - } - - #if RELEASE && WORKERDEBUG - #error WORKERDEBUG must not be defined if RELEASE is defined - #endif - - internal static ProcessStartInfo CreateStartInfo() - { - ProcessStartInfo info = new ProcessStartInfo(typeof(Program).Assembly.Location); - info.WorkingDirectory = Path.GetDirectoryName(info.FileName); - info.Arguments = "worker"; - info.UseShellExecute = false; - #if RELEASE || !WORKERDEBUG - info.CreateNoWindow = true; - #endif - return info; - } - - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1300:SpecifyMessageBoxOptions")] - internal static void ShowMessageBox(string text) - { - System.Windows.Forms.MessageBox.Show(text, "SharpDevelop Build Worker Process"); - } - - [Conditional("DEBUG")] - internal static void Log(string text) - { - Debug.WriteLine(text); - #if WORKERDEBUG - DateTime now = DateTime.Now; - Console.WriteLine(now.ToString() + "," + now.Millisecond.ToString("d3") + " " + text); - #endif - } - - // Called with CallMethodOnWorker - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - public void StartBuild(BuildJob job) - { - if (job == null) - throw new ArgumentNullException("job"); - lock (this) { - if (currentJob != null) - throw new InvalidOperationException("Already running a job"); - currentJob = job; - requestCancellation = false; - } - #if WORKERDEBUG - Console.Title = "BuildWorker - " + Path.GetFileName(job.ProjectFileName); - #endif - Program.Log("Got job:"); - Program.Log(job.ToString()); - Program.Log("Start build thread"); - Thread thread = new Thread(RunThread); - thread.Name = "Build thread"; - thread.SetApartmentState(ApartmentState.STA); - thread.Start(); - } - - // Called with CallMethodOnWorker - //[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - // TODO: make use of CancelBuild - public void CancelBuild() - { - lock (this) { - requestCancellation = true; - } - } - - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")] - void RunThread() - { - Program.Log("In build thread"); - bool success = false; - try { - success = DoBuild(); - } catch (Exception ex) { - host.CallMethodOnHost("ReportException", ex.ToString()); - } finally { - Program.Log("BuildDone"); - - #if WORKERDEBUG - Console.Title = "BuildWorker - no job"; - DisplayEventCounts(); - #endif - - lock (this) { - currentJob = null; - } - // in the moment we call BuildDone, we can get the next job - host.CallMethodOnHost("BuildDone", success); - } - } - - Engine CreateEngine() - { - Engine engine = new Engine(ToolsetDefinitionLocations.Registry - | ToolsetDefinitionLocations.ConfigurationFile); - - engine.RegisterLogger(new ForwardingLogger(this)); - //engine.RegisterLogger(new ConsoleLogger(LoggerVerbosity.Diagnostic)); - - return engine; - } - - EventSource hostEventSource; - - internal void BuildInProcess(BuildSettings settings, BuildJob job) - { - lock (this) { - if (currentJob != null) - throw new InvalidOperationException("Already running a job"); - currentJob = job; - requestCancellation = false; - hostEventSource = new EventSource(); - } - job.CancelCallback = delegate { - lock (this) { - if (currentJob == job) { - requestCancellation = true; - } - } - }; - bool success = false; - try { - foreach (ILogger logger in settings.Logger) { - logger.Initialize(hostEventSource); - } - success = DoBuild(); - foreach (ILogger logger in settings.Logger) { - logger.Shutdown(); - } - } finally { - lock (this) { - currentJob = null; - } - if (settings.BuildDoneCallback != null) - settings.BuildDoneCallback(success); - } - } - - Engine engine; - Dictionary lastJobProperties; - - // Fix for SD2-1533 - Project configurations get confused - // Whenever the global properties change, we have to create a new Engine - // to ensure MSBuild doesn't cache old paths - bool GlobalPropertiesChanged(Dictionary newJobProperties) - { - Debug.Assert(newJobProperties != null); - if (lastJobProperties == null || lastJobProperties.Count != newJobProperties.Count) { - Log("Recreating engine: Number of build properties changed"); - return true; - } - foreach (KeyValuePair pair in lastJobProperties) { - string val; - if (!newJobProperties.TryGetValue(pair.Key, out val)) { - Log("Recreating engine: Build property removed: " + pair.Key); - return true; - } - if (val != pair.Value) { - Log("Recreating engine: Build property changed: " + pair.Key); - return true; - } - } - return false; - } - - bool DoBuild() - { - if (currentJob.IntPtrSize != IntPtr.Size) - throw new ApplicationException("Incompatible IntPtr.Size between host and worker"); - - if (engine == null || GlobalPropertiesChanged(currentJob.Properties)) { - engine = CreateEngine(); - lastJobProperties = currentJob.Properties; - engine.GlobalProperties.Clear(); - foreach (KeyValuePair pair in currentJob.Properties) { - engine.GlobalProperties.SetProperty(pair.Key, pair.Value); - } - } - - Log("Loading " + currentJob.ProjectFileName); - Project project = LoadProject(engine, currentJob.ProjectFileName); - if (project == null) - return false; - - if (string.IsNullOrEmpty(currentJob.Target)) { - Log("Building default target in " + currentJob.ProjectFileName); - return engine.BuildProject(project); - } else { - Log("Building target '" + currentJob.Target + "' in " + currentJob.ProjectFileName); - return engine.BuildProject(project, currentJob.Target.Split(';')); - } - } - - Project LoadProject(Engine engine, string fileName) - { - Project project = engine.CreateNewProject(); - try { - project.Load(fileName); - - // When we set BuildingInsideVisualStudio, MSBuild tries to build all projects - // every time because in Visual Studio, the host compiler does the change detection - // We override the property '_ComputeNonExistentFileProperty' which is responsible - // for recompiling each time - our _ComputeNonExistentFileProperty does nothing, - // which re-enables the MSBuild's usual change detection - project.Targets.AddNewTarget("_ComputeNonExistentFileProperty"); - - foreach (string additionalImport in currentJob.AdditionalImports) { - project.AddNewImport(additionalImport, null); - } - - return project; - } catch (ArgumentException ex) { - ReportError(ex.Message); - } catch (InvalidProjectFileException ex) { - ReportError(new BuildErrorEventArgs(ex.ErrorSubcategory, ex.ErrorCode, ex.ProjectFile, - ex.LineNumber, ex.ColumnNumber, ex.EndLineNumber, ex.EndColumnNumber, - ex.BaseMessage, ex.HelpKeyword, ex.Source)); - } - return null; - } - - void ReportError(string message) - { - ReportError(new BuildErrorEventArgs(null, null, null, -1, -1, -1, -1, - message, null, "SharpDevelopBuildWorker")); - } - - void ReportError(BuildErrorEventArgs e) - { - HostReportEvent(e); - } - - void HostReportEvent(BuildEventArgs e) - { - if (host != null) { - host.CallMethodOnHost("ReportEvent", e); - } else { - // enable error reporting for in-process builds - EventSource eventSource = hostEventSource; - if (eventSource != null) { - eventSource.RaiseEvent(e); - } - } - } - - sealed class ForwardingLogger : ILogger - { - Program program; - - public ForwardingLogger(Program program) - { - this.program = program; - } - - IEventSource eventSource; - - public LoggerVerbosity Verbosity { get; set; } - public string Parameters { get; set; } - - public void Initialize(IEventSource eventSource) - { - this.eventSource = eventSource; - EventTypes eventMask = program.currentJob.EventMask; - if ((eventMask & EventTypes.Message) != 0) - eventSource.MessageRaised += OnEvent; - if ((eventMask & EventTypes.Error) != 0) - eventSource.ErrorRaised += OnEvent; - if ((eventMask & EventTypes.Warning) != 0) - eventSource.WarningRaised += OnEvent; - if ((eventMask & EventTypes.BuildStarted) != 0) - eventSource.BuildStarted += OnEvent; - if ((eventMask & EventTypes.BuildFinished) != 0) - eventSource.BuildFinished += OnEvent; - if ((eventMask & EventTypes.ProjectStarted) != 0) - eventSource.ProjectStarted += OnEvent; - if ((eventMask & EventTypes.ProjectFinished) != 0) - eventSource.ProjectFinished += OnEvent; - if ((eventMask & EventTypes.TargetStarted) != 0) - eventSource.TargetStarted += OnEvent; - if ((eventMask & EventTypes.TargetFinished) != 0) - eventSource.TargetFinished += OnEvent; - if ((eventMask & EventTypes.TaskStarted) != 0) - eventSource.TaskStarted += OnEvent; - else - eventSource.TaskStarted += OnTaskStarted; - if ((eventMask & EventTypes.TaskFinished) != 0) - eventSource.TaskFinished += OnEvent; - else - eventSource.TaskFinished += OnTaskFinished; - if ((eventMask & EventTypes.Custom) != 0) - eventSource.CustomEventRaised += OnEvent; - if ((eventMask & EventTypes.Unknown) != 0) - eventSource.AnyEventRaised += OnUnknownEventRaised; - if (eventMask != EventTypes.All) - eventSource.AnyEventRaised += OnAnyEvent; - - #if WORKERDEBUG - eventSource.AnyEventRaised += CountEvent; - #endif - } - - public void Shutdown() - { - EventTypes eventMask = program.currentJob.EventMask; - if ((eventMask & EventTypes.Message) != 0) - eventSource.MessageRaised -= OnEvent; - if ((eventMask & EventTypes.Error) != 0) - eventSource.ErrorRaised -= OnEvent; - if ((eventMask & EventTypes.Warning) != 0) - eventSource.WarningRaised -= OnEvent; - if ((eventMask & EventTypes.BuildStarted) != 0) - eventSource.BuildStarted -= OnEvent; - if ((eventMask & EventTypes.BuildFinished) != 0) - eventSource.BuildFinished -= OnEvent; - if ((eventMask & EventTypes.ProjectStarted) != 0) - eventSource.ProjectStarted -= OnEvent; - if ((eventMask & EventTypes.ProjectFinished) != 0) - eventSource.ProjectFinished -= OnEvent; - if ((eventMask & EventTypes.TargetStarted) != 0) - eventSource.TargetStarted -= OnEvent; - if ((eventMask & EventTypes.TargetFinished) != 0) - eventSource.TargetFinished -= OnEvent; - if ((eventMask & EventTypes.TaskStarted) != 0) - eventSource.TaskStarted -= OnEvent; - else - eventSource.TaskStarted -= OnTaskStarted; - if ((eventMask & EventTypes.TaskFinished) != 0) - eventSource.TaskFinished -= OnEvent; - else - eventSource.TaskFinished -= OnTaskFinished; - if ((eventMask & EventTypes.Custom) != 0) - eventSource.CustomEventRaised -= OnEvent; - if ((eventMask & EventTypes.Unknown) != 0) - eventSource.AnyEventRaised -= OnUnknownEventRaised; - if (eventMask != EventTypes.All) - eventSource.AnyEventRaised -= OnAnyEvent; - - #if WORKERDEBUG - eventSource.AnyEventRaised -= CountEvent; - #endif - } - - // registered for AnyEventRaised to support build cancellation. - // is not registered if all events should be forwarded, in that case, OnEvent - // already handles build cancellation - void OnAnyEvent(object sender, BuildEventArgs e) - { - if (program.requestCancellation) - throw new BuildCancelException(); - } - - // used for all events that should be forwarded - void OnEvent(object sender, BuildEventArgs e) - { - if (program.requestCancellation) - throw new BuildCancelException(); - program.HostReportEvent(e); - } - - // registered for AnyEventRaised to forward unknown events - void OnUnknownEventRaised(object sender, BuildEventArgs e) - { - if (EventSource.GetEventType(e) == EventTypes.Unknown) - OnEvent(sender, e); - } - - // registered when only specific tasks should be forwarded - void OnTaskStarted(object sender, TaskStartedEventArgs e) - { - if (program.currentJob.InterestingTaskNames.Contains(e.TaskName)) - OnEvent(sender, e); - } - - // registered when only specific tasks should be forwarded - void OnTaskFinished(object sender, TaskFinishedEventArgs e) - { - if (program.currentJob.InterestingTaskNames.Contains(e.TaskName)) - OnEvent(sender, e); - } - - - #if WORKERDEBUG - void CountEvent(object sender, BuildEventArgs e) - { - Program.CountEvent(EventSource.GetEventType(e)); - } - #endif - } - - #if WORKERDEBUG - static Dictionary eventCounts = new Dictionary(); - - static void CountEvent(EventTypes e) - { - if (eventCounts.ContainsKey(e)) - eventCounts[e] += 1; - else - eventCounts[e] = 1; - } - - static void DisplayEventCounts() - { - foreach (var pair in eventCounts) { - Console.WriteLine(" " + pair.Key.ToString() + ": " + pair.Value.ToString()); - } - } - #endif - - [Serializable] - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1064:ExceptionsShouldBePublic")] - sealed class BuildCancelException : Exception - { - public BuildCancelException() - { - } - - BuildCancelException(SerializationInfo info, StreamingContext context) - : base(info, context) - { - } - } - } -} diff --git a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/WorkerManager.cs b/src/Main/ICSharpCode.SharpDevelop.BuildWorker/WorkerManager.cs deleted file mode 100644 index b28bd949f7..0000000000 --- a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/WorkerManager.cs +++ /dev/null @@ -1,274 +0,0 @@ -// -// -// -// -// $Revision$ -// - -using Microsoft.Build.Framework; -using System; -using System.Collections.Generic; -using System.Threading; -using System.Diagnostics; -using ICSharpCode.SharpDevelop.BuildWorker.Interprocess; - -namespace ICSharpCode.SharpDevelop.BuildWorker -{ - /// - /// Manages the list of running child worker processes. - /// - public static class WorkerManager - { - /// - /// Delegate executed on the host when an exception occurs. - /// - public static Action ShowError { get; set; } - - const int MaxWorkerProcessCount = 16; - - static readonly object lockObject = new object(); - static Queue outstandingBuildRuns = new Queue(); - static int workerProcessCount; - static List freeWorkerProcesses = new List(); - - static WorkerProcessHost DequeueFreeWorkerProcess() - { - WorkerProcessHost h = freeWorkerProcesses[freeWorkerProcesses.Count - 1]; - freeWorkerProcesses.RemoveAt(freeWorkerProcesses.Count - 1); - return h; - } - - public static void StartBuild(BuildJob job, BuildSettings settings) - { - if (job == null) - throw new ArgumentNullException("job"); - if (settings == null) - throw new ArgumentNullException("settings"); - - BuildRun buildRun = new BuildRun(job, settings); - lock (lockObject) { - if (freeWorkerProcesses.Count > 0) { - DequeueFreeWorkerProcess().StartBuild(buildRun); - } else { - outstandingBuildRuns.Enqueue(buildRun); - if (workerProcessCount < MaxWorkerProcessCount) { - workerProcessCount++; - (new WorkerProcessHost()).Start(); - } - } - } - } - - static Program inProcessBuildWorker; - - public static void RunBuildInProcess(BuildJob job, BuildSettings settings) - { - if (job == null) - throw new ArgumentNullException("job"); - if (settings == null) - throw new ArgumentNullException("settings"); - lock (lockObject) { - if (inProcessBuildWorker == null) - inProcessBuildWorker = new Program(); - } - inProcessBuildWorker.BuildInProcess(settings, job); - } - - static readonly object timerLock = new object(); - static Timer lastBuildDoneTimer; - - static void SetLastBuildDoneTimer() - { - lock (timerLock) { - if (lastBuildDoneTimer != null) { - lastBuildDoneTimer.Dispose(); - lastBuildDoneTimer = null; - } - lastBuildDoneTimer = new Timer(LastBuildDoneTimerCallback, null, 60000, 20000); - } - } - - static void ClearLastBuildDoneTimer() - { - lock (timerLock) { - if (lastBuildDoneTimer != null) { - lastBuildDoneTimer.Dispose(); - lastBuildDoneTimer = null; - } - } - } - - static void LastBuildDoneTimerCallback(object state) - { - lock (lockObject) { - if (freeWorkerProcesses.Count > 0) { - Debug.WriteLine("WorkerManager: shutting down free worker"); - DequeueFreeWorkerProcess().Shutdown(); - } else { - ClearLastBuildDoneTimer(); - } - } - } - - sealed class BuildRun - { - internal BuildJob job; - internal BuildSettings settings; - EventSource eventSource = new EventSource(); - - public BuildRun(BuildJob job, BuildSettings settings) - { - this.job = job; - this.settings = settings; - foreach (ILogger logger in settings.Logger) { - logger.Initialize(eventSource); - } - } - - public void RaiseError(string message) - { - Debug.WriteLine(message); - RaiseEvent(new BuildErrorEventArgs(null, null, null, -1, -1, -1, -1, message, null, "SharpDevelopBuildWorkerManager")); - } - - public void RaiseEvent(BuildEventArgs e) - { - eventSource.RaiseEvent(e); - } - - public void Done(bool success) - { - SetLastBuildDoneTimer(); - try { - foreach (ILogger logger in settings.Logger) { - logger.Shutdown(); - } - } finally { - if (settings.BuildDoneCallback != null) - settings.BuildDoneCallback(success); - } - } - } - - sealed class WorkerProcessHost : IHostObject - { - WorkerProcess process; - - internal void Start() - { - process = new WorkerProcess(this); - process.Ready += OnReady; - process.WorkerLost += OnWorkerLost; - - process.Start(Program.CreateStartInfo()); - } - - BuildRun currentBuildRun; - - // runs in lock(lockObject) - internal void StartBuild(BuildRun nextBuildRun) - { - Debug.Assert(currentBuildRun == null); - currentBuildRun = nextBuildRun; - process.CallMethodOnWorker("StartBuild", currentBuildRun.job); - } - - void OnReady(object sender, EventArgs e) - { - BuildRun nextBuildRun = null; - lock (lockObject) { - if (outstandingBuildRuns.Count > 0) - nextBuildRun = outstandingBuildRuns.Dequeue(); - else - freeWorkerProcesses.Add(this); - } - if (nextBuildRun != null) { - StartBuild(nextBuildRun); - } - } - - void OnWorkerLost(object sender, EventArgs e) - { - BuildRun buildRun; - lock (lockObject) { - workerProcessCount--; - freeWorkerProcesses.Remove(this); - if (workerProcessCount == 0 && currentBuildRun == null) { - // error starting worker => we must - // cancel all outstanding build runs to prevent them from waiting - // for a worker becoming ready when all workers are dead - while (workerProcessCount == 0 && outstandingBuildRuns.Count > 0) { - BuildRun r = outstandingBuildRuns.Dequeue(); - Monitor.Exit(lockObject); - r.RaiseError("Error starting worker process."); - r.Done(false); - Monitor.Enter(lockObject); - } - } - buildRun = Interlocked.Exchange(ref currentBuildRun, null); - } - if (buildRun != null) { - buildRun.RaiseError("Worker process lost during build"); - buildRun.Done(false); - } - } - - internal void Shutdown() - { - process.Shutdown(); - } - - // Called with CallMethodOnHost - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - public void ReportEvent(BuildEventArgs e) - { - BuildRun buildRun = currentBuildRun; - if (buildRun != null) { - buildRun.RaiseEvent(e); - } - } - - // Called with CallMethodOnHost - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - public void BuildDone(bool success) - { - BuildRun buildRun; - lock (lockObject) { - buildRun = Interlocked.Exchange(ref currentBuildRun, null); - } - if (buildRun != null) { - // OnReady must be called before buildRun.Done - the callback - // might trigger another build, and if this worker process - // isn't marked as ready, a new process will be created even - // though this one could do the work. - OnReady(null, null); - buildRun.Done(success); - } - } - - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")] - public void ReportException(string exceptionText) - { - // shutdown worker if it produced an exception - try { - process.Shutdown(); - } catch {} - - if (ShowError != null) - ShowError(new Exception(exceptionText)); - else - Program.ShowMessageBox(exceptionText); - } - } - } - - public sealed class BuildSettings - { - List logger = new List(); - public Action BuildDoneCallback { get; set; } - - public ICollection Logger { - get { return logger; } - } - } -} diff --git a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/app.config b/src/Main/ICSharpCode.SharpDevelop.BuildWorker/app.config deleted file mode 100644 index 5c14c1929e..0000000000 --- a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/app.config +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/src/SharpDevelop.sln b/src/SharpDevelop.sln index 54197ebca1..02e504c187 100644 --- a/src/SharpDevelop.sln +++ b/src/SharpDevelop.sln @@ -1,170 +1,168 @@  Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 10 -# SharpDevelop 4.0.0.1 +# Visual Studio 2008 +# SharpDevelop 3.1.0.4094 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AddIns", "AddIns", "{14A277EE-7DF1-4529-B639-7D1EF334C1C5}" ProjectSection(SolutionItems) = postProject EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Misc", "Misc", "{CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Display Bindings", "Display Bindings", "{4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}" ProjectSection(SolutionItems) = postProject EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpRefactoring", "AddIns\Misc\SharpRefactoring\SharpRefactoring.csproj", "{3CA90546-3B4C-4663-9445-C4E9371750A7}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SourceAnalysis", "AddIns\Misc\SourceAnalysis\SourceAnalysis.csproj", "86CE7B3F-6273-4215-9E36-6184D98F854E" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WorkflowDesigner", "AddIns\DisplayBindings\WorkflowDesigner\Project\WorkflowDesigner.csproj", "{533F4684-DBA6-4518-B005-C84F22A2DD57}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SearchAndReplace", "AddIns\Misc\SearchAndReplace\Project\SearchAndReplace.csproj", "{9196DD8A-B4D4-4780-8742-C5762E547FC2}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ClassDiagram", "ClassDiagram", "{DB137F0B-9B62-4232-AE92-F7BE0280B8D3}" + ProjectSection(SolutionItems) = postProject + EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddinScout", "AddIns\Misc\AddinScout\Project\AddinScout.csproj", "{4B8F0F98-8BE1-402B-AA8B-C8D548577B38}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Diagrams", "AddIns\DisplayBindings\ClassDiagram\DiagramRouter\Diagrams.csproj", "{0991423A-DBF6-4C89-B365-A1DF1EB32E42}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartPage", "AddIns\Misc\StartPage\Project\StartPage.csproj", "{7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClassDiagramAddin", "AddIns\DisplayBindings\ClassDiagram\ClassDiagramAddin\ClassDiagramAddin.csproj", "{5A1354DF-4989-4BB4-BC6B-D627C2E9FA13}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RegExpTk", "AddIns\Misc\RegExpTk\Project\RegExpTk.csproj", "{64A3E5E6-90BF-47F6-94DF-68C94B62C817}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClassCanvas", "AddIns\DisplayBindings\ClassDiagram\ClassCanvas\ClassCanvas.csproj", "{08F772A1-F0BE-433E-8B37-F6522953DB05}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FiletypeRegisterer", "AddIns\Misc\FiletypeRegisterer\Project\FiletypeRegisterer.csproj", "{D022A6CE-7438-41E8-AC64-F2DE18EC54C6}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SettingsEditor", "AddIns\DisplayBindings\SettingsEditor\Project\SettingsEditor.csproj", "{85226AFB-CE71-4851-9A75-7EEC663A8E8A}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Debugger", "Debugger", "{6604365C-C702-4C10-9BA8-637F1E3D4D0D}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "IconEditor", "IconEditor", "{0D37CE59-B0EF-4F3C-B9EB-8557E53A448B}" ProjectSection(SolutionItems) = postProject EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.Core", "AddIns\Misc\Debugger\Debugger.Core\Project\Debugger.Core.csproj", "{1D18D788-F7EE-4585-A23B-34DC8EC63CB8}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.AddIn", "AddIns\Misc\Debugger\Debugger.AddIn\Project\Debugger.AddIn.csproj", "{EC06F96A-AEEC-49D6-B03D-AB87C6EB674C}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HtmlHelp2", "AddIns\Misc\HtmlHelp2\Project\HtmlHelp2.csproj", "{918487B7-2153-4618-BBB3-344DBDDF2A2A}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddInManager", "AddIns\Misc\AddInManager\Project\AddInManager.csproj", "{F93E52FD-DA66-4CE5-A0CB-BCD902811122}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IconEditorAddIn", "AddIns\DisplayBindings\IconEditor\IconEditorAddIn\IconEditorAddIn.csproj", "{DFB936AD-90EE-4B4F-941E-4F4A636F0D92}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PInvokeAddIn", "AddIns\Misc\PInvokeAddIn\Project\PInvokeAddIn.csproj", "{5EEB99CF-EA2B-4733-80A6-CE9192D68170}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IconEditor", "AddIns\DisplayBindings\IconEditor\IconEditor\IconEditor.csproj", "{DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeCoverage", "AddIns\Misc\CodeCoverage\Project\CodeCoverage.csproj", "{08ce9972-283b-44f4-82fa-966f7dfa6b7a}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlEditor", "AddIns\DisplayBindings\XmlEditor\Project\XmlEditor.csproj", "{6B717BD1-CD5E-498C-A42E-9E6A4584DC48}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTesting", "AddIns\Misc\UnitTesting\UnitTesting.csproj", "{1F261725-6318-4434-A1B1-6C70CE4CD324}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FormsDesigner", "AddIns\DisplayBindings\FormsDesigner\Project\FormsDesigner.csproj", "{7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}" EndProject -Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "HtmlHelp2JScriptGlobals", "AddIns\Misc\HtmlHelp2\JScriptGlobals\HtmlHelp2JScriptGlobals.vbproj", "{E54A5AD2-418D-4A85-BA5E-CD803DE38715}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceEditor", "AddIns\DisplayBindings\ResourceEditor\Project\ResourceEditor.csproj", "{CBC6C247-747B-4908-B09A-4D2E0F640B6B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SubversionAddIn", "AddIns\Misc\SubversionAddIn\Project\SubversionAddIn.csproj", "{17F4D7E0-6933-4C2E-8714-FD7E98D625D5}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HexEditor", "AddIns\DisplayBindings\HexEditor\Project\HexEditor.csproj", "{E618A9CD-A39F-4925-A538-E8A3FEF24E54}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeAnalysis", "AddIns\Misc\CodeAnalysis\CodeAnalysis.csproj", "{3EAA45A9-735C-4AC7-A799-947B93EA449D}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AvalonEdit.AddIn", "AddIns\DisplayBindings\AvalonEdit.AddIn\AvalonEdit.AddIn.csproj", "{0162E499-42D0-409B-AA25-EED21F75336B}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ComponentInspector", "ComponentInspector", "{BDDDCD01-D2FE-4EAD-9425-4B6B91922C7C}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Backends", "Backends", "{FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}" ProjectSection(SolutionItems) = postProject EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ComponentInspector", "AddIns\Misc\ComponentInspector\ComponentInspector\ComponentInspector.csproj", "{000E4F64-5D0D-4EB1-B0BF-1A62ADBC6EAD}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WixBinding", "AddIns\BackendBindings\WixBinding\Project\WixBinding.csproj", "{e1b288a2-08ee-4318-8bbb-8ab72c69e33e}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ComponentInspector.AddIn", "AddIns\Misc\ComponentInspector\ComponentInspector.AddIn\ComponentInspector.AddIn.csproj", "{869951D5-A0D6-4DC6-9F1D-E6B9A12AC446}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactoryToBooConverter", "AddIns\BackendBindings\Boo\NRefactoryToBooConverter\Project\NRefactoryToBooConverter.csproj", "{DBCF20A1-BA13-4582-BFA9-74DE4D987B73}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ComponentInspector.Core", "AddIns\Misc\ComponentInspector\ComponentInspector.Core\ComponentInspector.Core.csproj", "{E6F4983F-DE41-4AEC-88E7-1FA9AFB4E6FF}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BooBinding", "AddIns\BackendBindings\Boo\BooBinding\Project\BooBinding.csproj", "{4AC2D5F1-F671-480C-A075-6BF62B3721B2}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceToolkit", "AddIns\Misc\ResourceToolkit\Project\ResourceToolkit.csproj", "{461606BD-E824-4D0A-8CBA-01810B1F5E02}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ILAsmBinding", "AddIns\BackendBindings\ILAsmBinding\Project\ILAsmBinding.csproj", "{6e59af58-f635-459a-9a35-c9ac41c00339}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReflectorAddIn", "AddIns\Misc\ReflectorAddIn\ReflectorAddIn\Project\ReflectorAddIn.csproj", "{8AA421C8-D7AF-4957-9F43-5135328ACB24}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VBNetBinding", "AddIns\BackendBindings\VBNetBinding\Project\VBNetBinding.csproj", "{BF38FB72-B380-4196-AF8C-95749D726C61}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Backends", "Backends", "{FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpBinding", "AddIns\BackendBindings\CSharpBinding\Project\CSharpBinding.csproj", "{1F1AC7CD-D154-45BB-8EAF-804CA8055F5A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Python", "Python", "{8CF9DB5A-A2F6-4A88-BABA-100912EAF6E8}" ProjectSection(SolutionItems) = postProject EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XamlBinding", "AddIns\BackendBindings\XamlBinding\XamlBinding\XamlBinding.csproj", "{7C96B65D-28A5-4F28-A35B-8D83CE831EE8}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Python.Build.Tasks", "AddIns\BackendBindings\Python\Python.Build.Tasks\Project\Python.Build.Tasks.csproj", "{D332F2D1-2CF1-43B7-903C-844BD5211A7E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PythonBinding", "AddIns\BackendBindings\Python\PythonBinding\Project\PythonBinding.csproj", "{8D732610-8FC6-43BA-94C9-7126FD7FE361}" EndProject Project("{982E8BC1-ACD7-4dbf-96AB-B2CE67D6A008}") = "FSharpBinding", "AddIns\BackendBindings\FSharp\FSharpBinding\Project\FSharpBinding.fsproj", "{99BAE3A2-C40D-40D2-A7B4-EBB4798F36E4}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Python", "Python", "{8CF9DB5A-A2F6-4A88-BABA-100912EAF6E8}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XamlBinding", "AddIns\BackendBindings\XamlBinding\XamlBinding\XamlBinding.csproj", "{7C96B65D-28A5-4F28-A35B-8D83CE831EE8}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Misc", "Misc", "{CE5B42B7-6E8C-4385-9E97-F4023FC16BF2}" ProjectSection(SolutionItems) = postProject EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PythonBinding", "AddIns\BackendBindings\Python\PythonBinding\Project\PythonBinding.csproj", "{8D732610-8FC6-43BA-94C9-7126FD7FE361}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReflectorAddIn", "AddIns\Misc\ReflectorAddIn\ReflectorAddIn\Project\ReflectorAddIn.csproj", "{8AA421C8-D7AF-4957-9F43-5135328ACB24}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Python.Build.Tasks", "AddIns\BackendBindings\Python\Python.Build.Tasks\Project\Python.Build.Tasks.csproj", "{D332F2D1-2CF1-43B7-903C-844BD5211A7E}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceToolkit", "AddIns\Misc\ResourceToolkit\Project\ResourceToolkit.csproj", "{461606BD-E824-4D0A-8CBA-01810B1F5E02}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpBinding", "AddIns\BackendBindings\CSharpBinding\Project\CSharpBinding.csproj", "{1F1AC7CD-D154-45BB-8EAF-804CA8055F5A}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ComponentInspector", "ComponentInspector", "{BDDDCD01-D2FE-4EAD-9425-4B6B91922C7C}" + ProjectSection(SolutionItems) = postProject + EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VBNetBinding", "AddIns\BackendBindings\VBNetBinding\Project\VBNetBinding.csproj", "{BF38FB72-B380-4196-AF8C-95749D726C61}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ComponentInspector.Core", "AddIns\Misc\ComponentInspector\ComponentInspector.Core\ComponentInspector.Core.csproj", "{E6F4983F-DE41-4AEC-88E7-1FA9AFB4E6FF}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ILAsmBinding", "AddIns\BackendBindings\ILAsmBinding\Project\ILAsmBinding.csproj", "{6e59af58-f635-459a-9a35-c9ac41c00339}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ComponentInspector.AddIn", "AddIns\Misc\ComponentInspector\ComponentInspector.AddIn\ComponentInspector.AddIn.csproj", "{869951D5-A0D6-4DC6-9F1D-E6B9A12AC446}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BooBinding", "AddIns\BackendBindings\Boo\BooBinding\Project\BooBinding.csproj", "{4AC2D5F1-F671-480C-A075-6BF62B3721B2}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ComponentInspector", "AddIns\Misc\ComponentInspector\ComponentInspector\ComponentInspector.csproj", "{000E4F64-5D0D-4EB1-B0BF-1A62ADBC6EAD}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactoryToBooConverter", "AddIns\BackendBindings\Boo\NRefactoryToBooConverter\Project\NRefactoryToBooConverter.csproj", "{DBCF20A1-BA13-4582-BFA9-74DE4D987B73}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeAnalysis", "AddIns\Misc\CodeAnalysis\CodeAnalysis.csproj", "{3EAA45A9-735C-4AC7-A799-947B93EA449D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WixBinding", "AddIns\BackendBindings\WixBinding\Project\WixBinding.csproj", "{e1b288a2-08ee-4318-8bbb-8ab72c69e33e}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SubversionAddIn", "AddIns\Misc\SubversionAddIn\Project\SubversionAddIn.csproj", "{17F4D7E0-6933-4C2E-8714-FD7E98D625D5}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Display Bindings", "Display Bindings", "{4EA396ED-64AD-4AD0-A67A-AB363F3E0C79}" - ProjectSection(SolutionItems) = postProject - EndProjectSection +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "HtmlHelp2JScriptGlobals", "AddIns\Misc\HtmlHelp2\JScriptGlobals\HtmlHelp2JScriptGlobals.vbproj", "{E54A5AD2-418D-4A85-BA5E-CD803DE38715}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AvalonEdit.AddIn", "AddIns\DisplayBindings\AvalonEdit.AddIn\AvalonEdit.AddIn.csproj", "{0162E499-42D0-409B-AA25-EED21F75336B}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTesting", "AddIns\Misc\UnitTesting\UnitTesting.csproj", "{1F261725-6318-4434-A1B1-6C70CE4CD324}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HexEditor", "AddIns\DisplayBindings\HexEditor\Project\HexEditor.csproj", "{E618A9CD-A39F-4925-A538-E8A3FEF24E54}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeCoverage", "AddIns\Misc\CodeCoverage\Project\CodeCoverage.csproj", "{08ce9972-283b-44f4-82fa-966f7dfa6b7a}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceEditor", "AddIns\DisplayBindings\ResourceEditor\Project\ResourceEditor.csproj", "{CBC6C247-747B-4908-B09A-4D2E0F640B6B}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PInvokeAddIn", "AddIns\Misc\PInvokeAddIn\Project\PInvokeAddIn.csproj", "{5EEB99CF-EA2B-4733-80A6-CE9192D68170}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FormsDesigner", "AddIns\DisplayBindings\FormsDesigner\Project\FormsDesigner.csproj", "{7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddInManager", "AddIns\Misc\AddInManager\Project\AddInManager.csproj", "{F93E52FD-DA66-4CE5-A0CB-BCD902811122}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlEditor", "AddIns\DisplayBindings\XmlEditor\Project\XmlEditor.csproj", "{6B717BD1-CD5E-498C-A42E-9E6A4584DC48}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HtmlHelp2", "AddIns\Misc\HtmlHelp2\Project\HtmlHelp2.csproj", "{918487B7-2153-4618-BBB3-344DBDDF2A2A}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "IconEditor", "IconEditor", "{0D37CE59-B0EF-4F3C-B9EB-8557E53A448B}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Debugger", "Debugger", "{6604365C-C702-4C10-9BA8-637F1E3D4D0D}" ProjectSection(SolutionItems) = postProject EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IconEditor", "AddIns\DisplayBindings\IconEditor\IconEditor\IconEditor.csproj", "{DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.AddIn", "AddIns\Misc\Debugger\Debugger.AddIn\Project\Debugger.AddIn.csproj", "{EC06F96A-AEEC-49D6-B03D-AB87C6EB674C}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IconEditorAddIn", "AddIns\DisplayBindings\IconEditor\IconEditorAddIn\IconEditorAddIn.csproj", "{DFB936AD-90EE-4B4F-941E-4F4A636F0D92}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.Core", "AddIns\Misc\Debugger\Debugger.Core\Project\Debugger.Core.csproj", "{1D18D788-F7EE-4585-A23B-34DC8EC63CB8}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SettingsEditor", "AddIns\DisplayBindings\SettingsEditor\Project\SettingsEditor.csproj", "{85226AFB-CE71-4851-9A75-7EEC663A8E8A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FiletypeRegisterer", "AddIns\Misc\FiletypeRegisterer\Project\FiletypeRegisterer.csproj", "{D022A6CE-7438-41E8-AC64-F2DE18EC54C6}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ClassDiagram", "ClassDiagram", "{DB137F0B-9B62-4232-AE92-F7BE0280B8D3}" - ProjectSection(SolutionItems) = postProject - EndProjectSection +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RegExpTk", "AddIns\Misc\RegExpTk\Project\RegExpTk.csproj", "{64A3E5E6-90BF-47F6-94DF-68C94B62C817}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClassCanvas", "AddIns\DisplayBindings\ClassDiagram\ClassCanvas\ClassCanvas.csproj", "{08F772A1-F0BE-433E-8B37-F6522953DB05}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartPage", "AddIns\Misc\StartPage\Project\StartPage.csproj", "{7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClassDiagramAddin", "AddIns\DisplayBindings\ClassDiagram\ClassDiagramAddin\ClassDiagramAddin.csproj", "{5A1354DF-4989-4BB4-BC6B-D627C2E9FA13}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddinScout", "AddIns\Misc\AddinScout\Project\AddinScout.csproj", "{4B8F0F98-8BE1-402B-AA8B-C8D548577B38}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Diagrams", "AddIns\DisplayBindings\ClassDiagram\DiagramRouter\Diagrams.csproj", "{0991423A-DBF6-4C89-B365-A1DF1EB32E42}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SearchAndReplace", "AddIns\Misc\SearchAndReplace\Project\SearchAndReplace.csproj", "{9196DD8A-B4D4-4780-8742-C5762E547FC2}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WorkflowDesigner", "AddIns\DisplayBindings\WorkflowDesigner\Project\WorkflowDesigner.csproj", "{533F4684-DBA6-4518-B005-C84F22A2DD57}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SourceAnalysis", "AddIns\Misc\SourceAnalysis\SourceAnalysis.csproj", "86CE7B3F-6273-4215-9E36-6184D98F854E" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpRefactoring", "AddIns\Misc\SharpRefactoring\SharpRefactoring.csproj", "{3CA90546-3B4C-4663-9445-C4E9371750A7}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{9421EDF4-9769-4BE9-B5A6-C87DE221D73C}" ProjectSection(SolutionItems) = postProject EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.AvalonEdit", "Libraries\AvalonEdit\ICSharpCode.AvalonEdit\ICSharpCode.AvalonEdit.csproj", "{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactory", "Libraries\NRefactory\Project\NRefactory.csproj", "{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TreeView", "Libraries\SharpTreeView\ICSharpCode.TreeView\ICSharpCode.TreeView.csproj", "{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TextEditor", "Libraries\ICSharpCode.TextEditor\Project\ICSharpCode.TextEditor.csproj", "{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aga.Controls", "Libraries\TreeViewAdv\Aga.Controls\Aga.Controls.csproj", "{E73BB233-D88B-44A7-A98F-D71EE158381D}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Build.Tasks", "Libraries\ICSharpCode.Build.Tasks\Project\ICSharpCode.Build.Tasks.csproj", "{4139CCF6-FB49-4A9D-B2CF-331E9EA3198D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aga.Controls", "Libraries\TreeViewAdv\Aga.Controls\Aga.Controls.csproj", "{E73BB233-D88B-44A7-A98F-D71EE158381D}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TextEditor", "Libraries\ICSharpCode.TextEditor\Project\ICSharpCode.TextEditor.csproj", "{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TreeView", "Libraries\SharpTreeView\ICSharpCode.TreeView\ICSharpCode.TreeView.csproj", "{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactory", "Libraries\NRefactory\Project\NRefactory.csproj", "{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.AvalonEdit", "Libraries\AvalonEdit\ICSharpCode.AvalonEdit\ICSharpCode.AvalonEdit.csproj", "{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Main", "Main", "{5A3EBEBA-0560-41C1-966B-23F7D03A5486}" ProjectSection(SolutionItems) = postProject EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.Presentation", "Main\ICSharpCode.Core.Presentation\ICSharpCode.Core.Presentation.csproj", "{7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.BuildWorker", "Main\ICSharpCode.SharpDevelop.BuildWorker\ICSharpCode.SharpDevelop.BuildWorker.csproj", "{C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.WinForms", "Main\ICSharpCode.Core.WinForms\ICSharpCode.Core.WinForms.csproj", "{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}" EndProject -Project("{00000000-0000-0000-0000-000000000000}") = "Tools", "Tools\Tools.build", "B13EFF7F-7EA4-4B68-A375-D112105E9182" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Dom", "Main\ICSharpCode.SharpDevelop.Dom\Project\ICSharpCode.SharpDevelop.Dom.csproj", "{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartUp", "Main\StartUp\Project\StartUp.csproj", "{1152B71B-3C05-4598-B20D-823B5D40559E}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Widgets", "Main\ICSharpCode.SharpDevelop.Widgets\Project\ICSharpCode.SharpDevelop.Widgets.csproj", "{8035765F-D51F-4A0C-A746-2FD100E19419}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core", "Main\Core\Project\ICSharpCode.Core.csproj", "{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Sda", "Main\ICSharpCode.SharpDevelop.Sda\ICSharpCode.SharpDevelop.Sda.csproj", "{80318B5F-A25D-45AB-8A95-EF31D2370A4C}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop", "Main\Base\Project\ICSharpCode.SharpDevelop.csproj", "{2748AD25-9C63-4E12-877B-4DCE96FBED54}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Sda", "Main\ICSharpCode.SharpDevelop.Sda\ICSharpCode.SharpDevelop.Sda.csproj", "{80318B5F-A25D-45AB-8A95-EF31D2370A4C}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core", "Main\Core\Project\ICSharpCode.Core.csproj", "{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Widgets", "Main\ICSharpCode.SharpDevelop.Widgets\Project\ICSharpCode.SharpDevelop.Widgets.csproj", "{8035765F-D51F-4A0C-A746-2FD100E19419}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartUp", "Main\StartUp\Project\StartUp.csproj", "{1152B71B-3C05-4598-B20D-823B5D40559E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Dom", "Main\ICSharpCode.SharpDevelop.Dom\Project\ICSharpCode.SharpDevelop.Dom.csproj", "{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}" +Project("{00000000-0000-0000-0000-000000000000}") = "Tools", "Tools\Tools.build", "B13EFF7F-7EA4-4B68-A375-D112105E9182" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.WinForms", "Main\ICSharpCode.Core.WinForms\ICSharpCode.Core.WinForms.csproj", "{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.Presentation", "Main\ICSharpCode.Core.Presentation\ICSharpCode.Core.Presentation.csproj", "{7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -356,10 +354,6 @@ Global {9196DD8A-B4D4-4780-8742-C5762E547FC2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9196DD8A-B4D4-4780-8742-C5762E547FC2}.Release|Any CPU.Build.0 = Release|Any CPU {9196DD8A-B4D4-4780-8742-C5762E547FC2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}.Release|Any CPU.Build.0 = Release|Any CPU - {C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}.Release|Any CPU.ActiveCfg = Release|Any CPU {D332F2D1-2CF1-43B7-903C-844BD5211A7E}.Debug|Any CPU.Build.0 = Debug|Any CPU {D332F2D1-2CF1-43B7-903C-844BD5211A7E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D332F2D1-2CF1-43B7-903C-844BD5211A7E}.Release|Any CPU.Build.0 = Release|Any CPU @@ -414,73 +408,72 @@ Global {DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|Any CPU.ActiveCfg = Release|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution - {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} - {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} - {8AA421C8-D7AF-4957-9F43-5135328ACB24} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} - {461606BD-E824-4D0A-8CBA-01810B1F5E02} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} - {BDDDCD01-D2FE-4EAD-9425-4B6B91922C7C} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} - {3EAA45A9-735C-4AC7-A799-947B93EA449D} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} - {17F4D7E0-6933-4C2E-8714-FD7E98D625D5} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} - {E54A5AD2-418D-4A85-BA5E-CD803DE38715} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} - {1F261725-6318-4434-A1B1-6C70CE4CD324} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} - {08ce9972-283b-44f4-82fa-966f7dfa6b7a} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} - {5EEB99CF-EA2B-4733-80A6-CE9192D68170} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} - {F93E52FD-DA66-4CE5-A0CB-BCD902811122} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} - {918487B7-2153-4618-BBB3-344DBDDF2A2A} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} - {6604365C-C702-4C10-9BA8-637F1E3D4D0D} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} - {D022A6CE-7438-41E8-AC64-F2DE18EC54C6} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} - {64A3E5E6-90BF-47F6-94DF-68C94B62C817} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} - {7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} - {4B8F0F98-8BE1-402B-AA8B-C8D548577B38} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} - {9196DD8A-B4D4-4780-8742-C5762E547FC2} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} - 86CE7B3F-6273-4215-9E36-6184D98F854E = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} - {3CA90546-3B4C-4663-9445-C4E9371750A7} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} - {EC06F96A-AEEC-49D6-B03D-AB87C6EB674C} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D} - {1D18D788-F7EE-4585-A23B-34DC8EC63CB8} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D} - {E6F4983F-DE41-4AEC-88E7-1FA9AFB4E6FF} = {BDDDCD01-D2FE-4EAD-9425-4B6B91922C7C} - {869951D5-A0D6-4DC6-9F1D-E6B9A12AC446} = {BDDDCD01-D2FE-4EAD-9425-4B6B91922C7C} - {000E4F64-5D0D-4EB1-B0BF-1A62ADBC6EAD} = {BDDDCD01-D2FE-4EAD-9425-4B6B91922C7C} - {e1b288a2-08ee-4318-8bbb-8ab72c69e33e} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C} - {DBCF20A1-BA13-4582-BFA9-74DE4D987B73} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C} - {4AC2D5F1-F671-480C-A075-6BF62B3721B2} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C} - {6e59af58-f635-459a-9a35-c9ac41c00339} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C} - {BF38FB72-B380-4196-AF8C-95749D726C61} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C} - {1F1AC7CD-D154-45BB-8EAF-804CA8055F5A} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C} - {8CF9DB5A-A2F6-4A88-BABA-100912EAF6E8} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C} - {99BAE3A2-C40D-40D2-A7B4-EBB4798F36E4} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C} - {7C96B65D-28A5-4F28-A35B-8D83CE831EE8} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C} - {D332F2D1-2CF1-43B7-903C-844BD5211A7E} = {8CF9DB5A-A2F6-4A88-BABA-100912EAF6E8} - {8D732610-8FC6-43BA-94C9-7126FD7FE361} = {8CF9DB5A-A2F6-4A88-BABA-100912EAF6E8} - {533F4684-DBA6-4518-B005-C84F22A2DD57} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79} - {DB137F0B-9B62-4232-AE92-F7BE0280B8D3} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79} - {85226AFB-CE71-4851-9A75-7EEC663A8E8A} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79} - {0D37CE59-B0EF-4F3C-B9EB-8557E53A448B} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79} - {6B717BD1-CD5E-498C-A42E-9E6A4584DC48} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79} - {7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79} - {CBC6C247-747B-4908-B09A-4D2E0F640B6B} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79} - {E618A9CD-A39F-4925-A538-E8A3FEF24E54} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79} + {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} + {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5} {0162E499-42D0-409B-AA25-EED21F75336B} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79} - {DFB936AD-90EE-4B4F-941E-4F4A636F0D92} = {0D37CE59-B0EF-4F3C-B9EB-8557E53A448B} - {DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD} = {0D37CE59-B0EF-4F3C-B9EB-8557E53A448B} - {0991423A-DBF6-4C89-B365-A1DF1EB32E42} = {DB137F0B-9B62-4232-AE92-F7BE0280B8D3} - {5A1354DF-4989-4BB4-BC6B-D627C2E9FA13} = {DB137F0B-9B62-4232-AE92-F7BE0280B8D3} + {E618A9CD-A39F-4925-A538-E8A3FEF24E54} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79} + {CBC6C247-747B-4908-B09A-4D2E0F640B6B} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79} + {7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79} + {6B717BD1-CD5E-498C-A42E-9E6A4584DC48} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79} + {0D37CE59-B0EF-4F3C-B9EB-8557E53A448B} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79} + {85226AFB-CE71-4851-9A75-7EEC663A8E8A} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79} + {DB137F0B-9B62-4232-AE92-F7BE0280B8D3} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79} + {533F4684-DBA6-4518-B005-C84F22A2DD57} = {4EA396ED-64AD-4AD0-A67A-AB363F3E0C79} {08F772A1-F0BE-433E-8B37-F6522953DB05} = {DB137F0B-9B62-4232-AE92-F7BE0280B8D3} - {DDE2A481-8271-4EAC-A330-8FA6A38D13D1} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C} - {E73BB233-D88B-44A7-A98F-D71EE158381D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C} - {4139CCF6-FB49-4A9D-B2CF-331E9EA3198D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C} - {2D18BE89-D210-49EB-A9DD-2246FBB3DF6D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C} - {3A9AE6AA-BC07-4A2F-972C-581E3AE2F195} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C} + {5A1354DF-4989-4BB4-BC6B-D627C2E9FA13} = {DB137F0B-9B62-4232-AE92-F7BE0280B8D3} + {0991423A-DBF6-4C89-B365-A1DF1EB32E42} = {DB137F0B-9B62-4232-AE92-F7BE0280B8D3} + {DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD} = {0D37CE59-B0EF-4F3C-B9EB-8557E53A448B} + {DFB936AD-90EE-4B4F-941E-4F4A636F0D92} = {0D37CE59-B0EF-4F3C-B9EB-8557E53A448B} + {7C96B65D-28A5-4F28-A35B-8D83CE831EE8} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C} + {99BAE3A2-C40D-40D2-A7B4-EBB4798F36E4} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C} + {8CF9DB5A-A2F6-4A88-BABA-100912EAF6E8} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C} + {1F1AC7CD-D154-45BB-8EAF-804CA8055F5A} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C} + {BF38FB72-B380-4196-AF8C-95749D726C61} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C} + {6e59af58-f635-459a-9a35-c9ac41c00339} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C} + {4AC2D5F1-F671-480C-A075-6BF62B3721B2} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C} + {DBCF20A1-BA13-4582-BFA9-74DE4D987B73} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C} + {e1b288a2-08ee-4318-8bbb-8ab72c69e33e} = {FEB825FA-4AD8-425D-8E4A-B5A18EE1B81C} + {8D732610-8FC6-43BA-94C9-7126FD7FE361} = {8CF9DB5A-A2F6-4A88-BABA-100912EAF6E8} + {D332F2D1-2CF1-43B7-903C-844BD5211A7E} = {8CF9DB5A-A2F6-4A88-BABA-100912EAF6E8} + {3CA90546-3B4C-4663-9445-C4E9371750A7} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} + 86CE7B3F-6273-4215-9E36-6184D98F854E = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} + {9196DD8A-B4D4-4780-8742-C5762E547FC2} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} + {4B8F0F98-8BE1-402B-AA8B-C8D548577B38} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} + {7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} + {64A3E5E6-90BF-47F6-94DF-68C94B62C817} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} + {D022A6CE-7438-41E8-AC64-F2DE18EC54C6} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} + {6604365C-C702-4C10-9BA8-637F1E3D4D0D} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} + {918487B7-2153-4618-BBB3-344DBDDF2A2A} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} + {F93E52FD-DA66-4CE5-A0CB-BCD902811122} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} + {5EEB99CF-EA2B-4733-80A6-CE9192D68170} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} + {08ce9972-283b-44f4-82fa-966f7dfa6b7a} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} + {1F261725-6318-4434-A1B1-6C70CE4CD324} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} + {E54A5AD2-418D-4A85-BA5E-CD803DE38715} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} + {17F4D7E0-6933-4C2E-8714-FD7E98D625D5} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} + {3EAA45A9-735C-4AC7-A799-947B93EA449D} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} + {BDDDCD01-D2FE-4EAD-9425-4B6B91922C7C} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} + {461606BD-E824-4D0A-8CBA-01810B1F5E02} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} + {8AA421C8-D7AF-4957-9F43-5135328ACB24} = {CE5B42B7-6E8C-4385-9E97-F4023FC16BF2} + {000E4F64-5D0D-4EB1-B0BF-1A62ADBC6EAD} = {BDDDCD01-D2FE-4EAD-9425-4B6B91922C7C} + {869951D5-A0D6-4DC6-9F1D-E6B9A12AC446} = {BDDDCD01-D2FE-4EAD-9425-4B6B91922C7C} + {E6F4983F-DE41-4AEC-88E7-1FA9AFB4E6FF} = {BDDDCD01-D2FE-4EAD-9425-4B6B91922C7C} + {1D18D788-F7EE-4585-A23B-34DC8EC63CB8} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D} + {EC06F96A-AEEC-49D6-B03D-AB87C6EB674C} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D} {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C} - {857CA1A3-FC88-4BE0-AB6A-D1EE772AB288} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} - {924EE450-603D-49C1-A8E5-4AFAA31CE6F3} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} - {8035765F-D51F-4A0C-A746-2FD100E19419} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} - {80318B5F-A25D-45AB-8A95-EF31D2370A4C} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} - {2748AD25-9C63-4E12-877B-4DCE96FBED54} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} - {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} - {1152B71B-3C05-4598-B20D-823B5D40559E} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} - B13EFF7F-7EA4-4B68-A375-D112105E9182 = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} - {C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} + {3A9AE6AA-BC07-4A2F-972C-581E3AE2F195} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C} + {2D18BE89-D210-49EB-A9DD-2246FBB3DF6D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C} + {4139CCF6-FB49-4A9D-B2CF-331E9EA3198D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C} + {E73BB233-D88B-44A7-A98F-D71EE158381D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C} + {DDE2A481-8271-4EAC-A330-8FA6A38D13D1} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C} {7E4A7172-7FF5-48D0-B719-7CD959DD1AC9} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} + B13EFF7F-7EA4-4B68-A375-D112105E9182 = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} + {1152B71B-3C05-4598-B20D-823B5D40559E} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} + {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} + {2748AD25-9C63-4E12-877B-4DCE96FBED54} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} + {80318B5F-A25D-45AB-8A95-EF31D2370A4C} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} + {8035765F-D51F-4A0C-A746-2FD100E19419} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} + {924EE450-603D-49C1-A8E5-4AFAA31CE6F3} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} + {857CA1A3-FC88-4BE0-AB6A-D1EE772AB288} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486} EndGlobalSection EndGlobal