Browse Source

Reimplemented MSBuildEngine.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/dotnet4@4121 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 16 years ago
parent
commit
6008cea9fb
  1. 5
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  2. 15
      src/Main/Base/Project/Src/Project/IProjectItemBackendStore.cs
  3. 12
      src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs
  4. 83
      src/Main/Base/Project/Src/Project/MSBuildEngine/EventSource.cs
  5. 94
      src/Main/Base/Project/Src/Project/MSBuildEngine/MSBuildEngine.cs
  6. 133
      src/Main/Base/Project/Src/Project/MSBuildEngine/ParallelMSBuildManager.cs
  7. 18
      src/Main/Core/Project/Src/Util/CallbackOnDispose.cs
  8. 80
      src/SharpDevelop.sln

5
src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj

@ -192,6 +192,9 @@ @@ -192,6 +192,9 @@
<Compile Include="Src\Project\ContextSpecificProperties.cs" />
<Compile Include="Src\Project\IBuildFeedbackSink.cs" />
<Compile Include="Src\Project\IProjectItemBackendStore.cs" />
<Compile Include="Src\Project\MSBuildEngine\EventSource.cs" />
<Compile Include="Src\Project\MSBuildEngine\MSBuildEngine.cs" />
<Compile Include="Src\Project\MSBuildEngine\ParallelMSBuildManager.cs" />
<Compile Include="Src\Project\MSBuildFileProject.cs" />
<Compile Include="Src\Project\MSBuildItemWrapper.cs" />
<Compile Include="Src\Project\ProjectStartException.cs" />
@ -595,7 +598,6 @@ @@ -595,7 +598,6 @@
<Compile Include="Src\TextEditor\XmlFormattingStrategy.cs" />
<Compile Include="Src\Services\Tasks\TaskEventHandler.cs" />
<Compile Include="Src\TextEditor\Commands\NavigationCommands.cs" />
<Compile Include="Src\Project\MSBuildEngine.cs" />
<Compile Include="Src\Gui\Pads\DefinitionViewPad.cs" />
<Compile Include="Src\Project\MSBuildEnums.cs" />
<Compile Include="Src\Gui\Dialogs\OptionPanels\ProjectOptions\ApplicationSettings.cs">
@ -809,6 +811,7 @@ @@ -809,6 +811,7 @@
<Link>ICSharpCode.SharpDevelop.addin</Link>
</Content>
<Folder Include="Src\Editor" />
<Folder Include="Src\Project\MSBuildEngine" />
<Folder Include="Src\Services\Profiler" />
<Folder Include="Src\Util" />
<Folder Include="Src\Gui\Pads\ClassBrowser\NodeBuilder" />

15
src/Main/Base/Project/Src/Project/IProjectItemBackendStore.cs

