From 3399fb59c192f0a607d5a559ff9450500868c7df Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Fri, 26 Mar 2010 16:20:41 +0000 Subject: [PATCH] Use external BuildWorker process for compilation. Use MSBuild 3.5 for compiling projects with ToolsVersion<"4.0". git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@5641 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- SharpDevelop.Tests.sln | 546 ++++++++++-------- SharpDevelop.sln | 30 +- src/Libraries/AvalonDock/AvalonDock.csproj | 5 +- .../Project/ICSharpCode.Build.Tasks.csproj | 3 +- .../Aga.Controls/Aga.Controls.csproj | 3 +- .../Project/ICSharpCode.SharpDevelop.csproj | 23 +- .../MSBuildEngine/BuildWorkerManager.cs | 184 ++++++ .../Src/Project/MSBuildEngine/EventSource.cs | 83 --- .../Project/MSBuildEngine/MSBuildEngine.cs | 116 ++-- .../MSBuildEngine/ParallelMSBuildManager.cs | 242 -------- .../Project/MSBuildEngine/WorkerProcess.cs | 128 ++++ .../Project/Src/Project/MSBuildInternals.cs | 10 +- .../BuildJob.cs | 60 +- .../EventSource.cs | 167 +++++- .../EventTypes.cs | 32 + .../ExtendedBinaryReader.cs | 45 ++ .../HostProcess.cs | 53 ++ ...CSharpCode.SharpDevelop.BuildWorker.csproj | 25 +- .../Interprocess/HostProcess.cs | 112 ---- .../Interprocess/IHostObject.cs | 16 - .../Interprocess/PacketReceiver.cs | 148 ----- .../Interprocess/PacketSender.cs | 70 --- .../Interprocess/WorkerProcess.cs | 270 --------- .../MSBuild40.cs | 39 ++ .../Program.cs | 224 +------ .../WorkerManager.cs | 274 --------- .../app.config | 10 +- ...harpCode.SharpDevelop.BuildWorker35.csproj | 78 +++ .../MSBuild35.cs | 46 ++ .../Properties/AssemblyInfo.cs | 17 + .../app.config | 15 + src/Setup/Files.wxs | 12 + src/Setup/Setup.wxs | 2 + 33 files changed, 1272 insertions(+), 1816 deletions(-) create mode 100644 src/Main/Base/Project/Src/Project/MSBuildEngine/BuildWorkerManager.cs delete mode 100644 src/Main/Base/Project/Src/Project/MSBuildEngine/EventSource.cs delete mode 100644 src/Main/Base/Project/Src/Project/MSBuildEngine/ParallelMSBuildManager.cs create mode 100644 src/Main/Base/Project/Src/Project/MSBuildEngine/WorkerProcess.cs create mode 100644 src/Main/ICSharpCode.SharpDevelop.BuildWorker/EventTypes.cs create mode 100644 src/Main/ICSharpCode.SharpDevelop.BuildWorker/ExtendedBinaryReader.cs create mode 100644 src/Main/ICSharpCode.SharpDevelop.BuildWorker/HostProcess.cs delete mode 100644 src/Main/ICSharpCode.SharpDevelop.BuildWorker/Interprocess/HostProcess.cs delete mode 100644 src/Main/ICSharpCode.SharpDevelop.BuildWorker/Interprocess/IHostObject.cs delete mode 100644 src/Main/ICSharpCode.SharpDevelop.BuildWorker/Interprocess/PacketReceiver.cs delete mode 100644 src/Main/ICSharpCode.SharpDevelop.BuildWorker/Interprocess/PacketSender.cs delete mode 100644 src/Main/ICSharpCode.SharpDevelop.BuildWorker/Interprocess/WorkerProcess.cs create mode 100644 src/Main/ICSharpCode.SharpDevelop.BuildWorker/MSBuild40.cs delete mode 100644 src/Main/ICSharpCode.SharpDevelop.BuildWorker/WorkerManager.cs create mode 100644 src/Main/ICSharpCode.SharpDevelop.BuildWorker35/ICSharpCode.SharpDevelop.BuildWorker35.csproj create mode 100644 src/Main/ICSharpCode.SharpDevelop.BuildWorker35/MSBuild35.cs create mode 100644 src/Main/ICSharpCode.SharpDevelop.BuildWorker35/Properties/AssemblyInfo.cs create mode 100644 src/Main/ICSharpCode.SharpDevelop.BuildWorker35/app.config diff --git a/SharpDevelop.Tests.sln b/SharpDevelop.Tests.sln index 724e1f52d9..945fad8eb6 100644 --- a/SharpDevelop.Tests.sln +++ b/SharpDevelop.Tests.sln @@ -1,29 +1,32 @@  Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 -# SharpDevelop 4.0.0.5490 +# SharpDevelop 4.0.0.5639 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Main", "Main", "{256F5C28-532C-44C0-8AB8-D8EC5E492E01}" ProjectSection(SolutionItems) = postProject EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Dom.Tests", "src\Main\ICSharpCode.SharpDevelop.Dom\Tests\ICSharpCode.SharpDevelop.Dom.Tests\ICSharpCode.SharpDevelop.Dom.Tests.csproj", "{7DB80259-24D4-46C3-A024-53FF1987733D}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartUp", "src\Main\StartUp\Project\StartUp.csproj", "{1152B71B-3C05-4598-B20D-823B5D40559E}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Tests", "src\Main\Base\Test\ICSharpCode.SharpDevelop.Tests.csproj", "{4980B743-B32F-4aba-AABD-45E2CAD3568D}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Widgets", "src\Main\ICSharpCode.SharpDevelop.Widgets\Project\ICSharpCode.SharpDevelop.Widgets.csproj", "{8035765F-D51F-4A0C-A746-2FD100E19419}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.Tests", "src\Main\Core\Test\ICSharpCode.Core.Tests.csproj", "{AD6FAA08-D6F5-4DBA-AF85-F4DA9F40C3B5}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop", "src\Main\Base\Project\ICSharpCode.SharpDevelop.csproj", "{2748AD25-9C63-4E12-877B-4DCE96FBED54}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core", "src\Main\Core\Project\ICSharpCode.Core.csproj", "{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Sda", "src\Main\ICSharpCode.SharpDevelop.Sda\ICSharpCode.SharpDevelop.Sda.csproj", "{80318B5F-A25D-45AB-8A95-EF31D2370A4C}" + ProjectSection(ProjectDependencies) = postProject + {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} + EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.Presentation", "src\Main\ICSharpCode.Core.Presentation\ICSharpCode.Core.Presentation.csproj", "{7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Dom", "src\Main\ICSharpCode.SharpDevelop.Dom\Project\ICSharpCode.SharpDevelop.Dom.csproj", "{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection @@ -33,27 +36,34 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.WinForms", {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Dom", "src\Main\ICSharpCode.SharpDevelop.Dom\Project\ICSharpCode.SharpDevelop.Dom.csproj", "{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.Presentation", "src\Main\ICSharpCode.Core.Presentation\ICSharpCode.Core.Presentation.csproj", "{7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Sda", "src\Main\ICSharpCode.SharpDevelop.Sda\ICSharpCode.SharpDevelop.Sda.csproj", "{80318B5F-A25D-45AB-8A95-EF31D2370A4C}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core", "src\Main\Core\Project\ICSharpCode.Core.csproj", "{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.Tests", "src\Main\Core\Test\ICSharpCode.Core.Tests.csproj", "{AD6FAA08-D6F5-4DBA-AF85-F4DA9F40C3B5}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop", "src\Main\Base\Project\ICSharpCode.SharpDevelop.csproj", "{2748AD25-9C63-4E12-877B-4DCE96FBED54}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Tests", "src\Main\Base\Test\ICSharpCode.SharpDevelop.Tests.csproj", "{4980B743-B32F-4aba-AABD-45E2CAD3568D}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Widgets", "src\Main\ICSharpCode.SharpDevelop.Widgets\Project\ICSharpCode.SharpDevelop.Widgets.csproj", "{8035765F-D51F-4A0C-A746-2FD100E19419}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Dom.Tests", "src\Main\ICSharpCode.SharpDevelop.Dom\Tests\ICSharpCode.SharpDevelop.Dom.Tests\ICSharpCode.SharpDevelop.Dom.Tests.csproj", "{7DB80259-24D4-46C3-A024-53FF1987733D}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartUp", "src\Main\StartUp\Project\StartUp.csproj", "{1152B71B-3C05-4598-B20D-823B5D40559E}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.BuildWorker", "src\Main\ICSharpCode.SharpDevelop.BuildWorker\ICSharpCode.SharpDevelop.BuildWorker.csproj", "{C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}" + ProjectSection(ProjectDependencies) = postProject + {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.BuildWorker35", "src\Main\ICSharpCode.SharpDevelop.BuildWorker35\ICSharpCode.SharpDevelop.BuildWorker35.csproj", "{B5F54272-49F0-40DB-845A-8D837875D3BA}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection @@ -62,50 +72,50 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{ ProjectSection(SolutionItems) = postProject EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.AvalonEdit.Tests", "src\Libraries\AvalonEdit\ICSharpCode.AvalonEdit.Tests\ICSharpCode.AvalonEdit.Tests.csproj", "{6222A3A1-83CE-47A3-A4E4-A018F82D44D8}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TreeView", "src\Libraries\SharpTreeView\ICSharpCode.TreeView\ICSharpCode.TreeView.csproj", "{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NRefactory", "NRefactory", "{E5A0F4D8-37FD-4A30-BEB0-4409DC4E0865}" - ProjectSection(SolutionItems) = postProject - EndProjectSection +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aga.Controls", "src\Libraries\TreeViewAdv\Aga.Controls\Aga.Controls.csproj", "{E73BB233-D88B-44A7-A98F-D71EE158381D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactoryTests", "src\Libraries\NRefactory\Test\NRefactoryTests.csproj", "{870115DD-960A-4406-A6B9-600BCDC36A03}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TextEditor", "src\Libraries\ICSharpCode.TextEditor\Project\ICSharpCode.TextEditor.csproj", "{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactoryASTGenerator", "src\Libraries\NRefactory\NRefactoryASTGenerator\NRefactoryASTGenerator.csproj", "{B22522AA-B5BF-4A58-AC6D-D4B45805521F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Build.Tasks", "src\Libraries\ICSharpCode.Build.Tasks\Project\ICSharpCode.Build.Tasks.csproj", "{4139CCF6-FB49-4A9D-B2CF-331E9EA3198D}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactory", "src\Libraries\NRefactory\Project\NRefactory.csproj", "{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.AvalonEdit", "src\Libraries\AvalonEdit\ICSharpCode.AvalonEdit\ICSharpCode.AvalonEdit.csproj", "{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AvalonDock", "src\Libraries\AvalonDock\AvalonDock.csproj", "{2FF700C2-A38A-48BD-A637-8CAFD4FE6237}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.AvalonEdit", "src\Libraries\AvalonEdit\ICSharpCode.AvalonEdit\ICSharpCode.AvalonEdit.csproj", "{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NRefactory", "NRefactory", "{E5A0F4D8-37FD-4A30-BEB0-4409DC4E0865}" + ProjectSection(SolutionItems) = postProject + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactory", "src\Libraries\NRefactory\Project\NRefactory.csproj", "{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Build.Tasks", "src\Libraries\ICSharpCode.Build.Tasks\Project\ICSharpCode.Build.Tasks.csproj", "{4139CCF6-FB49-4A9D-B2CF-331E9EA3198D}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactoryASTGenerator", "src\Libraries\NRefactory\NRefactoryASTGenerator\NRefactoryASTGenerator.csproj", "{B22522AA-B5BF-4A58-AC6D-D4B45805521F}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TextEditor", "src\Libraries\ICSharpCode.TextEditor\Project\ICSharpCode.TextEditor.csproj", "{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactoryTests", "src\Libraries\NRefactory\Test\NRefactoryTests.csproj", "{870115DD-960A-4406-A6B9-600BCDC36A03}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aga.Controls", "src\Libraries\TreeViewAdv\Aga.Controls\Aga.Controls.csproj", "{E73BB233-D88B-44A7-A98F-D71EE158381D}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TreeView", "src\Libraries\SharpTreeView\ICSharpCode.TreeView\ICSharpCode.TreeView.csproj", "{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.AvalonEdit.Tests", "src\Libraries\AvalonEdit\ICSharpCode.AvalonEdit.Tests\ICSharpCode.AvalonEdit.Tests.csproj", "{6222A3A1-83CE-47A3-A4E4-A018F82D44D8}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection @@ -114,228 +124,218 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AddIns", "AddIns", "{393278 ProjectSection(SolutionItems) = postProject EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Profiler", "Profiler", "{C4035C32-026F-4158-AF15-113EA1EF1960}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Analysis", "Analysis", "{F355E45F-F54F-4B42-8916-9A633A392789}" ProjectSection(SolutionItems) = postProject EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Profiler.AddIn", "src\AddIns\Misc\Profiler\Frontend\AddIn\Profiler.AddIn.csproj", "{D294A12D-4B38-4F25-9AA6-3D4A6CE26E7B}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTesting.Tests", "src\AddIns\Misc\UnitTesting\Test\UnitTesting.Tests.csproj", "{44A8DE09-CAB9-49D8-9CFC-5EB0A552F181}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} - {FE88FE17-D9FB-4FCC-9A35-6BFFB6B26CC6} = {FE88FE17-D9FB-4FCC-9A35-6BFFB6B26CC6} - {68D5EE3B-0C35-4DF1-BD29-6606851A02C1} = {68D5EE3B-0C35-4DF1-BD29-6606851A02C1} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Profiler.Controls", "src\AddIns\Misc\Profiler\Frontend\Controls\Profiler.Controls.csproj", "{BDA49550-5ED1-4C6B-B648-657B2CACD8E0}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SourceAnalysis", "src\AddIns\Misc\SourceAnalysis\SourceAnalysis.csproj", "{CE498514-D12D-4B6E-AE0E-FEC29BD43748}" ProjectSection(ProjectDependencies) = postProject - {FE88FE17-D9FB-4FCC-9A35-6BFFB6B26CC6} = {FE88FE17-D9FB-4FCC-9A35-6BFFB6B26CC6} {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Profiler.Controller", "src\AddIns\Misc\Profiler\Controller\Profiler.Controller.csproj", "{72FFB35A-C9E2-4A31-B4FA-E3E3E28DED5F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeCoverage", "src\AddIns\Misc\CodeCoverage\Project\CodeCoverage.csproj", "{08CE9972-283B-44F4-82FA-966F7DFA6B7A}" ProjectSection(ProjectDependencies) = postProject - {FE88FE17-D9FB-4FCC-9A35-6BFFB6B26CC6} = {FE88FE17-D9FB-4FCC-9A35-6BFFB6B26CC6} {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Profiler.X64Converter", "src\AddIns\Misc\Profiler\X64Converter\Profiler.X64Converter.csproj", "{FE88FE17-D9FB-4FCC-9A35-6BFFB6B26CC6}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeAnalysis", "src\AddIns\Misc\CodeAnalysis\CodeAnalysis.csproj", "{3EAA45A9-735C-4AC7-A799-947B93EA449D}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{0E96FCFA-9DAC-4534-AC18-01A90C368873}") = "Hook", "src\AddIns\Misc\Profiler\Hook\Hook.vcxproj", "{68D5EE3B-0C35-4DF1-BD29-6606851A02C1}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTesting", "src\AddIns\Misc\UnitTesting\UnitTesting.csproj", "{1F261725-6318-4434-A1B1-6C70CE4CD324}" + ProjectSection(ProjectDependencies) = postProject + {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} + EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Profiler.Tests", "src\AddIns\Misc\Profiler\Tests\Profiler.Tests\Profiler.Tests.csproj", "{068F9531-5D29-49E0-980E-59982A3A0469}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeCoverage.Tests", "src\AddIns\Misc\CodeCoverage\Test\CodeCoverage.Tests.csproj", "{A5C0E8F8-9D04-46ED-91D6-1DEF1575313B}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Language Bindings", "Language Bindings", "{E0646C25-36F2-4524-969F-FA621353AB94}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ComponentInspector", "ComponentInspector", "{D599885D-E161-4CCE-A66E-7A40C8C4F4CC}" ProjectSection(SolutionItems) = postProject EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RubyBinding", "src\AddIns\BackendBindings\Ruby\RubyBinding\Project\RubyBinding.csproj", "{C896FFFF-5B6C-4B0E-B6DF-049865F501B4}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ComponentInspector.AddIn", "src\AddIns\Misc\ComponentInspector\ComponentInspector.AddIn\ComponentInspector.AddIn.csproj", "{869951D5-A0D6-4DC6-9F1D-E6B9A12AC446}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CppBinding", "src\AddIns\BackendBindings\CppBinding\CppBinding\CppBinding.csproj", "{70966F84-74C9-4067-A379-0C674A929233}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ComponentInspector.Core", "src\AddIns\Misc\ComponentInspector\ComponentInspector.Core\ComponentInspector.Core.csproj", "{E6F4983F-DE41-4AEC-88E7-1FA9AFB4E6FF}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpBinding.Tests", "src\AddIns\BackendBindings\CSharpBinding\Tests\CSharpBinding.Tests.csproj", "{52006F3F-3156-45DE-89D8-C4813694FBA4}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ComponentInspector", "src\AddIns\Misc\ComponentInspector\ComponentInspector\ComponentInspector.csproj", "{000E4F64-5D0D-4EB1-B0BF-1A62ADBC6EAD}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VBNetBinding.Tests", "src\AddIns\BackendBindings\VBNetBinding\Test\VBNetBinding.Tests.csproj", "{50A89267-A28B-4DF3-8E62-912E005143B8}" - ProjectSection(ProjectDependencies) = postProject - {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Display Bindings", "Display Bindings", "{11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}" + ProjectSection(SolutionItems) = postProject EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Boo", "Boo", "{97B3B514-AB0E-4FE1-89DE-8A945F5112AE}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WpfDesign", "WpfDesign", "{6022AC51-B658-4C54-97EF-79187AC65B47}" ProjectSection(SolutionItems) = postProject EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BooBinding.Tests", "src\AddIns\BackendBindings\Boo\BooBinding\Test\BooBinding.Tests.csproj", "{6FA16499-896F-4C02-BB43-1AF5C6C7C713}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WpfDesign.XamlDom", "src\AddIns\DisplayBindings\WpfDesign\WpfDesign.XamlDom\Project\WpfDesign.XamlDom.csproj", "{88DA149F-21B2-48AB-82C4-28FB6BDFD783}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BooBinding", "src\AddIns\BackendBindings\Boo\BooBinding\Project\BooBinding.csproj", "{4AC2D5F1-F671-480C-A075-6BF62B3721B2}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WpfDesign.Tests", "src\AddIns\DisplayBindings\WpfDesign\WpfDesign.Designer\Tests\WpfDesign.Tests.csproj", "{943DBBB3-E84E-4CF4-917C-C05AFA8743C1}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactoryToBooConverter", "src\AddIns\BackendBindings\Boo\NRefactoryToBooConverter\Project\NRefactoryToBooConverter.csproj", "{DBCF20A1-BA13-4582-BFA9-74DE4D987B73}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WpfDesign.Designer", "src\AddIns\DisplayBindings\WpfDesign\WpfDesign.Designer\Project\WpfDesign.Designer.csproj", "{78CC29AC-CC79-4355-B1F2-97936DF198AC}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactoryToBooConverter.Tests", "src\AddIns\BackendBindings\Boo\NRefactoryToBooConverter\Test\NRefactoryToBooConverter.Tests.csproj", "{C9DE556D-325C-4544-B29F-16A9EB7C9830}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WpfDesign.AddIn", "src\AddIns\DisplayBindings\WpfDesign\WpfDesign.AddIn\WpfDesign.AddIn.csproj", "{9A9D6FD4-6A2E-455D-ACC3-DDA775FE9865}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Python", "Python", "{CA76F702-5B4E-4918-B8D8-7FF8382434FF}" - ProjectSection(SolutionItems) = postProject - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PythonBinding.Tests", "src\AddIns\BackendBindings\Python\PythonBinding\Test\PythonBinding.Tests.csproj", "{23B517C9-1ECC-4419-A13F-0B7136D085CB}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WpfDesign", "src\AddIns\DisplayBindings\WpfDesign\WpfDesign\Project\WpfDesign.csproj", "{66A378A1-E9F4-4AD5-8946-D0EC06C2902F}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Python.Build.Tasks.Tests", "src\AddIns\BackendBindings\Python\Python.Build.Tasks\Test\Python.Build.Tasks.Tests.csproj", "{833904AB-3CD4-4071-9B48-5770E44685AA}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlEditor.Tests", "src\AddIns\DisplayBindings\XmlEditor\Test\XmlEditor.Tests.csproj", "{FC0FE702-A87D-4D70-A9B6-1ECCD611125F}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Python.Build.Tasks", "src\AddIns\BackendBindings\Python\Python.Build.Tasks\Project\Python.Build.Tasks.csproj", "{D332F2D1-2CF1-43B7-903C-844BD5211A7E}" - ProjectSection(ProjectDependencies) = postProject - {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "IconEditor", "IconEditor", "{0773ED53-08E2-4495-A3BE-CA0B5D413C15}" + ProjectSection(SolutionItems) = postProject EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PythonBinding", "src\AddIns\BackendBindings\Python\PythonBinding\Project\PythonBinding.csproj", "{8D732610-8FC6-43BA-94C9-7126FD7FE361}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IconEditorAddIn", "src\AddIns\DisplayBindings\IconEditor\IconEditorAddIn\IconEditorAddIn.csproj", "{DFB936AD-90EE-4B4F-941E-4F4A636F0D92}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ILAsmBinding", "src\AddIns\BackendBindings\ILAsmBinding\Project\ILAsmBinding.csproj", "{6E59AF58-F635-459A-9A35-C9AC41C00339}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IconEditor", "src\AddIns\DisplayBindings\IconEditor\IconEditor\IconEditor.csproj", "{DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WixBinding", "src\AddIns\BackendBindings\WixBinding\Project\WixBinding.csproj", "{E1B288A2-08EE-4318-8BBB-8AB72C69E33E}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HexEditor", "src\AddIns\DisplayBindings\HexEditor\Project\HexEditor.csproj", "{E618A9CD-A39F-4925-A538-E8A3FEF24E54}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpBinding", "src\AddIns\BackendBindings\CSharpBinding\Project\CSharpBinding.csproj", "{1F1AC7CD-D154-45BB-8EAF-804CA8055F5A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SettingsEditor", "src\AddIns\DisplayBindings\SettingsEditor\Project\SettingsEditor.csproj", "{85226AFB-CE71-4851-9A75-7EEC663A8E8A}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VBNetBinding", "src\AddIns\BackendBindings\VBNetBinding\Project\VBNetBinding.csproj", "{BF38FB72-B380-4196-AF8C-95749D726C61}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceEditor", "src\AddIns\DisplayBindings\ResourceEditor\Project\ResourceEditor.csproj", "{CBC6C247-747B-4908-B09A-4D2E0F640B6B}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XamlBinding", "src\AddIns\BackendBindings\XamlBinding\XamlBinding\XamlBinding.csproj", "{7C96B65D-28A5-4F28-A35B-8D83CE831EE8}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AvalonEdit.AddIn", "src\AddIns\DisplayBindings\AvalonEdit.AddIn\AvalonEdit.AddIn.csproj", "{0162E499-42D0-409B-AA25-EED21F75336B}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XamlBinding.Tests", "src\AddIns\BackendBindings\XamlBinding\XamlBinding.Tests\XamlBinding.Tests.csproj", "{F390DA70-1FE1-4715-81A0-389AB010C130}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlEditor", "src\AddIns\DisplayBindings\XmlEditor\Project\XmlEditor.csproj", "{DCA2703D-250A-463E-A68A-07ED105AE6BD}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WixBinding.Tests", "src\AddIns\BackendBindings\WixBinding\Test\WixBinding.Tests.csproj", "{388E7B64-0393-4EB4-A3E3-5C474F141853}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FormsDesigner", "src\AddIns\DisplayBindings\FormsDesigner\Project\FormsDesigner.csproj", "{7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FSharpBinding", "src\AddIns\BackendBindings\FSharpBinding\FSharpBinding.csproj", "{E954F3CB-A446-492F-A664-2B376EBC86E8}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Debugger", "Debugger", "{CDE0C5A4-2096-48B5-BEA3-74DBA0F0E1EF}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ClassDiagram", "ClassDiagram", "{BFA3BF26-33BD-4A65-B84D-C7F30D131668}" ProjectSection(SolutionItems) = postProject EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.Tests", "src\AddIns\Debugger\Debugger.Tests\Debugger.Tests.csproj", "{A4C858C8-51B6-4265-A695-A20FCEBA1D19}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClassCanvas", "src\AddIns\DisplayBindings\ClassDiagram\ClassCanvas\ClassCanvas.csproj", "{08F772A1-F0BE-433E-8B37-F6522953DB05}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.Core", "src\AddIns\Debugger\Debugger.Core\Debugger.Core.csproj", "{1D18D788-F7EE-4585-A23B-34DC8EC63CB8}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClassDiagramAddin", "src\AddIns\DisplayBindings\ClassDiagram\ClassDiagramAddin\ClassDiagramAddin.csproj", "{5A1354DF-4989-4BB4-BC6B-D627C2E9FA13}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.AddIn", "src\AddIns\Debugger\Debugger.AddIn\Debugger.AddIn.csproj", "{EC06F96A-AEEC-49D6-B03D-AB87C6EB674C}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Diagrams", "src\AddIns\DisplayBindings\ClassDiagram\DiagramRouter\Diagrams.csproj", "{0991423A-DBF6-4C89-B365-A1DF1EB32E42}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Misc", "Misc", "{F3662720-9EA2-4591-BBC6-97361DCE50A9}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Data", "Data", "{C7F29FC2-1B03-4CDD-9E30-400F4765FF04}" ProjectSection(SolutionItems) = postProject EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpRefactoring.Tests", "src\AddIns\Misc\SharpRefactoring\Test\SharpRefactoring.Tests.csproj", "{A4AA51DE-A096-47EC-AA5D-D91457834ECF}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpRefactoring", "src\AddIns\Misc\SharpRefactoring\Project\SharpRefactoring.csproj", "{3CA90546-3B4C-4663-9445-C4E9371750A7}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SearchAndReplace", "src\AddIns\Misc\SearchAndReplace\Project\SearchAndReplace.csproj", "{9196DD8A-B4D4-4780-8742-C5762E547FC2}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Data.Addin", "src\AddIns\DisplayBindings\Data\ICSharpCode.Data.Addin\ICSharpCode.Data.Addin.csproj", "{A9F12710-24E4-46D4-832C-6ECB395B9EAD}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReflectorAddIn", "src\AddIns\Misc\ReflectorAddIn\ReflectorAddIn\Project\ReflectorAddIn.csproj", "{8AA421C8-D7AF-4957-9F43-5135328ACB24}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Data.Core", "src\AddIns\DisplayBindings\Data\ICSharpCode.Data.Core\ICSharpCode.Data.Core.csproj", "{B7823AE9-4B43-4859-8796-2EBDC116FBB8}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartPage", "src\AddIns\Misc\StartPage\Project\StartPage.csproj", "{7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Data.Core.UI", "src\AddIns\DisplayBindings\Data\ICSharpCode.Data.Core.UI\ICSharpCode.Data.Core.UI.csproj", "{BAD94D6E-4159-4CB6-B991-486F412D9BB6}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddInManager", "src\AddIns\Misc\AddInManager\Project\AddInManager.csproj", "{F93E52FD-DA66-4CE5-A0CB-BCD902811122}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Data.EDMDesigner.Core", "src\AddIns\DisplayBindings\Data\ICSharpCode.Data.EDMDesigner.Core\ICSharpCode.Data.EDMDesigner.Core.csproj", "{5C70D6AB-0A33-43F9-B8B5-54558C35BBB1}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddinScout", "src\AddIns\Misc\AddinScout\Project\AddinScout.csproj", "{4B8F0F98-8BE1-402B-AA8B-C8D548577B38}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Data.EDMDesigner.Core.UI", "src\AddIns\DisplayBindings\Data\ICSharpCode.Data.EDMDesigner.Core.UI\ICSharpCode.Data.EDMDesigner.Core.UI.csproj", "{EEF5E054-4192-4A57-8FBF-E860D808A51D}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FiletypeRegisterer", "src\AddIns\Misc\FiletypeRegisterer\Project\FiletypeRegisterer.csproj", "{D022A6CE-7438-41E8-AC64-F2DE18EC54C6}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Data.SQLServer", "src\AddIns\DisplayBindings\Data\ICSharpCode.Data.SQLServer\ICSharpCode.Data.SQLServer.csproj", "{AFE34868-AFA1-4E1C-9450-47AB4BE329D5}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HtmlHelp2", "src\AddIns\Misc\HtmlHelp2\Project\HtmlHelp2.csproj", "{918487B7-2153-4618-BBB3-344DBDDF2A2A}" - ProjectSection(ProjectDependencies) = postProject - {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Misc", "Misc", "{F3662720-9EA2-4591-BBC6-97361DCE50A9}" + ProjectSection(SolutionItems) = postProject EndProjectSection EndProject -Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "HtmlHelp2JScriptGlobals", "src\AddIns\Misc\HtmlHelp2\JScriptGlobals\HtmlHelp2JScriptGlobals.vbproj", "{E54A5AD2-418D-4A85-BA5E-CD803DE38715}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UsageDataCollector", "UsageDataCollector", "{DEFC8584-BEC3-4921-BD0F-40482E450B7B}" + ProjectSection(SolutionItems) = postProject + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UsageDataCollector.AddIn", "src\AddIns\Misc\UsageDataCollector\UsageDataCollector.AddIn\UsageDataCollector.AddIn.csproj", "{0008FCE9-9EB4-4E2E-979B-553278E5BBA6}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PInvokeAddIn", "src\AddIns\Misc\PInvokeAddIn\Project\PInvokeAddIn.csproj", "{5EEB99CF-EA2B-4733-80A6-CE9192D68170}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UsageDataCollector", "src\AddIns\Misc\UsageDataCollector\UsageDataCollector\UsageDataCollector.csproj", "{6B1CFE35-DA17-4DEB-9C6E-227E5E251DA0}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RegExpTk", "src\AddIns\Misc\RegExpTk\Project\RegExpTk.csproj", "{64A3E5E6-90BF-47F6-94DF-68C94B62C817}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SearchAndReplace.Tests", "src\AddIns\Misc\SearchAndReplace\Test\SearchAndReplace.Tests.csproj", "{A569DCC1-C608-45FD-B770-4F79335EF154}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceToolkit", "src\AddIns\Misc\ResourceToolkit\Project\ResourceToolkit.csproj", "{461606BD-E824-4D0A-8CBA-01810B1F5E02}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceToolkit.Tests", "src\AddIns\Misc\ResourceToolkit\Test\ResourceToolkit.Tests.csproj", "{DD9AE6A5-2B9D-443A-BC71-38BE578C36BD}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection @@ -345,216 +345,226 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SubversionAddIn", "src\AddI {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceToolkit.Tests", "src\AddIns\Misc\ResourceToolkit\Test\ResourceToolkit.Tests.csproj", "{DD9AE6A5-2B9D-443A-BC71-38BE578C36BD}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceToolkit", "src\AddIns\Misc\ResourceToolkit\Project\ResourceToolkit.csproj", "{461606BD-E824-4D0A-8CBA-01810B1F5E02}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SearchAndReplace.Tests", "src\AddIns\Misc\SearchAndReplace\Test\SearchAndReplace.Tests.csproj", "{A569DCC1-C608-45FD-B770-4F79335EF154}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RegExpTk", "src\AddIns\Misc\RegExpTk\Project\RegExpTk.csproj", "{64A3E5E6-90BF-47F6-94DF-68C94B62C817}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UsageDataCollector", "UsageDataCollector", "{DEFC8584-BEC3-4921-BD0F-40482E450B7B}" - ProjectSection(SolutionItems) = postProject - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UsageDataCollector", "src\AddIns\Misc\UsageDataCollector\UsageDataCollector\UsageDataCollector.csproj", "{6B1CFE35-DA17-4DEB-9C6E-227E5E251DA0}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PInvokeAddIn", "src\AddIns\Misc\PInvokeAddIn\Project\PInvokeAddIn.csproj", "{5EEB99CF-EA2B-4733-80A6-CE9192D68170}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UsageDataCollector.AddIn", "src\AddIns\Misc\UsageDataCollector\UsageDataCollector.AddIn\UsageDataCollector.AddIn.csproj", "{0008FCE9-9EB4-4E2E-979B-553278E5BBA6}" +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "HtmlHelp2JScriptGlobals", "src\AddIns\Misc\HtmlHelp2\JScriptGlobals\HtmlHelp2JScriptGlobals.vbproj", "{E54A5AD2-418D-4A85-BA5E-CD803DE38715}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Display Bindings", "Display Bindings", "{11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}" - ProjectSection(SolutionItems) = postProject - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Data", "Data", "{C7F29FC2-1B03-4CDD-9E30-400F4765FF04}" - ProjectSection(SolutionItems) = postProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HtmlHelp2", "src\AddIns\Misc\HtmlHelp2\Project\HtmlHelp2.csproj", "{918487B7-2153-4618-BBB3-344DBDDF2A2A}" + ProjectSection(ProjectDependencies) = postProject + {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Data.SQLServer", "src\AddIns\DisplayBindings\Data\ICSharpCode.Data.SQLServer\ICSharpCode.Data.SQLServer.csproj", "{AFE34868-AFA1-4E1C-9450-47AB4BE329D5}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FiletypeRegisterer", "src\AddIns\Misc\FiletypeRegisterer\Project\FiletypeRegisterer.csproj", "{D022A6CE-7438-41E8-AC64-F2DE18EC54C6}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Data.EDMDesigner.Core.UI", "src\AddIns\DisplayBindings\Data\ICSharpCode.Data.EDMDesigner.Core.UI\ICSharpCode.Data.EDMDesigner.Core.UI.csproj", "{EEF5E054-4192-4A57-8FBF-E860D808A51D}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddinScout", "src\AddIns\Misc\AddinScout\Project\AddinScout.csproj", "{4B8F0F98-8BE1-402B-AA8B-C8D548577B38}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Data.EDMDesigner.Core", "src\AddIns\DisplayBindings\Data\ICSharpCode.Data.EDMDesigner.Core\ICSharpCode.Data.EDMDesigner.Core.csproj", "{5C70D6AB-0A33-43F9-B8B5-54558C35BBB1}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddInManager", "src\AddIns\Misc\AddInManager\Project\AddInManager.csproj", "{F93E52FD-DA66-4CE5-A0CB-BCD902811122}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Data.Core.UI", "src\AddIns\DisplayBindings\Data\ICSharpCode.Data.Core.UI\ICSharpCode.Data.Core.UI.csproj", "{BAD94D6E-4159-4CB6-B991-486F412D9BB6}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartPage", "src\AddIns\Misc\StartPage\Project\StartPage.csproj", "{7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Data.Core", "src\AddIns\DisplayBindings\Data\ICSharpCode.Data.Core\ICSharpCode.Data.Core.csproj", "{B7823AE9-4B43-4859-8796-2EBDC116FBB8}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReflectorAddIn", "src\AddIns\Misc\ReflectorAddIn\ReflectorAddIn\Project\ReflectorAddIn.csproj", "{8AA421C8-D7AF-4957-9F43-5135328ACB24}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Data.Addin", "src\AddIns\DisplayBindings\Data\ICSharpCode.Data.Addin\ICSharpCode.Data.Addin.csproj", "{A9F12710-24E4-46D4-832C-6ECB395B9EAD}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SearchAndReplace", "src\AddIns\Misc\SearchAndReplace\Project\SearchAndReplace.csproj", "{9196DD8A-B4D4-4780-8742-C5762E547FC2}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ClassDiagram", "ClassDiagram", "{BFA3BF26-33BD-4A65-B84D-C7F30D131668}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpRefactoring", "src\AddIns\Misc\SharpRefactoring\Project\SharpRefactoring.csproj", "{3CA90546-3B4C-4663-9445-C4E9371750A7}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpRefactoring.Tests", "src\AddIns\Misc\SharpRefactoring\Test\SharpRefactoring.Tests.csproj", "{A4AA51DE-A096-47EC-AA5D-D91457834ECF}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Debugger", "Debugger", "{CDE0C5A4-2096-48B5-BEA3-74DBA0F0E1EF}" ProjectSection(SolutionItems) = postProject EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Diagrams", "src\AddIns\DisplayBindings\ClassDiagram\DiagramRouter\Diagrams.csproj", "{0991423A-DBF6-4C89-B365-A1DF1EB32E42}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.AddIn", "src\AddIns\Debugger\Debugger.AddIn\Debugger.AddIn.csproj", "{EC06F96A-AEEC-49D6-B03D-AB87C6EB674C}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClassDiagramAddin", "src\AddIns\DisplayBindings\ClassDiagram\ClassDiagramAddin\ClassDiagramAddin.csproj", "{5A1354DF-4989-4BB4-BC6B-D627C2E9FA13}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.Core", "src\AddIns\Debugger\Debugger.Core\Debugger.Core.csproj", "{1D18D788-F7EE-4585-A23B-34DC8EC63CB8}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClassCanvas", "src\AddIns\DisplayBindings\ClassDiagram\ClassCanvas\ClassCanvas.csproj", "{08F772A1-F0BE-433E-8B37-F6522953DB05}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.Tests", "src\AddIns\Debugger\Debugger.Tests\Debugger.Tests.csproj", "{A4C858C8-51B6-4265-A695-A20FCEBA1D19}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FormsDesigner", "src\AddIns\DisplayBindings\FormsDesigner\Project\FormsDesigner.csproj", "{7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Language Bindings", "Language Bindings", "{E0646C25-36F2-4524-969F-FA621353AB94}" + ProjectSection(SolutionItems) = postProject + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FSharpBinding", "src\AddIns\BackendBindings\FSharpBinding\FSharpBinding.csproj", "{E954F3CB-A446-492F-A664-2B376EBC86E8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WixBinding.Tests", "src\AddIns\BackendBindings\WixBinding\Test\WixBinding.Tests.csproj", "{388E7B64-0393-4EB4-A3E3-5C474F141853}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlEditor", "src\AddIns\DisplayBindings\XmlEditor\Project\XmlEditor.csproj", "{DCA2703D-250A-463E-A68A-07ED105AE6BD}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XamlBinding.Tests", "src\AddIns\BackendBindings\XamlBinding\XamlBinding.Tests\XamlBinding.Tests.csproj", "{F390DA70-1FE1-4715-81A0-389AB010C130}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AvalonEdit.AddIn", "src\AddIns\DisplayBindings\AvalonEdit.AddIn\AvalonEdit.AddIn.csproj", "{0162E499-42D0-409B-AA25-EED21F75336B}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XamlBinding", "src\AddIns\BackendBindings\XamlBinding\XamlBinding\XamlBinding.csproj", "{7C96B65D-28A5-4F28-A35B-8D83CE831EE8}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceEditor", "src\AddIns\DisplayBindings\ResourceEditor\Project\ResourceEditor.csproj", "{CBC6C247-747B-4908-B09A-4D2E0F640B6B}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VBNetBinding", "src\AddIns\BackendBindings\VBNetBinding\Project\VBNetBinding.csproj", "{BF38FB72-B380-4196-AF8C-95749D726C61}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SettingsEditor", "src\AddIns\DisplayBindings\SettingsEditor\Project\SettingsEditor.csproj", "{85226AFB-CE71-4851-9A75-7EEC663A8E8A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpBinding", "src\AddIns\BackendBindings\CSharpBinding\Project\CSharpBinding.csproj", "{1F1AC7CD-D154-45BB-8EAF-804CA8055F5A}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HexEditor", "src\AddIns\DisplayBindings\HexEditor\Project\HexEditor.csproj", "{E618A9CD-A39F-4925-A538-E8A3FEF24E54}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WixBinding", "src\AddIns\BackendBindings\WixBinding\Project\WixBinding.csproj", "{E1B288A2-08EE-4318-8BBB-8AB72C69E33E}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "IconEditor", "IconEditor", "{0773ED53-08E2-4495-A3BE-CA0B5D413C15}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ILAsmBinding", "src\AddIns\BackendBindings\ILAsmBinding\Project\ILAsmBinding.csproj", "{6E59AF58-F635-459A-9A35-C9AC41C00339}" + ProjectSection(ProjectDependencies) = postProject + {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Python", "Python", "{CA76F702-5B4E-4918-B8D8-7FF8382434FF}" ProjectSection(SolutionItems) = postProject EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IconEditor", "src\AddIns\DisplayBindings\IconEditor\IconEditor\IconEditor.csproj", "{DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PythonBinding", "src\AddIns\BackendBindings\Python\PythonBinding\Project\PythonBinding.csproj", "{8D732610-8FC6-43BA-94C9-7126FD7FE361}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IconEditorAddIn", "src\AddIns\DisplayBindings\IconEditor\IconEditorAddIn\IconEditorAddIn.csproj", "{DFB936AD-90EE-4B4F-941E-4F4A636F0D92}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Python.Build.Tasks", "src\AddIns\BackendBindings\Python\Python.Build.Tasks\Project\Python.Build.Tasks.csproj", "{D332F2D1-2CF1-43B7-903C-844BD5211A7E}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlEditor.Tests", "src\AddIns\DisplayBindings\XmlEditor\Test\XmlEditor.Tests.csproj", "{FC0FE702-A87D-4D70-A9B6-1ECCD611125F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Python.Build.Tasks.Tests", "src\AddIns\BackendBindings\Python\Python.Build.Tasks\Test\Python.Build.Tasks.Tests.csproj", "{833904AB-3CD4-4071-9B48-5770E44685AA}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WpfDesign", "WpfDesign", "{6022AC51-B658-4C54-97EF-79187AC65B47}" - ProjectSection(SolutionItems) = postProject - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WpfDesign", "src\AddIns\DisplayBindings\WpfDesign\WpfDesign\Project\WpfDesign.csproj", "{66A378A1-E9F4-4AD5-8946-D0EC06C2902F}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PythonBinding.Tests", "src\AddIns\BackendBindings\Python\PythonBinding\Test\PythonBinding.Tests.csproj", "{23B517C9-1ECC-4419-A13F-0B7136D085CB}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WpfDesign.AddIn", "src\AddIns\DisplayBindings\WpfDesign\WpfDesign.AddIn\WpfDesign.AddIn.csproj", "{9A9D6FD4-6A2E-455D-ACC3-DDA775FE9865}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Boo", "Boo", "{97B3B514-AB0E-4FE1-89DE-8A945F5112AE}" + ProjectSection(SolutionItems) = postProject + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactoryToBooConverter.Tests", "src\AddIns\BackendBindings\Boo\NRefactoryToBooConverter\Test\NRefactoryToBooConverter.Tests.csproj", "{C9DE556D-325C-4544-B29F-16A9EB7C9830}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WpfDesign.Designer", "src\AddIns\DisplayBindings\WpfDesign\WpfDesign.Designer\Project\WpfDesign.Designer.csproj", "{78CC29AC-CC79-4355-B1F2-97936DF198AC}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactoryToBooConverter", "src\AddIns\BackendBindings\Boo\NRefactoryToBooConverter\Project\NRefactoryToBooConverter.csproj", "{DBCF20A1-BA13-4582-BFA9-74DE4D987B73}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WpfDesign.Tests", "src\AddIns\DisplayBindings\WpfDesign\WpfDesign.Designer\Tests\WpfDesign.Tests.csproj", "{943DBBB3-E84E-4CF4-917C-C05AFA8743C1}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BooBinding", "src\AddIns\BackendBindings\Boo\BooBinding\Project\BooBinding.csproj", "{4AC2D5F1-F671-480C-A075-6BF62B3721B2}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WpfDesign.XamlDom", "src\AddIns\DisplayBindings\WpfDesign\WpfDesign.XamlDom\Project\WpfDesign.XamlDom.csproj", "{88DA149F-21B2-48AB-82C4-28FB6BDFD783}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BooBinding.Tests", "src\AddIns\BackendBindings\Boo\BooBinding\Test\BooBinding.Tests.csproj", "{6FA16499-896F-4C02-BB43-1AF5C6C7C713}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ComponentInspector", "ComponentInspector", "{D599885D-E161-4CCE-A66E-7A40C8C4F4CC}" - ProjectSection(SolutionItems) = postProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VBNetBinding.Tests", "src\AddIns\BackendBindings\VBNetBinding\Test\VBNetBinding.Tests.csproj", "{50A89267-A28B-4DF3-8E62-912E005143B8}" + ProjectSection(ProjectDependencies) = postProject + {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ComponentInspector", "src\AddIns\Misc\ComponentInspector\ComponentInspector\ComponentInspector.csproj", "{000E4F64-5D0D-4EB1-B0BF-1A62ADBC6EAD}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpBinding.Tests", "src\AddIns\BackendBindings\CSharpBinding\Tests\CSharpBinding.Tests.csproj", "{52006F3F-3156-45DE-89D8-C4813694FBA4}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ComponentInspector.Core", "src\AddIns\Misc\ComponentInspector\ComponentInspector.Core\ComponentInspector.Core.csproj", "{E6F4983F-DE41-4AEC-88E7-1FA9AFB4E6FF}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CppBinding", "src\AddIns\BackendBindings\CppBinding\CppBinding\CppBinding.csproj", "{70966F84-74C9-4067-A379-0C674A929233}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ComponentInspector.AddIn", "src\AddIns\Misc\ComponentInspector\ComponentInspector.AddIn\ComponentInspector.AddIn.csproj", "{869951D5-A0D6-4DC6-9F1D-E6B9A12AC446}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RubyBinding", "src\AddIns\BackendBindings\Ruby\RubyBinding\Project\RubyBinding.csproj", "{C896FFFF-5B6C-4B0E-B6DF-049865F501B4}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Analysis", "Analysis", "{F355E45F-F54F-4B42-8916-9A633A392789}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Profiler", "Profiler", "{C4035C32-026F-4158-AF15-113EA1EF1960}" ProjectSection(SolutionItems) = postProject EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeCoverage.Tests", "src\AddIns\Misc\CodeCoverage\Test\CodeCoverage.Tests.csproj", "{A5C0E8F8-9D04-46ED-91D6-1DEF1575313B}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Profiler.Tests", "src\AddIns\Misc\Profiler\Tests\Profiler.Tests\Profiler.Tests.csproj", "{068F9531-5D29-49E0-980E-59982A3A0469}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTesting", "src\AddIns\Misc\UnitTesting\UnitTesting.csproj", "{1F261725-6318-4434-A1B1-6C70CE4CD324}" - ProjectSection(ProjectDependencies) = postProject - {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} - EndProjectSection +Project("{0E96FCFA-9DAC-4534-AC18-01A90C368873}") = "Hook", "src\AddIns\Misc\Profiler\Hook\Hook.vcxproj", "{68D5EE3B-0C35-4DF1-BD29-6606851A02C1}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeAnalysis", "src\AddIns\Misc\CodeAnalysis\CodeAnalysis.csproj", "{3EAA45A9-735C-4AC7-A799-947B93EA449D}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Profiler.X64Converter", "src\AddIns\Misc\Profiler\X64Converter\Profiler.X64Converter.csproj", "{FE88FE17-D9FB-4FCC-9A35-6BFFB6B26CC6}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeCoverage", "src\AddIns\Misc\CodeCoverage\Project\CodeCoverage.csproj", "{08CE9972-283B-44F4-82FA-966F7DFA6B7A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Profiler.Controller", "src\AddIns\Misc\Profiler\Controller\Profiler.Controller.csproj", "{72FFB35A-C9E2-4A31-B4FA-E3E3E28DED5F}" ProjectSection(ProjectDependencies) = postProject + {FE88FE17-D9FB-4FCC-9A35-6BFFB6B26CC6} = {FE88FE17-D9FB-4FCC-9A35-6BFFB6B26CC6} {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SourceAnalysis", "src\AddIns\Misc\SourceAnalysis\SourceAnalysis.csproj", "{CE498514-D12D-4B6E-AE0E-FEC29BD43748}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Profiler.Controls", "src\AddIns\Misc\Profiler\Frontend\Controls\Profiler.Controls.csproj", "{BDA49550-5ED1-4C6B-B648-657B2CACD8E0}" ProjectSection(ProjectDependencies) = postProject + {FE88FE17-D9FB-4FCC-9A35-6BFFB6B26CC6} = {FE88FE17-D9FB-4FCC-9A35-6BFFB6B26CC6} {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTesting.Tests", "src\AddIns\Misc\UnitTesting\Test\UnitTesting.Tests.csproj", "{44A8DE09-CAB9-49D8-9CFC-5EB0A552F181}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Profiler.AddIn", "src\AddIns\Misc\Profiler\Frontend\AddIn\Profiler.AddIn.csproj", "{D294A12D-4B38-4F25-9AA6-3D4A6CE26E7B}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} + {FE88FE17-D9FB-4FCC-9A35-6BFFB6B26CC6} = {FE88FE17-D9FB-4FCC-9A35-6BFFB6B26CC6} + {68D5EE3B-0C35-4DF1-BD29-6606851A02C1} = {68D5EE3B-0C35-4DF1-BD29-6606851A02C1} EndProjectSection EndProject Project("{00000000-0000-0000-0000-000000000000}") = "Tools", "src\Tools\Tools.build", "{3DF4060F-5EE0-41CF-8096-F27355FD5511}" @@ -1001,125 +1011,151 @@ Global {E954F3CB-A446-492F-A664-2B376EBC86E8}.Release|Win32.ActiveCfg = Release|Any CPU {E954F3CB-A446-492F-A664-2B376EBC86E8}.Release|x86.Build.0 = Release|Any CPU {E954F3CB-A446-492F-A664-2B376EBC86E8}.Release|x86.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}.Debug|Win32.Build.0 = Debug|Any CPU + {C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}.Debug|Win32.ActiveCfg = Debug|Any CPU + {C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}.Debug|x86.Build.0 = Debug|Any CPU + {C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}.Debug|x86.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 + {C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}.Release|Win32.Build.0 = Release|Any CPU + {C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}.Release|Win32.ActiveCfg = Release|Any CPU + {C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}.Release|x86.Build.0 = Release|Any CPU + {C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}.Release|x86.ActiveCfg = Release|Any CPU + {B5F54272-49F0-40DB-845A-8D837875D3BA}.Debug|Any CPU.Build.0 = Debug|x86 + {B5F54272-49F0-40DB-845A-8D837875D3BA}.Debug|Any CPU.ActiveCfg = Debug|x86 + {B5F54272-49F0-40DB-845A-8D837875D3BA}.Debug|Win32.Build.0 = Debug|x86 + {B5F54272-49F0-40DB-845A-8D837875D3BA}.Debug|Win32.ActiveCfg = Debug|x86 + {B5F54272-49F0-40DB-845A-8D837875D3BA}.Debug|x86.Build.0 = Debug|x86 + {B5F54272-49F0-40DB-845A-8D837875D3BA}.Debug|x86.ActiveCfg = Debug|x86 + {B5F54272-49F0-40DB-845A-8D837875D3BA}.Release|Any CPU.Build.0 = Release|x86 + {B5F54272-49F0-40DB-845A-8D837875D3BA}.Release|Any CPU.ActiveCfg = Release|x86 + {B5F54272-49F0-40DB-845A-8D837875D3BA}.Release|Win32.Build.0 = Release|x86 + {B5F54272-49F0-40DB-845A-8D837875D3BA}.Release|Win32.ActiveCfg = Release|x86 + {B5F54272-49F0-40DB-845A-8D837875D3BA}.Release|x86.Build.0 = Release|x86 + {B5F54272-49F0-40DB-845A-8D837875D3BA}.Release|x86.ActiveCfg = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {1152B71B-3C05-4598-B20D-823B5D40559E} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} - {8035765F-D51F-4A0C-A746-2FD100E19419} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} - {2748AD25-9C63-4E12-877B-4DCE96FBED54} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} - {80318B5F-A25D-45AB-8A95-EF31D2370A4C} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} - {924EE450-603D-49C1-A8E5-4AFAA31CE6F3} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} - {857CA1A3-FC88-4BE0-AB6A-D1EE772AB288} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} - {7E4A7172-7FF5-48D0-B719-7CD959DD1AC9} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} - {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} - {AD6FAA08-D6F5-4DBA-AF85-F4DA9F40C3B5} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} - {4980B743-B32F-4aba-AABD-45E2CAD3568D} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} + {B5F54272-49F0-40DB-845A-8D837875D3BA} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} + {C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} {7DB80259-24D4-46C3-A024-53FF1987733D} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} - {DDE2A481-8271-4EAC-A330-8FA6A38D13D1} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C} - {E73BB233-D88B-44A7-A98F-D71EE158381D} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C} - {2D18BE89-D210-49EB-A9DD-2246FBB3DF6D} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C} - {4139CCF6-FB49-4A9D-B2CF-331E9EA3198D} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C} - {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C} - {2FF700C2-A38A-48BD-A637-8CAFD4FE6237} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C} - {E5A0F4D8-37FD-4A30-BEB0-4409DC4E0865} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C} + {4980B743-B32F-4aba-AABD-45E2CAD3568D} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} + {AD6FAA08-D6F5-4DBA-AF85-F4DA9F40C3B5} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} + {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} + {7E4A7172-7FF5-48D0-B719-7CD959DD1AC9} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} + {857CA1A3-FC88-4BE0-AB6A-D1EE772AB288} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} + {924EE450-603D-49C1-A8E5-4AFAA31CE6F3} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} + {80318B5F-A25D-45AB-8A95-EF31D2370A4C} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} + {2748AD25-9C63-4E12-877B-4DCE96FBED54} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} + {8035765F-D51F-4A0C-A746-2FD100E19419} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} + {1152B71B-3C05-4598-B20D-823B5D40559E} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} {6222A3A1-83CE-47A3-A4E4-A018F82D44D8} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C} - {3A9AE6AA-BC07-4A2F-972C-581E3AE2F195} = {E5A0F4D8-37FD-4A30-BEB0-4409DC4E0865} - {B22522AA-B5BF-4A58-AC6D-D4B45805521F} = {E5A0F4D8-37FD-4A30-BEB0-4409DC4E0865} + {E5A0F4D8-37FD-4A30-BEB0-4409DC4E0865} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C} + {2FF700C2-A38A-48BD-A637-8CAFD4FE6237} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C} + {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C} + {4139CCF6-FB49-4A9D-B2CF-331E9EA3198D} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C} + {2D18BE89-D210-49EB-A9DD-2246FBB3DF6D} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C} + {E73BB233-D88B-44A7-A98F-D71EE158381D} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C} + {DDE2A481-8271-4EAC-A330-8FA6A38D13D1} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C} {870115DD-960A-4406-A6B9-600BCDC36A03} = {E5A0F4D8-37FD-4A30-BEB0-4409DC4E0865} - {F355E45F-F54F-4B42-8916-9A633A392789} = {39327899-ED91-4F7F-988C-4FE4E17C014D} - {D599885D-E161-4CCE-A66E-7A40C8C4F4CC} = {39327899-ED91-4F7F-988C-4FE4E17C014D} - {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} = {39327899-ED91-4F7F-988C-4FE4E17C014D} - {F3662720-9EA2-4591-BBC6-97361DCE50A9} = {39327899-ED91-4F7F-988C-4FE4E17C014D} - {CDE0C5A4-2096-48B5-BEA3-74DBA0F0E1EF} = {39327899-ED91-4F7F-988C-4FE4E17C014D} - {E0646C25-36F2-4524-969F-FA621353AB94} = {39327899-ED91-4F7F-988C-4FE4E17C014D} + {B22522AA-B5BF-4A58-AC6D-D4B45805521F} = {E5A0F4D8-37FD-4A30-BEB0-4409DC4E0865} + {3A9AE6AA-BC07-4A2F-972C-581E3AE2F195} = {E5A0F4D8-37FD-4A30-BEB0-4409DC4E0865} {C4035C32-026F-4158-AF15-113EA1EF1960} = {39327899-ED91-4F7F-988C-4FE4E17C014D} - {068F9531-5D29-49E0-980E-59982A3A0469} = {C4035C32-026F-4158-AF15-113EA1EF1960} - {68D5EE3B-0C35-4DF1-BD29-6606851A02C1} = {C4035C32-026F-4158-AF15-113EA1EF1960} - {FE88FE17-D9FB-4FCC-9A35-6BFFB6B26CC6} = {C4035C32-026F-4158-AF15-113EA1EF1960} - {72FFB35A-C9E2-4A31-B4FA-E3E3E28DED5F} = {C4035C32-026F-4158-AF15-113EA1EF1960} - {BDA49550-5ED1-4C6B-B648-657B2CACD8E0} = {C4035C32-026F-4158-AF15-113EA1EF1960} - {D294A12D-4B38-4F25-9AA6-3D4A6CE26E7B} = {C4035C32-026F-4158-AF15-113EA1EF1960} - {E954F3CB-A446-492F-A664-2B376EBC86E8} = {E0646C25-36F2-4524-969F-FA621353AB94} - {388E7B64-0393-4EB4-A3E3-5C474F141853} = {E0646C25-36F2-4524-969F-FA621353AB94} - {F390DA70-1FE1-4715-81A0-389AB010C130} = {E0646C25-36F2-4524-969F-FA621353AB94} - {7C96B65D-28A5-4F28-A35B-8D83CE831EE8} = {E0646C25-36F2-4524-969F-FA621353AB94} - {BF38FB72-B380-4196-AF8C-95749D726C61} = {E0646C25-36F2-4524-969F-FA621353AB94} - {1F1AC7CD-D154-45BB-8EAF-804CA8055F5A} = {E0646C25-36F2-4524-969F-FA621353AB94} - {E1B288A2-08EE-4318-8BBB-8AB72C69E33E} = {E0646C25-36F2-4524-969F-FA621353AB94} - {6E59AF58-F635-459A-9A35-C9AC41C00339} = {E0646C25-36F2-4524-969F-FA621353AB94} - {CA76F702-5B4E-4918-B8D8-7FF8382434FF} = {E0646C25-36F2-4524-969F-FA621353AB94} - {97B3B514-AB0E-4FE1-89DE-8A945F5112AE} = {E0646C25-36F2-4524-969F-FA621353AB94} - {50A89267-A28B-4DF3-8E62-912E005143B8} = {E0646C25-36F2-4524-969F-FA621353AB94} - {52006F3F-3156-45DE-89D8-C4813694FBA4} = {E0646C25-36F2-4524-969F-FA621353AB94} - {70966F84-74C9-4067-A379-0C674A929233} = {E0646C25-36F2-4524-969F-FA621353AB94} - {C896FFFF-5B6C-4B0E-B6DF-049865F501B4} = {E0646C25-36F2-4524-969F-FA621353AB94} - {C9DE556D-325C-4544-B29F-16A9EB7C9830} = {97B3B514-AB0E-4FE1-89DE-8A945F5112AE} - {DBCF20A1-BA13-4582-BFA9-74DE4D987B73} = {97B3B514-AB0E-4FE1-89DE-8A945F5112AE} - {4AC2D5F1-F671-480C-A075-6BF62B3721B2} = {97B3B514-AB0E-4FE1-89DE-8A945F5112AE} - {6FA16499-896F-4C02-BB43-1AF5C6C7C713} = {97B3B514-AB0E-4FE1-89DE-8A945F5112AE} - {8D732610-8FC6-43BA-94C9-7126FD7FE361} = {CA76F702-5B4E-4918-B8D8-7FF8382434FF} - {D332F2D1-2CF1-43B7-903C-844BD5211A7E} = {CA76F702-5B4E-4918-B8D8-7FF8382434FF} - {833904AB-3CD4-4071-9B48-5770E44685AA} = {CA76F702-5B4E-4918-B8D8-7FF8382434FF} - {23B517C9-1ECC-4419-A13F-0B7136D085CB} = {CA76F702-5B4E-4918-B8D8-7FF8382434FF} - {EC06F96A-AEEC-49D6-B03D-AB87C6EB674C} = {CDE0C5A4-2096-48B5-BEA3-74DBA0F0E1EF} - {1D18D788-F7EE-4585-A23B-34DC8EC63CB8} = {CDE0C5A4-2096-48B5-BEA3-74DBA0F0E1EF} - {A4C858C8-51B6-4265-A695-A20FCEBA1D19} = {CDE0C5A4-2096-48B5-BEA3-74DBA0F0E1EF} - {DEFC8584-BEC3-4921-BD0F-40482E450B7B} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} - {A569DCC1-C608-45FD-B770-4F79335EF154} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} - {DD9AE6A5-2B9D-443A-BC71-38BE578C36BD} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} - {17F4D7E0-6933-4C2E-8714-FD7E98D625D5} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} - {461606BD-E824-4D0A-8CBA-01810B1F5E02} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} - {64A3E5E6-90BF-47F6-94DF-68C94B62C817} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} - {5EEB99CF-EA2B-4733-80A6-CE9192D68170} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} - {E54A5AD2-418D-4A85-BA5E-CD803DE38715} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} - {918487B7-2153-4618-BBB3-344DBDDF2A2A} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} - {D022A6CE-7438-41E8-AC64-F2DE18EC54C6} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} - {4B8F0F98-8BE1-402B-AA8B-C8D548577B38} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} - {F93E52FD-DA66-4CE5-A0CB-BCD902811122} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} - {7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} - {8AA421C8-D7AF-4957-9F43-5135328ACB24} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} - {9196DD8A-B4D4-4780-8742-C5762E547FC2} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} - {3CA90546-3B4C-4663-9445-C4E9371750A7} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} - {A4AA51DE-A096-47EC-AA5D-D91457834ECF} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} - {0008FCE9-9EB4-4E2E-979B-553278E5BBA6} = {DEFC8584-BEC3-4921-BD0F-40482E450B7B} - {6B1CFE35-DA17-4DEB-9C6E-227E5E251DA0} = {DEFC8584-BEC3-4921-BD0F-40482E450B7B} - {6022AC51-B658-4C54-97EF-79187AC65B47} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} - {FC0FE702-A87D-4D70-A9B6-1ECCD611125F} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} - {0773ED53-08E2-4495-A3BE-CA0B5D413C15} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} - {E618A9CD-A39F-4925-A538-E8A3FEF24E54} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} - {85226AFB-CE71-4851-9A75-7EEC663A8E8A} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} - {CBC6C247-747B-4908-B09A-4D2E0F640B6B} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} - {0162E499-42D0-409B-AA25-EED21F75336B} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} - {DCA2703D-250A-463E-A68A-07ED105AE6BD} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} - {7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} - {BFA3BF26-33BD-4A65-B84D-C7F30D131668} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} + {E0646C25-36F2-4524-969F-FA621353AB94} = {39327899-ED91-4F7F-988C-4FE4E17C014D} + {CDE0C5A4-2096-48B5-BEA3-74DBA0F0E1EF} = {39327899-ED91-4F7F-988C-4FE4E17C014D} + {F3662720-9EA2-4591-BBC6-97361DCE50A9} = {39327899-ED91-4F7F-988C-4FE4E17C014D} + {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} = {39327899-ED91-4F7F-988C-4FE4E17C014D} + {D599885D-E161-4CCE-A66E-7A40C8C4F4CC} = {39327899-ED91-4F7F-988C-4FE4E17C014D} + {F355E45F-F54F-4B42-8916-9A633A392789} = {39327899-ED91-4F7F-988C-4FE4E17C014D} + {A5C0E8F8-9D04-46ED-91D6-1DEF1575313B} = {F355E45F-F54F-4B42-8916-9A633A392789} + {1F261725-6318-4434-A1B1-6C70CE4CD324} = {F355E45F-F54F-4B42-8916-9A633A392789} + {3EAA45A9-735C-4AC7-A799-947B93EA449D} = {F355E45F-F54F-4B42-8916-9A633A392789} + {08CE9972-283B-44F4-82FA-966F7DFA6B7A} = {F355E45F-F54F-4B42-8916-9A633A392789} + {CE498514-D12D-4B6E-AE0E-FEC29BD43748} = {F355E45F-F54F-4B42-8916-9A633A392789} + {44A8DE09-CAB9-49D8-9CFC-5EB0A552F181} = {F355E45F-F54F-4B42-8916-9A633A392789} + {000E4F64-5D0D-4EB1-B0BF-1A62ADBC6EAD} = {D599885D-E161-4CCE-A66E-7A40C8C4F4CC} + {E6F4983F-DE41-4AEC-88E7-1FA9AFB4E6FF} = {D599885D-E161-4CCE-A66E-7A40C8C4F4CC} + {869951D5-A0D6-4DC6-9F1D-E6B9A12AC446} = {D599885D-E161-4CCE-A66E-7A40C8C4F4CC} {C7F29FC2-1B03-4CDD-9E30-400F4765FF04} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} - {A9F12710-24E4-46D4-832C-6ECB395B9EAD} = {C7F29FC2-1B03-4CDD-9E30-400F4765FF04} - {B7823AE9-4B43-4859-8796-2EBDC116FBB8} = {C7F29FC2-1B03-4CDD-9E30-400F4765FF04} - {BAD94D6E-4159-4CB6-B991-486F412D9BB6} = {C7F29FC2-1B03-4CDD-9E30-400F4765FF04} - {5C70D6AB-0A33-43F9-B8B5-54558C35BBB1} = {C7F29FC2-1B03-4CDD-9E30-400F4765FF04} - {EEF5E054-4192-4A57-8FBF-E860D808A51D} = {C7F29FC2-1B03-4CDD-9E30-400F4765FF04} - {AFE34868-AFA1-4E1C-9450-47AB4BE329D5} = {C7F29FC2-1B03-4CDD-9E30-400F4765FF04} - {08F772A1-F0BE-433E-8B37-F6522953DB05} = {BFA3BF26-33BD-4A65-B84D-C7F30D131668} - {5A1354DF-4989-4BB4-BC6B-D627C2E9FA13} = {BFA3BF26-33BD-4A65-B84D-C7F30D131668} - {0991423A-DBF6-4C89-B365-A1DF1EB32E42} = {BFA3BF26-33BD-4A65-B84D-C7F30D131668} - {DFB936AD-90EE-4B4F-941E-4F4A636F0D92} = {0773ED53-08E2-4495-A3BE-CA0B5D413C15} - {DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD} = {0773ED53-08E2-4495-A3BE-CA0B5D413C15} - {88DA149F-21B2-48AB-82C4-28FB6BDFD783} = {6022AC51-B658-4C54-97EF-79187AC65B47} - {943DBBB3-E84E-4CF4-917C-C05AFA8743C1} = {6022AC51-B658-4C54-97EF-79187AC65B47} - {78CC29AC-CC79-4355-B1F2-97936DF198AC} = {6022AC51-B658-4C54-97EF-79187AC65B47} - {9A9D6FD4-6A2E-455D-ACC3-DDA775FE9865} = {6022AC51-B658-4C54-97EF-79187AC65B47} + {BFA3BF26-33BD-4A65-B84D-C7F30D131668} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} + {7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} + {DCA2703D-250A-463E-A68A-07ED105AE6BD} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} + {0162E499-42D0-409B-AA25-EED21F75336B} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} + {CBC6C247-747B-4908-B09A-4D2E0F640B6B} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} + {85226AFB-CE71-4851-9A75-7EEC663A8E8A} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} + {E618A9CD-A39F-4925-A538-E8A3FEF24E54} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} + {0773ED53-08E2-4495-A3BE-CA0B5D413C15} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} + {FC0FE702-A87D-4D70-A9B6-1ECCD611125F} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} + {6022AC51-B658-4C54-97EF-79187AC65B47} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} {66A378A1-E9F4-4AD5-8946-D0EC06C2902F} = {6022AC51-B658-4C54-97EF-79187AC65B47} - {869951D5-A0D6-4DC6-9F1D-E6B9A12AC446} = {D599885D-E161-4CCE-A66E-7A40C8C4F4CC} - {E6F4983F-DE41-4AEC-88E7-1FA9AFB4E6FF} = {D599885D-E161-4CCE-A66E-7A40C8C4F4CC} - {000E4F64-5D0D-4EB1-B0BF-1A62ADBC6EAD} = {D599885D-E161-4CCE-A66E-7A40C8C4F4CC} - {44A8DE09-CAB9-49D8-9CFC-5EB0A552F181} = {F355E45F-F54F-4B42-8916-9A633A392789} - {CE498514-D12D-4B6E-AE0E-FEC29BD43748} = {F355E45F-F54F-4B42-8916-9A633A392789} - {08CE9972-283B-44F4-82FA-966F7DFA6B7A} = {F355E45F-F54F-4B42-8916-9A633A392789} - {3EAA45A9-735C-4AC7-A799-947B93EA449D} = {F355E45F-F54F-4B42-8916-9A633A392789} - {1F261725-6318-4434-A1B1-6C70CE4CD324} = {F355E45F-F54F-4B42-8916-9A633A392789} - {A5C0E8F8-9D04-46ED-91D6-1DEF1575313B} = {F355E45F-F54F-4B42-8916-9A633A392789} + {9A9D6FD4-6A2E-455D-ACC3-DDA775FE9865} = {6022AC51-B658-4C54-97EF-79187AC65B47} + {78CC29AC-CC79-4355-B1F2-97936DF198AC} = {6022AC51-B658-4C54-97EF-79187AC65B47} + {943DBBB3-E84E-4CF4-917C-C05AFA8743C1} = {6022AC51-B658-4C54-97EF-79187AC65B47} + {88DA149F-21B2-48AB-82C4-28FB6BDFD783} = {6022AC51-B658-4C54-97EF-79187AC65B47} + {DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD} = {0773ED53-08E2-4495-A3BE-CA0B5D413C15} + {DFB936AD-90EE-4B4F-941E-4F4A636F0D92} = {0773ED53-08E2-4495-A3BE-CA0B5D413C15} + {0991423A-DBF6-4C89-B365-A1DF1EB32E42} = {BFA3BF26-33BD-4A65-B84D-C7F30D131668} + {5A1354DF-4989-4BB4-BC6B-D627C2E9FA13} = {BFA3BF26-33BD-4A65-B84D-C7F30D131668} + {08F772A1-F0BE-433E-8B37-F6522953DB05} = {BFA3BF26-33BD-4A65-B84D-C7F30D131668} + {AFE34868-AFA1-4E1C-9450-47AB4BE329D5} = {C7F29FC2-1B03-4CDD-9E30-400F4765FF04} + {EEF5E054-4192-4A57-8FBF-E860D808A51D} = {C7F29FC2-1B03-4CDD-9E30-400F4765FF04} + {5C70D6AB-0A33-43F9-B8B5-54558C35BBB1} = {C7F29FC2-1B03-4CDD-9E30-400F4765FF04} + {BAD94D6E-4159-4CB6-B991-486F412D9BB6} = {C7F29FC2-1B03-4CDD-9E30-400F4765FF04} + {B7823AE9-4B43-4859-8796-2EBDC116FBB8} = {C7F29FC2-1B03-4CDD-9E30-400F4765FF04} + {A9F12710-24E4-46D4-832C-6ECB395B9EAD} = {C7F29FC2-1B03-4CDD-9E30-400F4765FF04} + {A4AA51DE-A096-47EC-AA5D-D91457834ECF} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} + {3CA90546-3B4C-4663-9445-C4E9371750A7} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} + {9196DD8A-B4D4-4780-8742-C5762E547FC2} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} + {8AA421C8-D7AF-4957-9F43-5135328ACB24} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} + {7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} + {F93E52FD-DA66-4CE5-A0CB-BCD902811122} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} + {4B8F0F98-8BE1-402B-AA8B-C8D548577B38} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} + {D022A6CE-7438-41E8-AC64-F2DE18EC54C6} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} + {918487B7-2153-4618-BBB3-344DBDDF2A2A} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} + {E54A5AD2-418D-4A85-BA5E-CD803DE38715} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} + {5EEB99CF-EA2B-4733-80A6-CE9192D68170} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} + {64A3E5E6-90BF-47F6-94DF-68C94B62C817} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} + {461606BD-E824-4D0A-8CBA-01810B1F5E02} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} + {17F4D7E0-6933-4C2E-8714-FD7E98D625D5} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} + {DD9AE6A5-2B9D-443A-BC71-38BE578C36BD} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} + {A569DCC1-C608-45FD-B770-4F79335EF154} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} + {DEFC8584-BEC3-4921-BD0F-40482E450B7B} = {F3662720-9EA2-4591-BBC6-97361DCE50A9} + {6B1CFE35-DA17-4DEB-9C6E-227E5E251DA0} = {DEFC8584-BEC3-4921-BD0F-40482E450B7B} + {0008FCE9-9EB4-4E2E-979B-553278E5BBA6} = {DEFC8584-BEC3-4921-BD0F-40482E450B7B} + {A4C858C8-51B6-4265-A695-A20FCEBA1D19} = {CDE0C5A4-2096-48B5-BEA3-74DBA0F0E1EF} + {1D18D788-F7EE-4585-A23B-34DC8EC63CB8} = {CDE0C5A4-2096-48B5-BEA3-74DBA0F0E1EF} + {EC06F96A-AEEC-49D6-B03D-AB87C6EB674C} = {CDE0C5A4-2096-48B5-BEA3-74DBA0F0E1EF} + {C896FFFF-5B6C-4B0E-B6DF-049865F501B4} = {E0646C25-36F2-4524-969F-FA621353AB94} + {70966F84-74C9-4067-A379-0C674A929233} = {E0646C25-36F2-4524-969F-FA621353AB94} + {52006F3F-3156-45DE-89D8-C4813694FBA4} = {E0646C25-36F2-4524-969F-FA621353AB94} + {50A89267-A28B-4DF3-8E62-912E005143B8} = {E0646C25-36F2-4524-969F-FA621353AB94} + {97B3B514-AB0E-4FE1-89DE-8A945F5112AE} = {E0646C25-36F2-4524-969F-FA621353AB94} + {CA76F702-5B4E-4918-B8D8-7FF8382434FF} = {E0646C25-36F2-4524-969F-FA621353AB94} + {6E59AF58-F635-459A-9A35-C9AC41C00339} = {E0646C25-36F2-4524-969F-FA621353AB94} + {E1B288A2-08EE-4318-8BBB-8AB72C69E33E} = {E0646C25-36F2-4524-969F-FA621353AB94} + {1F1AC7CD-D154-45BB-8EAF-804CA8055F5A} = {E0646C25-36F2-4524-969F-FA621353AB94} + {BF38FB72-B380-4196-AF8C-95749D726C61} = {E0646C25-36F2-4524-969F-FA621353AB94} + {7C96B65D-28A5-4F28-A35B-8D83CE831EE8} = {E0646C25-36F2-4524-969F-FA621353AB94} + {F390DA70-1FE1-4715-81A0-389AB010C130} = {E0646C25-36F2-4524-969F-FA621353AB94} + {388E7B64-0393-4EB4-A3E3-5C474F141853} = {E0646C25-36F2-4524-969F-FA621353AB94} + {E954F3CB-A446-492F-A664-2B376EBC86E8} = {E0646C25-36F2-4524-969F-FA621353AB94} + {23B517C9-1ECC-4419-A13F-0B7136D085CB} = {CA76F702-5B4E-4918-B8D8-7FF8382434FF} + {833904AB-3CD4-4071-9B48-5770E44685AA} = {CA76F702-5B4E-4918-B8D8-7FF8382434FF} + {D332F2D1-2CF1-43B7-903C-844BD5211A7E} = {CA76F702-5B4E-4918-B8D8-7FF8382434FF} + {8D732610-8FC6-43BA-94C9-7126FD7FE361} = {CA76F702-5B4E-4918-B8D8-7FF8382434FF} + {6FA16499-896F-4C02-BB43-1AF5C6C7C713} = {97B3B514-AB0E-4FE1-89DE-8A945F5112AE} + {4AC2D5F1-F671-480C-A075-6BF62B3721B2} = {97B3B514-AB0E-4FE1-89DE-8A945F5112AE} + {DBCF20A1-BA13-4582-BFA9-74DE4D987B73} = {97B3B514-AB0E-4FE1-89DE-8A945F5112AE} + {C9DE556D-325C-4544-B29F-16A9EB7C9830} = {97B3B514-AB0E-4FE1-89DE-8A945F5112AE} + {D294A12D-4B38-4F25-9AA6-3D4A6CE26E7B} = {C4035C32-026F-4158-AF15-113EA1EF1960} + {BDA49550-5ED1-4C6B-B648-657B2CACD8E0} = {C4035C32-026F-4158-AF15-113EA1EF1960} + {72FFB35A-C9E2-4A31-B4FA-E3E3E28DED5F} = {C4035C32-026F-4158-AF15-113EA1EF1960} + {FE88FE17-D9FB-4FCC-9A35-6BFFB6B26CC6} = {C4035C32-026F-4158-AF15-113EA1EF1960} + {68D5EE3B-0C35-4DF1-BD29-6606851A02C1} = {C4035C32-026F-4158-AF15-113EA1EF1960} + {068F9531-5D29-49E0-980E-59982A3A0469} = {C4035C32-026F-4158-AF15-113EA1EF1960} EndGlobalSection EndGlobal diff --git a/SharpDevelop.sln b/SharpDevelop.sln index d6c28f042f..922b8a5175 100644 --- a/SharpDevelop.sln +++ b/SharpDevelop.sln @@ -1,11 +1,16 @@  Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 -# SharpDevelop 4.0.0.5490 +# SharpDevelop 4.0.0.5639 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Main", "Main", "{256F5C28-532C-44C0-8AB8-D8EC5E492E01}" ProjectSection(SolutionItems) = postProject EndProjectSection EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.BuildWorker", "src\Main\ICSharpCode.SharpDevelop.BuildWorker\ICSharpCode.SharpDevelop.BuildWorker.csproj", "{C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}" + ProjectSection(ProjectDependencies) = postProject + {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} + EndProjectSection +EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartUp", "src\Main\StartUp\Project\StartUp.csproj", "{1152B71B-3C05-4598-B20D-823B5D40559E}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} @@ -43,6 +48,11 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.Presentati EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core", "src\Main\Core\Project\ICSharpCode.Core.csproj", "{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.BuildWorker35", "src\Main\ICSharpCode.SharpDevelop.BuildWorker35\ICSharpCode.SharpDevelop.BuildWorker35.csproj", "{B5F54272-49F0-40DB-845A-8D837875D3BA}" + ProjectSection(ProjectDependencies) = postProject + {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} + EndProjectSection +EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{2A232EF1-EB95-41C6-B63A-C106E0C95D3C}" ProjectSection(SolutionItems) = postProject EndProjectSection @@ -789,11 +799,28 @@ Global {E954F3CB-A446-492F-A664-2B376EBC86E8}.Release|Any CPU.ActiveCfg = Release|Any CPU {E954F3CB-A446-492F-A664-2B376EBC86E8}.Release|Win32.Build.0 = Release|Any CPU {E954F3CB-A446-492F-A664-2B376EBC86E8}.Release|Win32.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}.Debug|Win32.Build.0 = Debug|Any CPU + {C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}.Debug|Win32.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 + {C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}.Release|Win32.Build.0 = Release|Any CPU + {C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}.Release|Win32.ActiveCfg = Release|Any CPU + {B5F54272-49F0-40DB-845A-8D837875D3BA}.Debug|Any CPU.Build.0 = Debug|x86 + {B5F54272-49F0-40DB-845A-8D837875D3BA}.Debug|Any CPU.ActiveCfg = Debug|x86 + {B5F54272-49F0-40DB-845A-8D837875D3BA}.Debug|Win32.Build.0 = Debug|x86 + {B5F54272-49F0-40DB-845A-8D837875D3BA}.Debug|Win32.ActiveCfg = Debug|x86 + {B5F54272-49F0-40DB-845A-8D837875D3BA}.Release|Any CPU.Build.0 = Release|x86 + {B5F54272-49F0-40DB-845A-8D837875D3BA}.Release|Any CPU.ActiveCfg = Release|x86 + {B5F54272-49F0-40DB-845A-8D837875D3BA}.Release|Win32.Build.0 = Release|x86 + {B5F54272-49F0-40DB-845A-8D837875D3BA}.Release|Win32.ActiveCfg = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution + {B5F54272-49F0-40DB-845A-8D837875D3BA} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} {7E4A7172-7FF5-48D0-B719-7CD959DD1AC9} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} {857CA1A3-FC88-4BE0-AB6A-D1EE772AB288} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} @@ -802,6 +829,7 @@ Global {2748AD25-9C63-4E12-877B-4DCE96FBED54} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} {8035765F-D51F-4A0C-A746-2FD100E19419} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} {1152B71B-3C05-4598-B20D-823B5D40559E} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} + {C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01} {E5A0F4D8-37FD-4A30-BEB0-4409DC4E0865} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C} {2FF700C2-A38A-48BD-A637-8CAFD4FE6237} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C} {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C} diff --git a/src/Libraries/AvalonDock/AvalonDock.csproj b/src/Libraries/AvalonDock/AvalonDock.csproj index bb015e81c5..b215622a97 100644 --- a/src/Libraries/AvalonDock/AvalonDock.csproj +++ b/src/Libraries/AvalonDock/AvalonDock.csproj @@ -1,4 +1,4 @@ - + Debug AnyCPU @@ -23,7 +23,8 @@ ..\..\..\bin\ False False - false + False + False true diff --git a/src/Libraries/ICSharpCode.Build.Tasks/Project/ICSharpCode.Build.Tasks.csproj b/src/Libraries/ICSharpCode.Build.Tasks/Project/ICSharpCode.Build.Tasks.csproj index 647183228a..bcc8261018 100644 --- a/src/Libraries/ICSharpCode.Build.Tasks/Project/ICSharpCode.Build.Tasks.csproj +++ b/src/Libraries/ICSharpCode.Build.Tasks/Project/ICSharpCode.Build.Tasks.csproj @@ -1,4 +1,5 @@ - + + Library ICSharpCode.Build.Tasks diff --git a/src/Libraries/TreeViewAdv/Aga.Controls/Aga.Controls.csproj b/src/Libraries/TreeViewAdv/Aga.Controls/Aga.Controls.csproj index 6d2d8140f7..0bc0196c9e 100644 --- a/src/Libraries/TreeViewAdv/Aga.Controls/Aga.Controls.csproj +++ b/src/Libraries/TreeViewAdv/Aga.Controls/Aga.Controls.csproj @@ -1,4 +1,4 @@ - + Debug AnyCPU @@ -19,6 +19,7 @@ true key.snk + false true diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj index 54dd060a6b..c4e556d6d9 100644 --- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj +++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj @@ -30,15 +30,16 @@ Full true - DEBUG,TRACE False True + DEBUG,TRACE;PUBLICINTERPROCESS - False - None + false + PdbOnly True False + TRACE;PUBLICINTERPROCESS @@ -67,6 +68,18 @@ + + Src\Project\MSBuildEngine\BuildJob.cs + + + Src\Project\MSBuildEngine\EventSource.cs + + + Src\Project\MSBuildEngine\EventTypes.cs + + + Src\Project\MSBuildEngine\ExtendedBinaryReader.cs + @@ -244,9 +257,9 @@ - + - + diff --git a/src/Main/Base/Project/Src/Project/MSBuildEngine/BuildWorkerManager.cs b/src/Main/Base/Project/Src/Project/MSBuildEngine/BuildWorkerManager.cs new file mode 100644 index 0000000000..e309db5228 --- /dev/null +++ b/src/Main/Base/Project/Src/Project/MSBuildEngine/BuildWorkerManager.cs @@ -0,0 +1,184 @@ +// +// +// +// +// $Revision$ +// + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Threading; + +using ICSharpCode.Core; +using ICSharpCode.SharpDevelop.BuildWorker; +using ICSharpCode.SharpDevelop.Project; +using Microsoft.Build.Framework; + +namespace ICSharpCode.SharpDevelop.Project +{ + sealed class BuildWorkerManager + { + readonly List freeWorkers = new List(); + readonly string workerProcessName; + + public static readonly BuildWorkerManager MSBuild40 = new BuildWorkerManager("ICSharpCode.SharpDevelop.BuildWorker40.exe"); + public static readonly BuildWorkerManager MSBuild35 = new BuildWorkerManager("ICSharpCode.SharpDevelop.BuildWorker35.exe"); + + private BuildWorkerManager(string workerProcessName) + { + this.workerProcessName = workerProcessName; + } + + public void RunBuildJob(BuildJob job, IEnumerable loggers, IBuildFeedbackSink reportWhenDone) + { + BuildWorker worker = GetFreeWorker(); + worker.RunJob(job, loggers, reportWhenDone); + } + + BuildWorker GetFreeWorker() + { + lock (freeWorkers) { + if (freeWorkers.Count != 0) { + BuildWorker w = freeWorkers[freeWorkers.Count - 1]; + freeWorkers.RemoveAt(freeWorkers.Count - 1); + w.MarkAsInUse(); + return w; + } + } + return new BuildWorker(this); + } + + sealed class BuildWorker + { + readonly BuildWorkerManager parentManager; + readonly WorkerProcess process; + Timer timer; + bool isFree; + + public BuildWorker(BuildWorkerManager parentManager) + { + this.parentManager = parentManager; + string sdbin = Path.GetDirectoryName(typeof(BuildWorker).Assembly.Location); + ProcessStartInfo startInfo = new ProcessStartInfo(Path.Combine(sdbin, parentManager.workerProcessName), "worker"); + startInfo.WorkingDirectory = sdbin; + startInfo.UseShellExecute = false; + startInfo.CreateNoWindow = true; + process = new WorkerProcess(DataArrived); + process.ProcessExited += process_ProcessExited; + process.Start(startInfo); + } + + EventSource source; + IEnumerable loggers; + IBuildFeedbackSink reportWhenDone; + CancellationTokenRegistration cancellationRegistration; + + public void RunJob(BuildJob job, IEnumerable loggers, IBuildFeedbackSink reportWhenDone) + { + this.source = new EventSource(); + this.loggers = loggers; + this.reportWhenDone = reportWhenDone; + foreach (var logger in loggers) { + logger.Initialize(source); + } + try { + process.Writer.Write("StartBuild"); + job.WriteTo(process.Writer); + this.cancellationRegistration = reportWhenDone.ProgressMonitor.CancellationToken.Register(OnCancel); + } catch (IOException ex) { + // "Pipe is broken" + source.ForwardEvent(new BuildErrorEventArgs(null, null, null, 0, 0, 0, 0, "Error talking to build worker: " + ex.Message, null, null)); + BuildDone(false); + } + } + + void OnCancel() + { + LoggingService.Debug("Cancel Build Worker"); + process.Writer.Write("Cancel"); + } + + void DataArrived(string command, BinaryReader reader) + { + LoggingService.Debug("Received command " + command); + switch (command) { + case "ReportEvent": + source.ForwardEvent(EventSource.DecodeEvent(reader)); + break; + case "BuildDone": + bool success = reader.ReadBoolean(); + BuildDone(success); + MarkAsFree(); + break; + case "ReportException": + string ex = reader.ReadString(); + MessageService.ShowException(new Exception("Exception from build worker"), ex); + break; + default: + throw new NotSupportedException(command); + } + } + + void BuildDone(bool success) + { + lock (this) { + if (reportWhenDone == null) + return; + cancellationRegistration.Dispose(); + foreach (var logger in loggers) { + logger.Shutdown(); + } + reportWhenDone.Done(success); + reportWhenDone = null; + } + } + + void MarkAsFree() + { + lock (parentManager.freeWorkers) { + this.isFree = true; + parentManager.freeWorkers.Add(this); + timer = new Timer(timer_Elapsed, null, 10000, 0); + } + } + + void timer_Elapsed(object state) + { + lock (parentManager.freeWorkers) { + if (!isFree) + return; // worker is already being used again + parentManager.freeWorkers.Remove(this); + MarkAsInUse(); + } + process.Dispose(); + } + + void process_ProcessExited(object sender, EventArgs e) + { + bool reportBuildError = false; + lock (parentManager.freeWorkers) { + if (isFree) { + parentManager.freeWorkers.Remove(this); + MarkAsInUse(); + } else { + reportBuildError = true; + } + } + if (reportBuildError) { + source.ForwardEvent(new BuildErrorEventArgs(null, null, null, 0, 0, 0, 0, "Build worker process exited unexpectedly.", null, null)); + BuildDone(false); + } + process.Dispose(); + } + + public void MarkAsInUse() + { + Debug.Assert(this.isFree); + this.isFree = false; + timer.Dispose(); + } + } + } +} diff --git a/src/Main/Base/Project/Src/Project/MSBuildEngine/EventSource.cs b/src/Main/Base/Project/Src/Project/MSBuildEngine/EventSource.cs deleted file mode 100644 index 0affc92f71..0000000000 --- a/src/Main/Base/Project/Src/Project/MSBuildEngine/EventSource.cs +++ /dev/null @@ -1,83 +0,0 @@ -// -// -// -// -// $Revision$ -// - -using Microsoft.Build.Framework; -using System; - -namespace ICSharpCode.SharpDevelop.Project -{ - /// - /// IEventSource implementation. Used to forward events to submission-specific loggers. - /// - sealed class EventSource : IEventSource, IEventRedirector - { - 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 ForwardEvent(Microsoft.Build.Framework.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); - } - } -} diff --git a/src/Main/Base/Project/Src/Project/MSBuildEngine/MSBuildEngine.cs b/src/Main/Base/Project/Src/Project/MSBuildEngine/MSBuildEngine.cs index 59d2b588dc..de91525466 100755 --- a/src/Main/Base/Project/Src/Project/MSBuildEngine/MSBuildEngine.cs +++ b/src/Main/Base/Project/Src/Project/MSBuildEngine/MSBuildEngine.cs @@ -16,6 +16,7 @@ using System.Threading; using System.Xml; using ICSharpCode.Core; +using ICSharpCode.SharpDevelop.BuildWorker; using ICSharpCode.SharpDevelop.Gui; using Microsoft.Build.Construction; using Microsoft.Build.Execution; @@ -119,6 +120,9 @@ 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. @@ -169,12 +173,6 @@ namespace ICSharpCode.SharpDevelop.Project } void StartBuild() - { - // perform initialization of the build in parallel - ThreadPool.QueueUserWorkItem(RunBuild); - } - - void RunBuild(object state) { Dictionary globalProperties = new Dictionary(); MSBuildBasedProject.InitializeMSBuildProjectProperties(globalProperties); @@ -188,7 +186,7 @@ namespace ICSharpCode.SharpDevelop.Project globalProperties["Platform"] = "AnyCPU"; else globalProperties["Platform"] = options.Platform; - + InterestingTasks.AddRange(MSBuildEngine.CompileTaskNames); List loggers = new List { @@ -198,15 +196,45 @@ namespace ICSharpCode.SharpDevelop.Project foreach (IMSBuildAdditionalLogger loggerProvider in MSBuildEngine.AdditionalMSBuildLoggers) { loggers.Add(loggerProvider.CreateLogger(this)); } + WriteAdditionalTargetsToTempFile(globalProperties); - // Get ParallelMSBuildManager (or create a new one if one doesn't exist already). - // The serviceContainer will automatically dispose it after the build has completed. - ParallelMSBuildManager manager = (ParallelMSBuildManager)serviceContainer.GetOrCreateService( - typeof(ParallelMSBuildManager), - delegate { - return new ParallelMSBuildManager(new MSBuild.ProjectCollection()); - }); + BuildJob job = new BuildJob(); + job.ProjectFileName = project.FileName; + job.Target = options.Target.TargetName; + // First remove the flags for the controllable events. + job.EventMask = EventTypes.All & ~ControllableEvents; + // Add back active controllable events. + if (ReportMessageEvents) + job.EventMask |= EventTypes.Message; + if (ReportTargetStartedEvents) + job.EventMask |= EventTypes.TargetStarted; + if (ReportTargetFinishedEvents) + job.EventMask |= EventTypes.TargetFinished; + if (ReportAllTaskStartedEvents) + job.EventMask |= EventTypes.TaskStarted; + if (ReportAllTaskFinishedEvents) + job.EventMask |= EventTypes.TaskFinished; + if (ReportUnknownEvents) + job.EventMask |= EventTypes.Unknown; + + if (!(ReportAllTaskStartedEvents && ReportAllTaskFinishedEvents)) { + // just some TaskStarted & TaskFinished events should be reported + job.InterestingTaskNames.AddRange(InterestingTasks); + } + foreach (var pair in globalProperties) { + job.Properties.Add(pair.Key, pair.Value); + } + + if (project.MinimumSolutionVersion <= Solution.SolutionVersionVS2008) { + BuildWorkerManager.MSBuild35.RunBuildJob(job, loggers, feedbackSink); + } else { + BuildWorkerManager.MSBuild40.RunBuildJob(job, loggers, feedbackSink); + } + } + + void WriteAdditionalTargetsToTempFile(Dictionary globalProperties) + { // Using projects with in-memory modifications doesn't work with parallel build. // As a work-around, we'll write our modifications to a file and force MSBuild to include that file using a custom property. temporaryFileName = Path.GetTempFileName(); @@ -254,67 +282,8 @@ namespace ICSharpCode.SharpDevelop.Project #if DEBUG LoggingService.Debug(File.ReadAllText(temporaryFileName)); #endif - - string fileName = project.FileName; - string[] targets = { options.Target.TargetName }; - BuildRequestData requestData = new BuildRequestData(fileName, globalProperties, null, targets, new HostServices()); - manager.StartBuild(requestData, loggers, OnComplete); } - void OnComplete(BuildSubmission submission) - { - Debug.Assert(submission.IsCompleted); - - feedbackSink.Done(submission.BuildResult.OverallResult == Microsoft.Build.Execution.BuildResultCode.Success); - } - - /* - WorkerManager.ShowError = MessageService.ShowError; - BuildWorker.BuildSettings settings = new BuildWorker.BuildSettings(); - SharpDevelopLogger logger = new SharpDevelopLogger(this); - settings.Logger.Add(logger); - - foreach (IMSBuildAdditionalLogger loggerProvider in MSBuildEngine.AdditionalMSBuildLoggers) { - settings.Logger.Add(loggerProvider.CreateLogger(this)); - } - - BuildJob job = new BuildJob(); - job.IntPtrSize = IntPtr.Size; - job.ProjectFileName = project.FileName; - // Never report custom events (those are usually derived EventArgs classes, and SharpDevelop - // doesn't have the matching assemblies loaded - see SD2-1514). - // Also, remove the flags for the controllable events. - job.EventMask = EventTypes.All & ~(ControllableEvents | EventTypes.Custom); - // Add back active controllable events. - if (ReportMessageEvents) - job.EventMask |= EventTypes.Message; - if (ReportTargetStartedEvents) - job.EventMask |= EventTypes.TargetStarted; - if (ReportTargetFinishedEvents) - job.EventMask |= EventTypes.TargetFinished; - if (ReportAllTaskStartedEvents) - job.EventMask |= EventTypes.TaskStarted; - if (ReportAllTaskFinishedEvents) - job.EventMask |= EventTypes.TaskFinished; - if (ReportUnknownEvents) - job.EventMask |= EventTypes.Unknown; - - if (!(ReportAllTaskStartedEvents && ReportAllTaskFinishedEvents)) { - // just some TaskStarted & TaskFinished events should be reported - job.InterestingTaskNames.AddRange(InterestingTasks); - } - - job.AdditionalImports.AddRange(additionalTargetFiles); - - job.Target = options.Target.TargetName; - - bool buildInProcess = false; - if (AllowBuildInProcess && Interlocked.CompareExchange(ref isBuildingInProcess, 1, 0) == 0) { - buildInProcess = true; - } - LoggingService.Info("Start job (buildInProcess=" + buildInProcess + "): " + job.ToString()); - */ - BuildError currentErrorOrWarning; /// @@ -456,6 +425,7 @@ namespace ICSharpCode.SharpDevelop.Project public void Shutdown() { + FlushCurrentError(); if (worker.temporaryFileName != null) { File.Delete(worker.temporaryFileName); worker.temporaryFileName = null; diff --git a/src/Main/Base/Project/Src/Project/MSBuildEngine/ParallelMSBuildManager.cs b/src/Main/Base/Project/Src/Project/MSBuildEngine/ParallelMSBuildManager.cs deleted file mode 100644 index 7fc8a98025..0000000000 --- a/src/Main/Base/Project/Src/Project/MSBuildEngine/ParallelMSBuildManager.cs +++ /dev/null @@ -1,242 +0,0 @@ -// -// -// -// -// $Revision$ -// - -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; - -using ICSharpCode.Core; -using Microsoft.Build.Evaluation; -using Microsoft.Build.Execution; -using Microsoft.Build.Framework; -using Microsoft.Build.Logging; -using System.Threading; - -namespace ICSharpCode.SharpDevelop.Project -{ - /// - /// Manages parallel access to MSBuild. - /// - /// MSBuild only allows a single BuildManager to build at one time, and loggers - /// are specified globally for that BuildManager. - /// - /// This class allows to run multiple indepent builds concurrently. Logging events - /// will be forwarded to the appropriate logger. - /// - public sealed class ParallelMSBuildManager : IDisposable - { - /// - /// MSBuild only allows a single build to run at one time - so if multiple ParallelMSBuildManager - /// are present, we synchronize them using this global lock. - /// - static readonly object globalBuildEngineLock = new object(); - - static bool globalBuildEngineLockTaken; - - static void EnterGlobalBuildEngineLock() - { - lock (globalBuildEngineLock) { - while (globalBuildEngineLockTaken) - Monitor.Wait(globalBuildEngineLock); - globalBuildEngineLockTaken = true; - } - } - - static void LeaveGlobalBuildEngineLock() - { - lock (globalBuildEngineLock) { - Debug.Assert(globalBuildEngineLockTaken); - globalBuildEngineLockTaken = false; - Monitor.Pulse(globalBuildEngineLock); - } - } - - public ProjectCollection ProjectCollection { get; private set; } - - /// - /// Creates a new ParallelMSBuildManager for the project collection. - /// WARNING: only a single ParallelMSBuildManager can build at a time, others will wait. - /// Ensure you dispose the ParallelMSBuildManager when you are done with it, otherwise all future - /// ParallelMSBuildManagers will deadlock! - /// - public ParallelMSBuildManager(ProjectCollection projectCollection) - { - if (projectCollection == null) - throw new ArgumentNullException("projectCollection"); - this.ProjectCollection = projectCollection; - } - - #region Manage StartBuild/EndBuild - readonly object enableDisableLock = new object(); - bool buildIsRunning; - - void StartupBuildEngine() - { - lock (enableDisableLock) { - if (buildIsRunning) - return; - buildIsRunning = true; - - LoggingService.Info("ParallelMSBuildManager: waiting for start permission..."); - EnterGlobalBuildEngineLock(); - - LoggingService.Info("ParallelMSBuildManager: got start permisson, starting..."); - BuildParameters parameters = new BuildParameters(this.ProjectCollection); - parameters.Loggers = new ILogger[] { - new CentralLogger(this) - }; - parameters.EnableNodeReuse = false; - parameters.MaxNodeCount = BuildOptions.DefaultParallelProjectCount; - BuildManager.DefaultBuildManager.BeginBuild(parameters); - } - } - - - /// - /// Shuts down the build engine and allows other managers to build. - /// - public void Dispose() - { - lock (enableDisableLock) { - if (!buildIsRunning) - return; - buildIsRunning = false; - try { - LoggingService.Info("ParallelMSBuildManager shutting down..."); - BuildManager.DefaultBuildManager.EndBuild(); - BuildManager.DefaultBuildManager.ResetCaches(); - LoggingService.Info("ParallelMSBuildManager shut down!"); - } finally { - LeaveGlobalBuildEngineLock(); - } - } - } - #endregion - - readonly Dictionary submissionEventSourceMapping = new Dictionary(); - - /// - /// Starts building. - /// This method blocks if another ParallelMSBuildManager is currently building. - /// However, it doe - /// - /// The requested build. - /// The logger that received build output. - /// Callback that is run when the build is complete - /// The build submission that was started. - public BuildSubmission StartBuild(BuildRequestData requestData, IEnumerable loggers, BuildSubmissionCompleteCallback callback) - { - if (requestData == null) - throw new ArgumentNullException("requestData"); - ILogger[] loggersArray; - if (loggers == null) - loggersArray = new ILogger[0]; - else - loggersArray = loggers.ToArray(); // iterate through logger enumerable once - - StartupBuildEngine(); - BuildSubmission submission = BuildManager.DefaultBuildManager.PendBuildRequest(requestData); - EventSource eventSource = new EventSource(); - foreach (ILogger logger in loggersArray) { - if (logger != null) - logger.Initialize(eventSource); - } - lock (submissionEventSourceMapping) { - submissionEventSourceMapping.Add(submission.SubmissionId, eventSource); - } - RunningBuild build = new RunningBuild(this, eventSource, loggersArray, callback); - submission.ExecuteAsync(build.OnComplete, null); - return submission; - } - - sealed class RunningBuild - { - ParallelMSBuildManager manager; - ILogger[] loggers; - BuildSubmissionCompleteCallback callback; - EventSource eventSource; - - public RunningBuild(ParallelMSBuildManager manager, EventSource eventSource, ILogger[] loggers, BuildSubmissionCompleteCallback callback) - { - this.manager = manager; - this.eventSource = eventSource; - this.loggers = loggers; - this.callback = callback; - } - - internal void OnComplete(BuildSubmission submission) - { - lock (manager.submissionEventSourceMapping) { - manager.submissionEventSourceMapping.Remove(submission.SubmissionId); - } - if (submission.BuildResult.Exception != null) { - LoggingService.Error(submission.BuildResult.Exception); - eventSource.ForwardEvent(new BuildErrorEventArgs(null, null, null, 0, 0, 0, 0, submission.BuildResult.Exception.ToString(), null, null)); - } - foreach (ILogger logger in loggers) { - if (logger != null) - logger.Shutdown(); - } - if (callback != null) - callback(submission); - } - } - - sealed class CentralLogger : INodeLogger, IEventRedirector - { - readonly ParallelMSBuildManager parentManager; - - public CentralLogger(ParallelMSBuildManager parentManager) - { - this.parentManager = parentManager; - } - - public void Initialize(IEventSource eventSource, int nodeCount) - { - Initialize(eventSource); - } - - public void Initialize(IEventSource eventSource) - { - eventSource.AnyEventRaised += (sender, e) => ForwardEvent(e); - } - - public void Shutdown() - { - } - - public string Parameters { get; set; } - public LoggerVerbosity Verbosity { get; set; } - - public void ForwardEvent(Microsoft.Build.Framework.BuildEventArgs e) - { - try { - if (e.BuildEventContext == null) { - if (e is BuildStartedEventArgs || e is BuildFinishedEventArgs) { - // these two don't have context set, so we cannot forward them - // this isn't a problem because we know ourselves when we start/stop a build - return; - } else { - throw new InvalidOperationException("BuildEventContext is null on " + e.ToString()); - } - } - EventSource redirector; - lock (parentManager.submissionEventSourceMapping) { - if (!parentManager.submissionEventSourceMapping.TryGetValue(e.BuildEventContext.SubmissionId, out redirector)) { - LoggingService.Warn("Could not deliver build event: " + e + ":\n" + e.Message); - } - } - if (redirector != null) - redirector.ForwardEvent(e); - } catch (Exception ex) { - MessageService.ShowException(ex, "Error in build logger"); - } - } - } - } -} diff --git a/src/Main/Base/Project/Src/Project/MSBuildEngine/WorkerProcess.cs b/src/Main/Base/Project/Src/Project/MSBuildEngine/WorkerProcess.cs new file mode 100644 index 0000000000..6f85587114 --- /dev/null +++ b/src/Main/Base/Project/Src/Project/MSBuildEngine/WorkerProcess.cs @@ -0,0 +1,128 @@ +// +// +// +// +// $Revision: -1 $ +// + +using System; +using System.Diagnostics; +using System.Globalization; +using System.IO; +using System.IO.Pipes; +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.Project +{ + /// + /// Manages a worker process that communicates with the host using a bidirectional named pipe. + /// + sealed class WorkerProcess : IDisposable + { + readonly AnonymousPipeServerStream hostToWorkerPipe = new AnonymousPipeServerStream(PipeDirection.Out, HandleInheritability.Inheritable); + readonly AnonymousPipeServerStream workerToHostPipe = new AnonymousPipeServerStream(PipeDirection.In, HandleInheritability.Inheritable); + readonly Process process = new Process(); + readonly Thread readerThread; + int id; + volatile bool isDisposed; + readonly Action dataArrived; + + public WorkerProcess(Action dataArrived) + { + this.dataArrived = dataArrived; + readerThread = new Thread(ReaderThread); + readerThread.IsBackground = true; + } + + public void Start(ProcessStartInfo info) + { + if (info == null) + throw new ArgumentNullException("info"); + process.StartInfo = info; + + Debug.WriteLine("WorkerProcess starting..."); + string oldArguments = info.Arguments; + try { + info.Arguments += " " + hostToWorkerPipe.GetClientHandleAsString() + " " + workerToHostPipe.GetClientHandleAsString(); + if (!process.Start()) + throw new InvalidOperationException("Process.Start() failed"); + } finally { + info.Arguments = oldArguments; + // client handles were inherited into started process, dispose our copy + hostToWorkerPipe.DisposeLocalCopyOfClientHandle(); + workerToHostPipe.DisposeLocalCopyOfClientHandle(); + } + id = process.Id; + readerThread.Start(); + this.Writer = new BinaryWriter(hostToWorkerPipe); + Debug.WriteLine("WorkerProcess " + id + " started"); + } + + void ReaderThread() + { + try { + using (BinaryReader reader = new BinaryReader(workerToHostPipe)) { + while (!isDisposed) { + string text; + try { + text = reader.ReadString(); + } catch (EndOfStreamException) { + Core.LoggingService.Debug("Cannot read from WorkerProcess " + id + ": end of stream"); + break; + } + dataArrived(text, reader); + } + } + Core.LoggingService.Debug("Stopped reading from WorkerProcess " + id + "."); + if (ProcessExited != null) + ProcessExited(this, EventArgs.Empty); + } catch (Exception ex) { + Core.MessageService.ShowException(ex); + } finally { + Core.LoggingService.Debug("End of reader thread on WorkerProcess " + id + "."); + } + } + + public event EventHandler ProcessExited; + + public BinaryWriter Writer { get; private set; } + + public void Kill() + { + try { + if (!process.HasExited) { + process.Kill(); + } + } catch (InvalidOperationException) { + // may occur when the worker process crashes + } + } + + public void Dispose() + { + isDisposed = true; + Core.LoggingService.Debug("Telling worker process to exit"); + hostToWorkerPipe.Dispose(); // send "end-of-stream" to worker + if (Thread.CurrentThread != readerThread) { + // don't deadlock when disposing from within ReaderThread event + Core.LoggingService.Debug("Waiting for thread-join"); + if (!readerThread.Join(3000)) { + Core.LoggingService.Debug("Thread-join failed. Killing worker process."); + Kill(); + Core.LoggingService.Debug("Waiting for thread-join"); + readerThread.Join(); + } + Core.LoggingService.Debug("Joined!"); + } + workerToHostPipe.Dispose(); + process.Dispose(); + } + } +} diff --git a/src/Main/Base/Project/Src/Project/MSBuildInternals.cs b/src/Main/Base/Project/Src/Project/MSBuildInternals.cs index a9a0f720b8..da47324bc1 100644 --- a/src/Main/Base/Project/Src/Project/MSBuildInternals.cs +++ b/src/Main/Base/Project/Src/Project/MSBuildInternals.cs @@ -202,12 +202,12 @@ namespace ICSharpCode.SharpDevelop.Project List loggers = new List(); if (referenceReplacements == null) loggers.Add(new SimpleErrorLogger()); - - using (ParallelMSBuildManager buildManager = new ParallelMSBuildManager(baseProject.MSBuildProjectCollection)) { - BuildSubmission submission = buildManager.StartBuild(requestData, loggers, null); + lock (SolutionProjectCollectionLock) { + BuildParameters parameters = new BuildParameters(baseProject.MSBuildProjectCollection); + parameters.Loggers = loggers; + LoggingService.Debug("Started build for ResolveAssemblyReferences"); - submission.WaitHandle.WaitOne(); - BuildResult result = submission.BuildResult; + BuildResult result = BuildManager.DefaultBuildManager.Build(parameters, requestData); if (result == null) throw new InvalidOperationException("BuildResult is null"); LoggingService.Debug("Build for ResolveAssemblyReferences finished: " + result.OverallResult); diff --git a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/BuildJob.cs b/src/Main/ICSharpCode.SharpDevelop.BuildWorker/BuildJob.cs index 3002226b46..b4467274a4 100644 --- a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/BuildJob.cs +++ b/src/Main/ICSharpCode.SharpDevelop.BuildWorker/BuildJob.cs @@ -7,6 +7,7 @@ using System; using System.Collections.Generic; +using System.IO; using System.Text; namespace ICSharpCode.SharpDevelop.BuildWorker @@ -14,17 +15,8 @@ namespace ICSharpCode.SharpDevelop.BuildWorker /// /// The settings used to start a build. /// - [Serializable] - public class BuildJob + 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; } @@ -44,12 +36,6 @@ namespace ICSharpCode.SharpDevelop.BuildWorker get { return properties; } } - List additionalImports = new List(); - - public IList AdditionalImports { - get { return additionalImports; } - } - HashSet interestingTaskNames = new HashSet(StringComparer.OrdinalIgnoreCase); public ICollection InterestingTaskNames { @@ -66,10 +52,10 @@ namespace ICSharpCode.SharpDevelop.BuildWorker 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(" " + 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); @@ -77,14 +63,38 @@ namespace ICSharpCode.SharpDevelop.BuildWorker return b.ToString(); } - [NonSerialized] - internal Action CancelCallback; + public void WriteTo(BinaryWriter writer) + { + writer.Write(this.ProjectFileName); + writer.Write(this.Target); + writer.WriteInt32((int)eventMask); + + writer.WriteInt32(properties.Count); + foreach (var pair in properties) { + writer.Write(pair.Key); + writer.Write(pair.Value); + } + + writer.WriteInt32(interestingTaskNames.Count); + foreach (string taskName in interestingTaskNames) + writer.Write(taskName); + } - public void Cancel() + public static BuildJob ReadFrom(BinaryReader reader) { - if (CancelCallback != null) { - CancelCallback(); + BuildJob job = new BuildJob(); + job.ProjectFileName = reader.ReadString(); + job.Target = reader.ReadString(); + job.EventMask = (EventTypes)reader.ReadInt32(); + int c = reader.ReadInt32(); + for (int i = 0; i < c; i++) { + job.properties.Add(reader.ReadString(), reader.ReadString()); + } + c = reader.ReadInt32(); + for (int i = 0; i < c; i++) { + job.interestingTaskNames.Add(reader.ReadString()); } + return job; } } } diff --git a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/EventSource.cs b/src/Main/ICSharpCode.SharpDevelop.BuildWorker/EventSource.cs index 7818baf8e4..a0d54fe287 100644 --- a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/EventSource.cs +++ b/src/Main/ICSharpCode.SharpDevelop.BuildWorker/EventSource.cs @@ -6,31 +6,12 @@ // using System; +using System.IO; 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 + class EventSource : IEventSource, IEventRedirector { public event BuildMessageEventHandler MessageRaised; public event BuildErrorEventHandler ErrorRaised; @@ -48,8 +29,148 @@ namespace ICSharpCode.SharpDevelop.BuildWorker public event AnyEventHandler AnyEventRaised; - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")] - public void RaiseEvent(BuildEventArgs e) + public static void EncodeEvent(BinaryWriter writer, BuildEventArgs e) + { + EventTypes type = GetEventType(e); + writer.WriteInt32((int)type); + writer.WriteNullableString(e.Message); + writer.WriteNullableString(e.HelpKeyword); + writer.WriteNullableString(e.SenderName); + writer.WriteDateTime(e.Timestamp); + switch (type) { + case EventTypes.Error: + BuildErrorEventArgs error = (BuildErrorEventArgs)e; + writer.WriteNullableString(error.Subcategory); + writer.WriteNullableString(error.Code); + writer.WriteNullableString(error.File); + writer.WriteInt32(error.LineNumber); + writer.WriteInt32(error.ColumnNumber); + writer.WriteInt32(error.EndLineNumber); + writer.WriteInt32(error.EndColumnNumber); + break; + case EventTypes.Warning: + BuildWarningEventArgs warning = (BuildWarningEventArgs)e; + writer.WriteNullableString(warning.Subcategory); + writer.WriteNullableString(warning.Code); + writer.WriteNullableString(warning.File); + writer.WriteInt32(warning.LineNumber); + writer.WriteInt32(warning.ColumnNumber); + writer.WriteInt32(warning.EndLineNumber); + writer.WriteInt32(warning.EndColumnNumber); + break; + case EventTypes.Message: + BuildMessageEventArgs message = (BuildMessageEventArgs)e; + writer.WriteInt32((int)message.Importance); + break; + case EventTypes.BuildFinished: + BuildFinishedEventArgs buildFinished = (BuildFinishedEventArgs)e; + writer.Write(buildFinished.Succeeded); + break; + case EventTypes.BuildStarted: + break; + case EventTypes.ProjectFinished: + ProjectFinishedEventArgs projectFinished = (ProjectFinishedEventArgs)e; + writer.WriteNullableString(projectFinished.ProjectFile); + writer.Write(projectFinished.Succeeded); + break; + case EventTypes.ProjectStarted: + ProjectStartedEventArgs projectStarted = (ProjectStartedEventArgs)e; + writer.WriteNullableString(projectStarted.ProjectFile); + writer.WriteNullableString(projectStarted.TargetNames); + break; + case EventTypes.TargetFinished: + TargetFinishedEventArgs targetFinished = (TargetFinishedEventArgs)e; + writer.WriteNullableString(targetFinished.TargetName); + writer.WriteNullableString(targetFinished.ProjectFile); + writer.WriteNullableString(targetFinished.TargetFile); + writer.Write(targetFinished.Succeeded); + break; + case EventTypes.TargetStarted: + TargetStartedEventArgs targetStarted = (TargetStartedEventArgs)e; + writer.WriteNullableString(targetStarted.TargetName); + writer.WriteNullableString(targetStarted.ProjectFile); + writer.WriteNullableString(targetStarted.TargetFile); + #if MSBUILD35 + writer.WriteNullableString(null); + #else + writer.WriteNullableString(targetStarted.ParentTarget); + #endif + break; + case EventTypes.TaskFinished: + TaskFinishedEventArgs taskFinished = (TaskFinishedEventArgs)e; + writer.WriteNullableString(taskFinished.ProjectFile); + writer.WriteNullableString(taskFinished.TaskFile); + writer.WriteNullableString(taskFinished.TaskName); + writer.Write(taskFinished.Succeeded); + break; + case EventTypes.TaskStarted: + TaskStartedEventArgs taskStarted = (TaskStartedEventArgs)e; + writer.WriteNullableString(taskStarted.ProjectFile); + writer.WriteNullableString(taskStarted.TaskFile); + writer.WriteNullableString(taskStarted.TaskName); + break; + default: // unknown etc. + break; + } + + } + + #if !MSBUILD35 + public static BuildEventArgs DecodeEvent(BinaryReader reader) + { + EventTypes type = (EventTypes)reader.ReadInt32(); + string message = reader.ReadNullableString(); + string helpKeyword = reader.ReadNullableString(); + string senderName = reader.ReadNullableString(); + DateTime eventTimestamp = reader.ReadDateTime(); + switch (type) { + case EventTypes.Error: + return new BuildErrorEventArgs(reader.ReadNullableString(), reader.ReadNullableString(), reader.ReadNullableString(), + reader.ReadInt32(), reader.ReadInt32(), reader.ReadInt32(), reader.ReadInt32(), + message, helpKeyword, senderName, eventTimestamp); + case EventTypes.Warning: + return new BuildWarningEventArgs(reader.ReadNullableString(), reader.ReadNullableString(), reader.ReadNullableString(), + reader.ReadInt32(), reader.ReadInt32(), reader.ReadInt32(), reader.ReadInt32(), + message, helpKeyword, senderName, eventTimestamp); + case EventTypes.Message: + MessageImportance importance = (MessageImportance)reader.ReadInt32(); + return new BuildMessageEventArgs(message, helpKeyword, senderName, importance, eventTimestamp); + case EventTypes.BuildFinished: + return new BuildFinishedEventArgs(message, helpKeyword, reader.ReadBoolean(), eventTimestamp); + case EventTypes.BuildStarted: + return new BuildStartedEventArgs(message, helpKeyword, eventTimestamp); + case EventTypes.ProjectFinished: + return new ProjectFinishedEventArgs(message, helpKeyword, reader.ReadNullableString(), reader.ReadBoolean(), eventTimestamp); + case EventTypes.ProjectStarted: + return new ProjectStartedEventArgs(message, helpKeyword, reader.ReadNullableString(), reader.ReadNullableString(), + null, null, eventTimestamp); + case EventTypes.TargetFinished: + return new TargetFinishedEventArgs(message, helpKeyword, reader.ReadNullableString(), reader.ReadNullableString(), + reader.ReadNullableString(), reader.ReadBoolean(), eventTimestamp, null); + case EventTypes.TargetStarted: + return new TargetStartedEventArgs(message, helpKeyword, reader.ReadNullableString(), reader.ReadNullableString(), + reader.ReadNullableString(), reader.ReadNullableString(), eventTimestamp); + case EventTypes.TaskFinished: + return new TaskFinishedEventArgs(message, helpKeyword, reader.ReadNullableString(), reader.ReadNullableString(), + reader.ReadNullableString(), reader.ReadBoolean(), eventTimestamp); + case EventTypes.TaskStarted: + return new TaskStartedEventArgs(message, helpKeyword, reader.ReadNullableString(), reader.ReadNullableString(), + reader.ReadNullableString(), eventTimestamp); + default: + return new UnknownBuildEventArgs(message, helpKeyword, senderName, eventTimestamp); + } + } + + sealed class UnknownBuildEventArgs : CustomBuildEventArgs + { + public UnknownBuildEventArgs(string message, string helpKeyword, string senderName, DateTime eventTimestamp) + : base(message, helpKeyword, senderName, eventTimestamp) + { + } + } + #endif + + public void ForwardEvent(BuildEventArgs e) { if (e is BuildStatusEventArgs) { if (e is TaskStartedEventArgs) { diff --git a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/EventTypes.cs b/src/Main/ICSharpCode.SharpDevelop.BuildWorker/EventTypes.cs new file mode 100644 index 0000000000..97e15d75d6 --- /dev/null +++ b/src/Main/ICSharpCode.SharpDevelop.BuildWorker/EventTypes.cs @@ -0,0 +1,32 @@ +// +// +// +// +// $Revision: 5640 $ +// + +using System; +using Microsoft.Build.Framework; + +namespace ICSharpCode.SharpDevelop.BuildWorker +{ + [Flags] + 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 + } +} diff --git a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/ExtendedBinaryReader.cs b/src/Main/ICSharpCode.SharpDevelop.BuildWorker/ExtendedBinaryReader.cs new file mode 100644 index 0000000000..e134777cc3 --- /dev/null +++ b/src/Main/ICSharpCode.SharpDevelop.BuildWorker/ExtendedBinaryReader.cs @@ -0,0 +1,45 @@ +// +// +// +// +// $Revision$ +// + +using System; +using System.IO; + +namespace ICSharpCode.SharpDevelop.BuildWorker +{ + static class BinaryReaderExtensions + { + public static string ReadNullableString(this BinaryReader reader) + { + if (reader.ReadBoolean()) + return reader.ReadString(); + else + return null; + } + + public static void WriteNullableString(this BinaryWriter writer, string s) + { + writer.Write(s != null); + if (s != null) + writer.Write(s); + } + + public static DateTime ReadDateTime(this BinaryReader reader) + { + return new DateTime(reader.ReadInt64()); + } + + public static void WriteDateTime(this BinaryWriter writer, DateTime date) + { + writer.Write(date.Ticks); + } + + public static void WriteInt32(this BinaryWriter writer, int val) + { + writer.Write(val); + } + } +} diff --git a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/HostProcess.cs b/src/Main/ICSharpCode.SharpDevelop.BuildWorker/HostProcess.cs new file mode 100644 index 0000000000..b03dabb669 --- /dev/null +++ b/src/Main/ICSharpCode.SharpDevelop.BuildWorker/HostProcess.cs @@ -0,0 +1,53 @@ +// +// +// +// +// $Revision$ +// + +using System; +using System.Diagnostics; +using System.Globalization; +using System.IO; +using System.IO.Pipes; +using System.Net; +using System.Net.Sockets; +using System.Reflection; +using System.Threading; + +namespace ICSharpCode.SharpDevelop.Interprocess +{ + /// + /// Used in the worker process to refer to the host. + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1001:TypesThatOwnDisposableFieldsShouldBeDisposable")] + sealed class HostProcess + { + readonly AnonymousPipeClientStream hostToWorkerPipe; + readonly AnonymousPipeClientStream workerToHostPipe; + + public HostProcess(string pipe1, string pipe2) + { + hostToWorkerPipe = new AnonymousPipeClientStream(PipeDirection.In, pipe1); + workerToHostPipe = new AnonymousPipeClientStream(PipeDirection.Out, pipe2); + this.Writer = new BinaryWriter(workerToHostPipe); + } + + public BinaryWriter Writer { get; private set; } + + public void Run(Action dataReceived) + { + using (BinaryReader reader = new BinaryReader(hostToWorkerPipe)) { + while (true) { + string command; + try { + command = reader.ReadString(); + } catch (EndOfStreamException) { + break; + } + dataReceived(command, reader); + } + } + } + } +} diff --git a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/ICSharpCode.SharpDevelop.BuildWorker.csproj b/src/Main/ICSharpCode.SharpDevelop.BuildWorker/ICSharpCode.SharpDevelop.BuildWorker.csproj index ba871edb97..7051c58dae 100644 --- a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/ICSharpCode.SharpDevelop.BuildWorker.csproj +++ b/src/Main/ICSharpCode.SharpDevelop.BuildWorker/ICSharpCode.SharpDevelop.BuildWorker.csproj @@ -1,12 +1,13 @@ - + + {C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F} Debug AnyCPU Exe ICSharpCode.SharpDevelop.BuildWorker - ICSharpCode.SharpDevelop.BuildWorker - v3.5 + ICSharpCode.SharpDevelop.BuildWorker40 + v4.0 False False 4 @@ -35,14 +36,14 @@ False - Auto + Off 4194304 x86 4096 - + @@ -58,17 +59,11 @@ - - - - - + + + + - - - - - \ 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/MSBuild40.cs b/src/Main/ICSharpCode.SharpDevelop.BuildWorker/MSBuild40.cs new file mode 100644 index 0000000000..77dab672d6 --- /dev/null +++ b/src/Main/ICSharpCode.SharpDevelop.BuildWorker/MSBuild40.cs @@ -0,0 +1,39 @@ +// +// +// +// +// $Revision$ +// + +using System; +using Microsoft.Build.Execution; +using Microsoft.Build.Framework; + +namespace ICSharpCode.SharpDevelop.BuildWorker +{ + sealed class MSBuildWrapper + { + public void Cancel() + { + BuildManager.DefaultBuildManager.CancelAllSubmissions(); + } + + public MSBuildWrapper() + { + } + + public bool DoBuild(BuildJob job, ILogger logger) + { + BuildParameters parameters = new BuildParameters(); + parameters.MaxNodeCount = 1; + parameters.Loggers = new ILogger[] { logger }; + + Program.Log("Building target '" + job.Target + "' in " + job.ProjectFileName); + string[] targets = job.Target.Split(';'); + BuildRequestData request = new BuildRequestData(job.ProjectFileName, job.Properties, null, targets, null); + + BuildResult result = BuildManager.DefaultBuildManager.Build(parameters, request); + return result.OverallResult == BuildResultCode.Success; + } + } +} diff --git a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/Program.cs b/src/Main/ICSharpCode.SharpDevelop.BuildWorker/Program.cs index 4bc9d0ebc4..817e593223 100644 --- a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/Program.cs +++ b/src/Main/ICSharpCode.SharpDevelop.BuildWorker/Program.cs @@ -15,13 +15,12 @@ using System.IO; using System.Runtime.Serialization; using System.Threading; -using ICSharpCode.SharpDevelop.BuildWorker.Interprocess; -using Microsoft.Build.BuildEngine; +using ICSharpCode.SharpDevelop.Interprocess; using Microsoft.Build.Framework; namespace ICSharpCode.SharpDevelop.BuildWorker { - class Program + sealed class Program { static HostProcess host; BuildJob currentJob; @@ -34,8 +33,8 @@ namespace ICSharpCode.SharpDevelop.BuildWorker if (args.Length == 3 && args[0] == "worker") { try { - host = new HostProcess(new Program()); - host.WorkerProcessMain(args[1], args[2]); + host = new HostProcess(args[1], args[2]); + host.Run(new Program().DataReceived); } catch (Exception ex) { ShowMessageBox(ex.ToString()); } @@ -47,6 +46,22 @@ namespace ICSharpCode.SharpDevelop.BuildWorker } } + readonly MSBuildWrapper buildWrapper = new MSBuildWrapper(); + + void DataReceived(string command, BinaryReader reader) + { + switch (command) { + case "StartBuild": + StartBuild(BuildJob.ReadFrom(reader)); + break; + case "Cancel": + CancelBuild(); + break; + default: + throw new InvalidOperationException("Unknown command"); + } + } + static void AppDomain_CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { ShowMessageBox(e.ExceptionObject.ToString()); @@ -56,18 +71,6 @@ namespace ICSharpCode.SharpDevelop.BuildWorker #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) { @@ -84,7 +87,6 @@ namespace ICSharpCode.SharpDevelop.BuildWorker #endif } - // Called with CallMethodOnWorker [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] public void StartBuild(BuildJob job) { @@ -108,13 +110,14 @@ namespace ICSharpCode.SharpDevelop.BuildWorker thread.Start(); } - // Called with CallMethodOnWorker - //[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - // TODO: make use of CancelBuild public void CancelBuild() { + Program.Log("CancelBuild()"); lock (this) { - requestCancellation = true; + if (!requestCancellation) { + requestCancellation = true; + buildWrapper.Cancel(); + } } } @@ -124,9 +127,10 @@ namespace ICSharpCode.SharpDevelop.BuildWorker Program.Log("In build thread"); bool success = false; try { - success = DoBuild(); + success = buildWrapper.DoBuild(currentJob, new ForwardingLogger(this)); } catch (Exception ex) { - host.CallMethodOnHost("ReportException", ex.ToString()); + host.Writer.Write("ReportException"); + host.Writer.Write(ex.ToString()); } finally { Program.Log("BuildDone"); @@ -139,164 +143,15 @@ namespace ICSharpCode.SharpDevelop.BuildWorker 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); + host.Writer.Write("BuildDone"); + host.Writer.Write(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); - - /* No longer necessary as we stopped using BuildingInsideVisualStudio - // 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); - } - } + host.Writer.Write("ReportEvent"); + EventSource.EncodeEvent(host.Writer, e); } sealed class ForwardingLogger : ILogger @@ -347,8 +202,6 @@ namespace ICSharpCode.SharpDevelop.BuildWorker eventSource.CustomEventRaised += OnEvent; if ((eventMask & EventTypes.Unknown) != 0) eventSource.AnyEventRaised += OnUnknownEventRaised; - if (eventMask != EventTypes.All) - eventSource.AnyEventRaised += OnAnyEvent; #if WORKERDEBUG eventSource.AnyEventRaised += CountEvent; @@ -388,28 +241,15 @@ namespace ICSharpCode.SharpDevelop.BuildWorker 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); } 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 index aa701ee4ae..5c14c1929e 100644 --- a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/app.config +++ b/src/Main/ICSharpCode.SharpDevelop.BuildWorker/app.config @@ -1,14 +1,18 @@ - + - + + + + + - + diff --git a/src/Main/ICSharpCode.SharpDevelop.BuildWorker35/ICSharpCode.SharpDevelop.BuildWorker35.csproj b/src/Main/ICSharpCode.SharpDevelop.BuildWorker35/ICSharpCode.SharpDevelop.BuildWorker35.csproj new file mode 100644 index 0000000000..d9a25b6456 --- /dev/null +++ b/src/Main/ICSharpCode.SharpDevelop.BuildWorker35/ICSharpCode.SharpDevelop.BuildWorker35.csproj @@ -0,0 +1,78 @@ + + + + {B5F54272-49F0-40DB-845A-8D837875D3BA} + Debug + x86 + Exe + ICSharpCode.SharpDevelop.BuildWorker35 + ICSharpCode.SharpDevelop.BuildWorker35 + v3.5 + Properties + ..\..\..\bin\ + False + False + 4 + false + + + x86 + False + Auto + 4194304 + 4096 + + + true + Full + False + True + DEBUG;TRACE;MSBUILD35 + + + false + None + True + False + TRACE;MSBUILD35 + + + + + + + 3.5 + + + + + + + Properties\GlobalAssemblyInfo.cs + + + BuildJob.cs + + + EventSource.cs + + + EventTypes.cs + + + ExtendedBinaryReader.cs + + + HostProcess.cs + + + Program.cs + + + + + + + + + \ No newline at end of file diff --git a/src/Main/ICSharpCode.SharpDevelop.BuildWorker35/MSBuild35.cs b/src/Main/ICSharpCode.SharpDevelop.BuildWorker35/MSBuild35.cs new file mode 100644 index 0000000000..4e503c224d --- /dev/null +++ b/src/Main/ICSharpCode.SharpDevelop.BuildWorker35/MSBuild35.cs @@ -0,0 +1,46 @@ +// +// +// +// +// $Revision$ +// + +using System; +using Microsoft.Build.BuildEngine; +using Microsoft.Build.Framework; + +namespace ICSharpCode.SharpDevelop.BuildWorker +{ + sealed class MSBuildWrapper + { + public void Cancel() + { + } + + readonly Engine engine; + + public MSBuildWrapper() + { + engine = new Engine(ToolsetDefinitionLocations.Registry | ToolsetDefinitionLocations.ConfigurationFile); + } + + public bool DoBuild(BuildJob job, ILogger logger) + { + engine.RegisterLogger(logger); + + Program.Log("Building target '" + job.Target + "' in " + job.ProjectFileName); + string[] targets = job.Target.Split(';'); + + BuildPropertyGroup globalProperties = new BuildPropertyGroup(); + foreach (var pair in job.Properties) { + globalProperties.SetProperty(pair.Key, pair.Value, true); + } + + try { + return engine.BuildProjectFile(job.ProjectFileName, targets, globalProperties); + } finally { + engine.UnregisterAllLoggers(); + } + } + } +} diff --git a/src/Main/ICSharpCode.SharpDevelop.BuildWorker35/Properties/AssemblyInfo.cs b/src/Main/ICSharpCode.SharpDevelop.BuildWorker35/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..2386526775 --- /dev/null +++ b/src/Main/ICSharpCode.SharpDevelop.BuildWorker35/Properties/AssemblyInfo.cs @@ -0,0 +1,17 @@ +// +// +// +// +// $Revision: 5640 $ +// + +using System; +using System.Reflection; +using System.Runtime.CompilerServices; + +[assembly: AssemblyTitle("SharpDevelop Build Worker for .NET 3.5")] +[assembly: AssemblyDescription("Runs MSBuild 3.5")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: CLSCompliant(true)] diff --git a/src/Main/ICSharpCode.SharpDevelop.BuildWorker35/app.config b/src/Main/ICSharpCode.SharpDevelop.BuildWorker35/app.config new file mode 100644 index 0000000000..aa701ee4ae --- /dev/null +++ b/src/Main/ICSharpCode.SharpDevelop.BuildWorker35/app.config @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/Setup/Files.wxs b/src/Setup/Files.wxs index d650a3f163..a8364b5501 100644 --- a/src/Setup/Files.wxs +++ b/src/Setup/Files.wxs @@ -450,6 +450,18 @@ + + + + + + + + + + + + diff --git a/src/Setup/Setup.wxs b/src/Setup/Setup.wxs index 2f93886e6a..23bbba1637 100644 --- a/src/Setup/Setup.wxs +++ b/src/Setup/Setup.wxs @@ -179,6 +179,8 @@ + +