@ -1,11 +1,10 @@ @@ -1,11 +1,10 @@
/*
* Created by SharpDevelop.
* User: Daniel
* Date: 22.05.2009
* Time: 22:22
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Daniel Grunwald" email="daniel@danielgrunwald.de"/>
// <version>$Revision$</version>
// </file>
using System;
using System.Collections.Generic;

12
src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs

@ -1003,9 +1003,17 @@ namespace ICSharpCode.SharpDevelop.Project @@ -1003,9 +1003,17 @@ namespace ICSharpCode.SharpDevelop.Project
/// Set compilation properties (MSBuildProperties and AddInTree/AdditionalPropertiesPath).
/// </summary>
internal static void InitializeMSBuildProjectProperties(MSBuild.ProjectCollection collection)
{
Dictionary<string, string> props = new Dictionary<string, string>();
InitializeMSBuildProjectProperties(props);
foreach (var pair in props)
collection.SetGlobalProperty(pair.Key, pair.Value);
}
internal static void InitializeMSBuildProjectProperties(IDictionary<string, string> globalProperties)
{
foreach (KeyValuePair<string, string> entry in MSBuildEngine.MSBuildProperties) {
collection.SetGlobalProperty(entry.Key, entry.Value);
globalProperties[entry.Key] = entry.Value;
}
// re-load these properties from AddInTree every time because "text" might contain
// SharpDevelop properties resolved by the StringParser (e.g. ${property:FxCopPath})
@ -1017,7 +1025,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -1017,7 +1025,7 @@ namespace ICSharpCode.SharpDevelop.Project
string text = item.ToString();
if (!codon.Properties.Get("text", "").Contains("$("))
text = MSBuildInternals.Escape(text);
collection.SetGlobalProperty(codon.Id, text);
globalProperties[codon.Id] = text;
}
}
}

83
src/Main/Base/Project/Src/Project/MSBuildEngine/EventSource.cs

@ -0,0 +1,83 @@ @@ -0,0 +1,83 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Daniel Grunwald" email="daniel@danielgrunwald.de"/>
// <version>$Revision$</version>
// </file>
using Microsoft.Build.Framework;
using System;
namespace ICSharpCode.SharpDevelop.Project
{
/// <summary>
/// IEventSource implementation. Used to forward events to submission-specific loggers.
/// </summary>
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);
}
}
}

94
src/Main/Base/Project/Src/Project/MSBuildEngine.cs → src/Main/Base/Project/Src/Project/MSBuildEngine/MSBuildEngine.cs

@ -5,23 +5,22 @@ @@ -5,23 +5,22 @@
// <version>$Revision$</version>
// </file>
using Microsoft.Build.Execution;
using Microsoft.Build.Construction;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
using System.Threading;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Gui;
using Microsoft.Build.BuildEngine;
using Microsoft.Build.Execution;
using Microsoft.Build.Framework;
using MSBuild = Microsoft.Build.Evaluation;
namespace ICSharpCode.SharpDevelop.Project
{
// let Project refer to the class, not to the namespace
using Project = Microsoft.Build.BuildEngine.Project;
/// <summary>
/// Class responsible for building a project using MSBuild.
/// Is called by MSBuildProject.
@ -154,15 +153,59 @@ namespace ICSharpCode.SharpDevelop.Project @@ -154,15 +153,59 @@ namespace ICSharpCode.SharpDevelop.Project
void StartBuild()
{
feedbackSink.ReportError(new BuildError { ErrorText = "Compiling is not yet implemented" });
feedbackSink.Done(false);
// perform initialization of the build in parallel
ThreadPool.QueueUserWorkItem(RunBuild);
}
void RunBuild(object state)
{
var projectCollection = new MSBuild.ProjectCollection();
MSBuildBasedProject.InitializeMSBuildProjectProperties(projectCollection);
Solution solution = project.ParentSolution;
projectCollection.SetGlobalProperty("SolutionDir", EnsureBackslash(solution.Directory));
projectCollection.SetGlobalProperty("SolutionExt", ".sln");
projectCollection.SetGlobalProperty("SolutionFileName", Path.GetFileName(solution.FileName));
projectCollection.SetGlobalProperty("SolutionPath", solution.FileName);
foreach (var pair in options.Properties) {
projectCollection.SetGlobalProperty(pair.Key, pair.Value);
}
projectCollection.SetGlobalProperty("Configuration", options.Configuration);
if (options.Platform == "Any CPU")
projectCollection.SetGlobalProperty("Platform", "AnyCPU");
else
projectCollection.SetGlobalProperty("Platform", options.Platform);
InterestingTasks.AddRange(MSBuildEngine.CompileTaskNames);
var projectFile = ProjectRootElement.Open(project.FileName, projectCollection);
foreach (string import in additionalTargetFiles)
projectFile.AddImport(import);
string toolsVersion = projectFile.ToolsVersion;
if (string.IsNullOrEmpty(toolsVersion))
toolsVersion = projectCollection.DefaultToolsVersion;
var evalProject = new MSBuild.Project(projectFile, null, toolsVersion, projectCollection);
var projectInstance = evalProject.CreateProjectInstance();
string[] targets = { options.Target.TargetName };
BuildRequestData requestData = new BuildRequestData(projectInstance, targets, new HostServices());
ParallelMSBuildManager.StartBuild(requestData, new SharpDevelopLogger(this), 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);
InterestingTasks.AddRange(MSBuildEngine.CompileTaskNames);
foreach (IMSBuildAdditionalLogger loggerProvider in MSBuildEngine.AdditionalMSBuildLoggers) {
settings.Logger.Add(loggerProvider.CreateLogger(this));
}
@ -195,26 +238,6 @@ namespace ICSharpCode.SharpDevelop.Project @@ -195,26 +238,6 @@ namespace ICSharpCode.SharpDevelop.Project
job.AdditionalImports.AddRange(additionalTargetFiles);
BuildPropertyGroup pg = new BuildPropertyGroup();
MSBuildBasedProject.InitializeMSBuildProjectProperties(pg);
foreach (BuildProperty p in pg) {
job.Properties[p.Name] = p.FinalValue;
}
Solution solution = project.ParentSolution;
job.Properties["SolutionDir"] = EnsureBackslash(solution.Directory);
job.Properties["SolutionExt"] = ".sln";
job.Properties["SolutionFileName"] = Path.GetFileName(solution.FileName);
job.Properties["SolutionPath"] = solution.FileName;
foreach (var pair in options.Properties) {
job.Properties[pair.Key] = pair.Value;
}
job.Properties["Configuration"] = options.Configuration;
if (options.Platform == "Any CPU")
job.Properties["Platform"] = "AnyCPU";
else
job.Properties["Platform"] = options.Platform;
job.Target = options.Target.TargetName;
bool buildInProcess = false;
@ -253,9 +276,6 @@ namespace ICSharpCode.SharpDevelop.Project @@ -253,9 +276,6 @@ namespace ICSharpCode.SharpDevelop.Project
WorkerManager.StartBuild(job, settings);
}*/
}
static int isBuildingInProcess = 0;
static string EnsureBackslash(string path)
{
@ -301,7 +321,6 @@ namespace ICSharpCode.SharpDevelop.Project @@ -301,7 +321,6 @@ namespace ICSharpCode.SharpDevelop.Project
feedbackSink.ReportError(error);
}
/*
class SharpDevelopLogger : ILogger
{
MSBuildEngine worker;
@ -394,11 +413,8 @@ namespace ICSharpCode.SharpDevelop.Project @@ -394,11 +413,8 @@ namespace ICSharpCode.SharpDevelop.Project
public LoggerVerbosity Verbosity { get; set; }
public string Parameters { get; set; }
IEventSource eventSource;
public void Initialize(IEventSource eventSource)
{
this.eventSource = eventSource;
eventSource.ProjectStarted += OnProjectStarted;
eventSource.ProjectFinished += OnProjectFinished;
eventSource.TaskStarted += OnTaskStarted;
@ -410,16 +426,8 @@ namespace ICSharpCode.SharpDevelop.Project @@ -410,16 +426,8 @@ namespace ICSharpCode.SharpDevelop.Project
public void Shutdown()
{
eventSource.ProjectStarted -= OnProjectStarted;
eventSource.ProjectFinished -= OnProjectFinished;
eventSource.TaskStarted -= OnTaskStarted;
eventSource.TaskFinished -= OnTaskFinished;
eventSource.ErrorRaised -= OnError;
eventSource.WarningRaised -= OnWarning;
}
#endregion
}
*/
}
}

133
src/Main/Base/Project/Src/Project/MSBuildEngine/ParallelMSBuildManager.cs

@ -0,0 +1,133 @@ @@ -0,0 +1,133 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Daniel Grunwald" email="daniel@danielgrunwald.de"/>
// <version>$Revision$</version>
// </file>
using ICSharpCode.Core;
using System;
using System.Collections.Generic;
using Microsoft.Build.Execution;
using Microsoft.Build.Framework;
namespace ICSharpCode.SharpDevelop.Project
{
/// <summary>
/// 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
/// </summary>
public static class ParallelMSBuildManager
{
#region Manage StartBuild/EndBuild of BuildManager.DefaultBuildManager
static readonly object enableDisableLock = new object();
static int enableCount;
static void EnableBuildEngine()
{
lock (enableDisableLock) {
if (enableCount == 0) {
BuildParameters parameters = new BuildParameters();
parameters.Loggers = new ILogger[] { new CentralLogger() };
BuildManager.DefaultBuildManager.BeginBuild(parameters);
}
enableCount++;
}
}
static void DisableBuildEngine()
{
lock (enableDisableLock) {
enableCount--;
if (enableCount == 0) {
BuildManager.DefaultBuildManager.EndBuild();
BuildManager.DefaultBuildManager.ResetCaches();
}
}
}
#endregion
static readonly Dictionary<int, EventSource> submissionEventSourceMapping = new Dictionary<int, EventSource>();
/// <summary>
/// Starts building.
/// </summary>
/// <param name="requestData">The requested build.</param>
/// <param name="logger">The logger that received build output.</param>
/// <param name="callback">Callback that is run when the build is complete</param>
/// <returns>The build submission that was started.</returns>
public static BuildSubmission StartBuild(BuildRequestData requestData, ILogger logger, BuildSubmissionCompleteCallback callback)
{
EnableBuildEngine();
try {
BuildSubmission submission = BuildManager.DefaultBuildManager.PendBuildRequest(requestData);
EventSource eventSource = new EventSource();
if (logger != null)
logger.Initialize(eventSource);
lock (submissionEventSourceMapping) {
submissionEventSourceMapping.Add(submission.SubmissionId, eventSource);
}
// TODO: when will the logger be shut down?
submission.ExecuteAsync(OnComplete, callback);
return submission;
} catch (Exception ex) {
LoggingService.Warn("Got exception starting build (exception will be rethrown)", ex);
DisableBuildEngine();
throw;
}
}
static void OnComplete(BuildSubmission submission)
{
DisableBuildEngine();
lock (submissionEventSourceMapping) {
submissionEventSourceMapping.Remove(submission.SubmissionId);
}
BuildSubmissionCompleteCallback callback = submission.AsyncContext as BuildSubmissionCompleteCallback;
if (callback != null)
callback(submission);
}
sealed class CentralLogger : INodeLogger, IEventRedirector
{
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)
{
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());
}
}
IEventRedirector redirector;
lock (submissionEventSourceMapping) {
redirector = submissionEventSourceMapping[e.BuildEventContext.SubmissionId];
}
redirector.ForwardEvent(e);
}
}
}
}

18
src/Main/Core/Project/Src/Util/CallbackOnDispose.cs

@ -6,14 +6,15 @@ @@ -6,14 +6,15 @@
// </file>
using System;
using System.Diagnostics;
using System.Threading;
namespace ICSharpCode.Core
{
/// <summary>
/// Invokes a callback when this class is dispsed.
/// Invokes a callback when this class is disposed.
/// </summary>
sealed class CallbackOnDispose : IDisposable
public sealed class CallbackOnDispose : IDisposable
{
// TODO: in 4.0, use System.Action and make this class public
System.Threading.ThreadStart callback;
@ -28,8 +29,19 @@ namespace ICSharpCode.Core @@ -28,8 +29,19 @@ namespace ICSharpCode.Core
public void Dispose()
{
System.Threading.ThreadStart action = Interlocked.Exchange(ref callback, null);
if (action != null)
if (action != null) {
action();
#if DEBUG
GC.SuppressFinalize(this);
#endif
}
}
#if DEBUG
~CallbackOnDispose()
{
Debug.Fail("CallbackOnDispose was finalized without being disposed.");
}
#endif
}
}

80
src/SharpDevelop.sln

@ -1,64 +1,64 @@ @@ -1,64 +1,64 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 10
# SharpDevelop 4.0.0.4108
# SharpDevelop 4.0.0.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AddIns", "AddIns", "{14A277EE-7DF1-4529-B639-7D1EF334C1C5}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AvalonEdit.AddIn", "AddIns\DisplayBindings\AvalonEdit.AddIn\AvalonEdit.AddIn.csproj", "{0162E499-42D0-409B-AA25-EED21F75336B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpBinding", "AddIns\BackendBindings\CSharpBinding\Project\CSharpBinding.csproj", "{1F1AC7CD-D154-45BB-8EAF-804CA8055F5A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartPage", "AddIns\Misc\StartPage\Project\StartPage.csproj", "{7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReflectorAddIn", "AddIns\Misc\ReflectorAddIn\ReflectorAddIn\Project\ReflectorAddIn.csproj", "{8AA421C8-D7AF-4957-9F43-5135328ACB24}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Debugger", "Debugger", "{6604365C-C702-4C10-9BA8-637F1E3D4D0D}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.Core", "AddIns\Misc\Debugger\Debugger.Core\Project\Debugger.Core.csproj", "{1D18D788-F7EE-4585-A23B-34DC8EC63CB8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.AddIn", "AddIns\Misc\Debugger\Debugger.AddIn\Project\Debugger.AddIn.csproj", "{EC06F96A-AEEC-49D6-B03D-AB87C6EB674C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.Core", "AddIns\Misc\Debugger\Debugger.Core\Project\Debugger.Core.csproj", "{1D18D788-F7EE-4585-A23B-34DC8EC63CB8}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartPage", "AddIns\Misc\StartPage\Project\StartPage.csproj", "{7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReflectorAddIn", "AddIns\Misc\ReflectorAddIn\ReflectorAddIn\Project\ReflectorAddIn.csproj", "{8AA421C8-D7AF-4957-9F43-5135328ACB24}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpBinding", "AddIns\BackendBindings\CSharpBinding\Project\CSharpBinding.csproj", "{1F1AC7CD-D154-45BB-8EAF-804CA8055F5A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AvalonEdit.AddIn", "AddIns\DisplayBindings\AvalonEdit.AddIn\AvalonEdit.AddIn.csproj", "{0162E499-42D0-409B-AA25-EED21F75336B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{9421EDF4-9769-4BE9-B5A6-C87DE221D73C}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TreeView", "Libraries\SharpTreeView\ICSharpCode.TreeView\ICSharpCode.TreeView.csproj", "{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aga.Controls", "Libraries\TreeViewAdv\Aga.Controls\Aga.Controls.csproj", "{E73BB233-D88B-44A7-A98F-D71EE158381D}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.AvalonEdit", "Libraries\AvalonEdit\ICSharpCode.AvalonEdit\ICSharpCode.AvalonEdit.csproj", "{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Build.Tasks", "Libraries\ICSharpCode.Build.Tasks\Project\ICSharpCode.Build.Tasks.csproj", "{4139CCF6-FB49-4A9D-B2CF-331E9EA3198D}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactory", "Libraries\NRefactory\Project\NRefactory.csproj", "{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TextEditor", "Libraries\ICSharpCode.TextEditor\Project\ICSharpCode.TextEditor.csproj", "{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NRefactory", "Libraries\NRefactory\Project\NRefactory.csproj", "{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Build.Tasks", "Libraries\ICSharpCode.Build.Tasks\Project\ICSharpCode.Build.Tasks.csproj", "{4139CCF6-FB49-4A9D-B2CF-331E9EA3198D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.AvalonEdit", "Libraries\AvalonEdit\ICSharpCode.AvalonEdit\ICSharpCode.AvalonEdit.csproj", "{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aga.Controls", "Libraries\TreeViewAdv\Aga.Controls\Aga.Controls.csproj", "{E73BB233-D88B-44A7-A98F-D71EE158381D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TreeView", "Libraries\SharpTreeView\ICSharpCode.TreeView\ICSharpCode.TreeView.csproj", "{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Main", "Main", "{5A3EBEBA-0560-41C1-966B-23F7D03A5486}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.WinForms", "Main\ICSharpCode.Core.WinForms\ICSharpCode.Core.WinForms.csproj", "{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.Presentation", "Main\ICSharpCode.Core.Presentation\ICSharpCode.Core.Presentation.csproj", "{7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Dom", "Main\ICSharpCode.SharpDevelop.Dom\Project\ICSharpCode.SharpDevelop.Dom.csproj", "{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}"
Project("{00000000-0000-0000-0000-000000000000}") = "Tools", "Tools\Tools.build", "B13EFF7F-7EA4-4B68-A375-D112105E9182"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Widgets", "Main\ICSharpCode.SharpDevelop.Widgets\Project\ICSharpCode.SharpDevelop.Widgets.csproj", "{8035765F-D51F-4A0C-A746-2FD100E19419}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartUp", "Main\StartUp\Project\StartUp.csproj", "{1152B71B-3C05-4598-B20D-823B5D40559E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Sda", "Main\ICSharpCode.SharpDevelop.Sda\ICSharpCode.SharpDevelop.Sda.csproj", "{80318B5F-A25D-45AB-8A95-EF31D2370A4C}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core", "Main\Core\Project\ICSharpCode.Core.csproj", "{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop", "Main\Base\Project\ICSharpCode.SharpDevelop.csproj", "{2748AD25-9C63-4E12-877B-4DCE96FBED54}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core", "Main\Core\Project\ICSharpCode.Core.csproj", "{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Sda", "Main\ICSharpCode.SharpDevelop.Sda\ICSharpCode.SharpDevelop.Sda.csproj", "{80318B5F-A25D-45AB-8A95-EF31D2370A4C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartUp", "Main\StartUp\Project\StartUp.csproj", "{1152B71B-3C05-4598-B20D-823B5D40559E}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Widgets", "Main\ICSharpCode.SharpDevelop.Widgets\Project\ICSharpCode.SharpDevelop.Widgets.csproj", "{8035765F-D51F-4A0C-A746-2FD100E19419}"
EndProject
Project("{00000000-0000-0000-0000-000000000000}") = "Tools", "Tools\Tools.build", "B13EFF7F-7EA4-4B68-A375-D112105E9182"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Dom", "Main\ICSharpCode.SharpDevelop.Dom\Project\ICSharpCode.SharpDevelop.Dom.csproj", "{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.Presentation", "Main\ICSharpCode.Core.Presentation\ICSharpCode.Core.Presentation.csproj", "{7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.WinForms", "Main\ICSharpCode.Core.WinForms\ICSharpCode.Core.WinForms.csproj", "{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -152,27 +152,27 @@ Global @@ -152,27 +152,27 @@ Global
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|Any CPU.ActiveCfg = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{8AA421C8-D7AF-4957-9F43-5135328ACB24} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{6604365C-C702-4C10-9BA8-637F1E3D4D0D} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{1F1AC7CD-D154-45BB-8EAF-804CA8055F5A} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{0162E499-42D0-409B-AA25-EED21F75336B} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{1D18D788-F7EE-4585-A23B-34DC8EC63CB8} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D}
{1F1AC7CD-D154-45BB-8EAF-804CA8055F5A} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{6604365C-C702-4C10-9BA8-637F1E3D4D0D} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{8AA421C8-D7AF-4957-9F43-5135328ACB24} = {14A277EE-7DF1-4529-B639-7D1EF334C1C5}
{EC06F96A-AEEC-49D6-B03D-AB87C6EB674C} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D}
{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{4139CCF6-FB49-4A9D-B2CF-331E9EA3198D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{E73BB233-D88B-44A7-A98F-D71EE158381D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{1D18D788-F7EE-4585-A23B-34DC8EC63CB8} = {6604365C-C702-4C10-9BA8-637F1E3D4D0D}
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{7E4A7172-7FF5-48D0-B719-7CD959DD1AC9} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
B13EFF7F-7EA4-4B68-A375-D112105E9182 = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{1152B71B-3C05-4598-B20D-823B5D40559E} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{2748AD25-9C63-4E12-877B-4DCE96FBED54} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{80318B5F-A25D-45AB-8A95-EF31D2370A4C} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{8035765F-D51F-4A0C-A746-2FD100E19419} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{924EE450-603D-49C1-A8E5-4AFAA31CE6F3} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{E73BB233-D88B-44A7-A98F-D71EE158381D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{4139CCF6-FB49-4A9D-B2CF-331E9EA3198D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{2D18BE89-D210-49EB-A9DD-2246FBB3DF6D} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1} = {9421EDF4-9769-4BE9-B5A6-C87DE221D73C}
{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{924EE450-603D-49C1-A8E5-4AFAA31CE6F3} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{8035765F-D51F-4A0C-A746-2FD100E19419} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{80318B5F-A25D-45AB-8A95-EF31D2370A4C} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{2748AD25-9C63-4E12-877B-4DCE96FBED54} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{1152B71B-3C05-4598-B20D-823B5D40559E} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
B13EFF7F-7EA4-4B68-A375-D112105E9182 = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
{7E4A7172-7FF5-48D0-B719-7CD959DD1AC9} = {5A3EBEBA-0560-41C1-966B-23F7D03A5486}
EndGlobalSection
EndGlobal

Loading…
Cancel
Save