Browse Source

Add option to print MSBuild diagnostic output to SharpDevelop output pad.

Fixed bug that caused MSBuild to compile one project several times (possibly even in parallel, thus failing the build).

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@5642 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
pull/1/head
Daniel Grunwald 16 years ago
parent
commit
2b25a92886
  1. 2
      AddIns/ICSharpCode.SharpDevelop.addin
  2. 2
      src/AddIns/Misc/CodeAnalysis/Src/FxCopLogger.cs
  3. 9
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  4. 101
      src/Main/Base/Project/Resources/ProjectAndSolutionOptionsPanel.xfrm
  5. 47
      src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/IDEOptions/ProjectAndSolutionOptions.xaml
  6. 96
      src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/IDEOptions/ProjectAndSolutionOptions.xaml.cs
  7. 81
      src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/IDEOptions/ProjectAndSolutionOptionsPanel.cs
  8. 1
      src/Main/Base/Project/Src/Project/AbstractProject.cs
  9. 15
      src/Main/Base/Project/Src/Project/BuildEngine.cs
  10. 27
      src/Main/Base/Project/Src/Project/BuildOptions.cs
  11. 57
      src/Main/Base/Project/Src/Project/MSBuildEngine/BuildLogFileLogger.cs
  12. 25
      src/Main/Base/Project/Src/Project/MSBuildEngine/MSBuildEngine.cs
  13. 53
      src/Main/Base/Project/Src/Project/MSBuildEngine/SDConsoleLogger.cs
  14. 4
      src/Main/ICSharpCode.Core.Presentation/themes/generic.xaml

2
AddIns/ICSharpCode.SharpDevelop.addin

@ -1046,7 +1046,7 @@ @@ -1046,7 +1046,7 @@
class = "ICSharpCode.SharpDevelop.Gui.OptionPanels.OutputWindowOptionsPanel"/>
<OptionPanel id = "ProjectAndSolutionOptions"
label = "${res:Dialog.Options.IDEOptions.ProjectAndSolutionOptions.PanelName}"
class = "ICSharpCode.SharpDevelop.Gui.OptionPanels.ProjectAndSolutionOptionsPanel"/>
class = "ICSharpCode.SharpDevelop.Gui.OptionPanels.ProjectAndSolutionOptions"/>
</OptionPanel>
<OptionPanel id = "CodingOptions"
label = "${res:Dialog.Options.IDEOptions.CodingOptionsText}">

2
src/AddIns/Misc/CodeAnalysis/Src/FxCopLogger.cs

@ -44,7 +44,7 @@ namespace ICSharpCode.CodeAnalysis @@ -44,7 +44,7 @@ namespace ICSharpCode.CodeAnalysis
public void Initialize(IEventSource eventSource)
{
this.eventSource = eventSource;
engineWorker.OutputText("${res:ICSharpCode.CodeAnalysis.RunningFxCopOn} " + Path.GetFileNameWithoutExtension(engineWorker.CurrentProjectFile));
engineWorker.OutputText(StringParser.Parse("${res:ICSharpCode.CodeAnalysis.RunningFxCopOn} " + Path.GetFileNameWithoutExtension(engineWorker.CurrentProjectFile)));
eventSource.ErrorRaised += OnError;
eventSource.WarningRaised += OnWarning;
}

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

@ -202,6 +202,10 @@ @@ -202,6 +202,10 @@
<DependentUpon>LoadSaveOptions.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="Src\Gui\Dialogs\OptionPanels\IDEOptions\ProjectAndSolutionOptions.xaml.cs">
<DependentUpon>ProjectAndSolutionOptions.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="Src\Gui\Dialogs\OptionPanels\IDEOptions\SelectCulturePanel.xaml.cs">
<DependentUpon>SelectCulturePanel.xaml</DependentUpon>
<SubType>Code</SubType>
@ -256,7 +260,7 @@ @@ -256,7 +260,7 @@
<Compile Include="Src\Project\Converter\UpgradeViewContent.cs" />
<Compile Include="Src\Project\IBuildFeedbackSink.cs" />
<Compile Include="Src\Project\IProjectItemBackendStore.cs" />
<Compile Include="Src\Project\MSBuildEngine\BuildLogFileLogger.cs" />
<Compile Include="Src\Project\MSBuildEngine\SDConsoleLogger.cs" />
<Compile Include="Src\Project\MSBuildEngine\BuildWorkerManager.cs" />
<Compile Include="Src\Project\MSBuildEngine\MSBuildEngine.cs" />
<Compile Include="Src\Project\MSBuildEngine\WorkerProcess.cs" />
@ -690,8 +694,6 @@ @@ -690,8 +694,6 @@
<Compile Include="..\..\GlobalAssemblyInfo.cs">
<Link>Configuration\GlobalAssemblyInfo.cs</Link>
</Compile>
<Compile Include="Src\Gui\Dialogs\OptionPanels\IDEOptions\ProjectAndSolutionOptionsPanel.cs" />
<EmbeddedResource Include="Resources\ProjectAndSolutionOptionsPanel.xfrm" />
<Compile Include="Src\Gui\Pads\ClassBrowser\Nodes\AbstractProjectNode.cs" />
<Compile Include="Src\Gui\Pads\ClassBrowser\NodeBuilder\ClassNodeBuilders.cs" />
<Compile Include="Src\Gui\Pads\ClassBrowser\NodeBuilder\DefaultClassNodeBuilder.cs" />
@ -826,6 +828,7 @@ @@ -826,6 +828,7 @@
<DependentUpon>GotoDialog.cs</DependentUpon>
</Page>
<Page Include="Src\Gui\Dialogs\OptionPanels\IDEOptions\LoadSaveOptions.xaml" />
<Page Include="Src\Gui\Dialogs\OptionPanels\IDEOptions\ProjectAndSolutionOptions.xaml" />
<Page Include="Src\Gui\Dialogs\OptionPanels\IDEOptions\SelectCulturePanel.xaml" />
<Page Include="Src\Gui\Dialogs\TabbedOptionsDialog.xaml" />
<Page Include="Src\Gui\Dialogs\TreeViewOptionsDialog.xaml" />

101
src/Main/Base/Project/Resources/ProjectAndSolutionOptionsPanel.xfrm

@ -1,101 +0,0 @@ @@ -1,101 +0,0 @@
<Components version="1.0">
<System.Windows.Forms.UserControl>
<Name value="ProjectAndSolutionOptionsPanel" />
<ClientSize value="{Width=352, Height=324}" />
<Controls>
<System.Windows.Forms.GroupBox>
<Name value="CreatedObject2" />
<Location value="8, 8" />
<Text value="${res:Dialog.Options.IDEOptions.ProjectAndSolutionOptions.SettingsGroupBox}" />
<Size value="336, 104" />
<Anchor value="Top, Left, Right" />
<TabIndex value="0" />
<Controls>
<System.Windows.Forms.Button>
<Name value="selectProjectLocationButton" />
<Location value="294, 32" />
<Text value="..." />
<Size value="32, 21" />
<Anchor value="Top, Right" />
<TabIndex value="6" />
</System.Windows.Forms.Button>
<System.Windows.Forms.TextBox>
<Name value="projectLocationTextBox" />
<TabIndex value="1" />
<Location value="8, 32" />
<Anchor value="Top, Left, Right" />
<Size value="280, 20" />
</System.Windows.Forms.TextBox>
<System.Windows.Forms.Label>
<Name value="label" />
<Location value="8, 16" />
<Text value="${res:Dialog.Options.IDEOptions.ProjectAndSolutionOptions.ProjectLocationLabel}" />
<Size value="320, 16" />
<TextAlign value="BottomLeft" />
<Anchor value="Top, Left, Right" />
<TabIndex value="0" />
</System.Windows.Forms.Label>
<System.Windows.Forms.CheckBox>
<Name value="loadPrevProjectCheckBox" />
<Location value="8, 56" />
<Text value="${res:Dialog.Options.IDEOptions.ProjectAndSolutionOptions.LoadPrevProjectCheckBox}" />
<TabIndex value="8" />
<Size value="320, 32" />
<Anchor value="Top, Left, Right" />
</System.Windows.Forms.CheckBox>
</Controls>
</System.Windows.Forms.GroupBox>
<System.Windows.Forms.GroupBox>
<Name value="CreatedObject27" />
<Location value="8, 128" />
<Text value="${res:Dialog.Options.IDEOptions.ProjectAndSolutionOptions.BuildAndRunGroupBox}" />
<Size value="336, 145" />
<Anchor value="Top, Bottom, Left, Right" />
<TabIndex value="1" />
<Controls>
<System.Windows.Forms.ComboBox>
<Name value="onExecuteComboBox" />
<TabIndex value="15" />
<Location value="115, 92" />
<Anchor value="Top, Left, Right" />
<Size value="211, 21" />
<FormattingEnabled value="True" />
<DropDownStyle value="DropDownList" />
</System.Windows.Forms.ComboBox>
<System.Windows.Forms.Label>
<Name value="label2" />
<Location value="9, 95" />
<Text value="${res:Dialog.Options.IDEOptions.ProjectAndSolutionOptions.WhenRunning}" />
<Size value="100, 23" />
<TabIndex value="14" />
</System.Windows.Forms.Label>
<System.Windows.Forms.NumericUpDown>
<Name value="parallelBuildNumericUpDown" />
<Value value="1" />
<TabIndex value="13" />
<Minimum value="1" />
<Location value="227, 66" />
<Maximum value="16" />
<Size value="49, 20" />
</System.Windows.Forms.NumericUpDown>
<System.Windows.Forms.Label>
<Name value="label1" />
<Location value="9, 68" />
<Text value="${res:Dialog.Options.IDEOptions.ProjectAndSolutionOptions.ParallelBuild}" />
<Size value="212, 23" />
<TextAlign value="TopRight" />
<TabIndex value="12" />
</System.Windows.Forms.Label>
<System.Windows.Forms.CheckBox>
<Name value="showErrorListCheckBox" />
<Location value="8, 28" />
<Text value="${res:Dialog.Options.IDEOptions.ProjectAndSolutionOptions.ShowErrorListPadCheckBox}" />
<TabIndex value="10" />
<Size value="320, 32" />
<Anchor value="Top, Left, Right" />
</System.Windows.Forms.CheckBox>
</Controls>
</System.Windows.Forms.GroupBox>
</Controls>
</System.Windows.Forms.UserControl>
</Components>

47
src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/IDEOptions/ProjectAndSolutionOptions.xaml

@ -0,0 +1,47 @@ @@ -0,0 +1,47 @@
<gui:OptionPanel x:Class="ICSharpCode.SharpDevelop.Gui.OptionPanels.ProjectAndSolutionOptions"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:core="http://icsharpcode.net/sharpdevelop/core"
xmlns:sd="clr-namespace:ICSharpCode.SharpDevelop"
xmlns:gui="clr-namespace:ICSharpCode.SharpDevelop.Gui"
xmlns:project="clr-namespace:ICSharpCode.SharpDevelop.Project"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ICSharpCode.SharpDevelop.Gui.OptionPanels">
<StackPanel>
<GroupBox Header="{core:Localize Dialog.Options.IDEOptions.ProjectAndSolutionOptions.SettingsGroupBox}">
<StackPanel>
<Label Content="{core:Localize Dialog.Options.IDEOptions.ProjectAndSolutionOptions.ProjectLocationLabel}"
Target="{Binding ElementName=defaultProjectLocationTextBox}" />
<DockPanel>
<Button Content="..." Click="defaultProjectLocationButtonClick" DockPanel.Dock="Right" />
<TextBox Name="defaultProjectLocationTextBox" />
</DockPanel>
<CheckBox Content="{core:Localize Dialog.Options.IDEOptions.ProjectAndSolutionOptions.LoadPrevProjectCheckBox}"
IsChecked="{core:OptionBinding local:ProjectAndSolutionOptions.LoadPrevProjectAtStartup}" />
</StackPanel>
</GroupBox>
<GroupBox Header="{core:Localize Dialog.Options.IDEOptions.ProjectAndSolutionOptions.BuildAndRunGroupBox}">
<StackPanel>
<CheckBox Content="{core:Localize Dialog.Options.IDEOptions.ProjectAndSolutionOptions.ShowErrorListPadCheckBox}"
IsChecked="{core:OptionBinding project:BuildOptions.ShowErrorListAfterBuild}" />
<StackPanel Orientation="Horizontal">
<Label
Content="{core:Localize Dialog.Options.IDEOptions.ProjectAndSolutionOptions.ParallelBuild}"
Target="{Binding ElementName=parallelBuildCount}" />
<core:NumericUpDown Minimum="1" Maximum="16" Name="parallelBuildCount" Width="45" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<Label
Content="Build Verbosity:"
Target="{Binding ElementName=verbosityComboBox}" />
<ComboBox Name="verbosityComboBox" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<Label
Content="{core:Localize Dialog.Options.IDEOptions.ProjectAndSolutionOptions.WhenRunning}"
Target="{Binding ElementName=onExecuteComboBox}" />
<ComboBox Name="onExecuteComboBox" />
</StackPanel>
</StackPanel>
</GroupBox>
</StackPanel>
</gui:OptionPanel>

96
src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/IDEOptions/ProjectAndSolutionOptions.xaml.cs

@ -0,0 +1,96 @@ @@ -0,0 +1,96 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <author name="Daniel Grunwald"/>
// <version>$Revision$</version>
// </file>
using System;
using System.ComponentModel;
using System.IO;
using System.Windows;
using System.Windows.Controls;
using ICSharpCode.Core;
namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
{
public partial class ProjectAndSolutionOptions : OptionPanel
{
public ProjectAndSolutionOptions()
{
InitializeComponent();
FillComboBoxWithEnumValues(typeof(Project.BuildOnExecuteSetting), onExecuteComboBox);
FillComboBoxWithEnumValues(typeof(Project.BuildOutputVerbosity), verbosityComboBox);
}
void FillComboBoxWithEnumValues(Type type, ComboBox comboBox)
{
foreach (Project.BuildOnExecuteSetting element in Enum.GetValues(type)) {
object[] attr = type.GetField(Enum.GetName(type, element)).GetCustomAttributes(typeof(DescriptionAttribute), false);
string description;
if (attr.Length > 0) {
description = StringParser.Parse((attr[0] as DescriptionAttribute).Description);
} else {
description = Enum.GetName(type, element);
}
comboBox.Items.Add(description);
}
}
void defaultProjectLocationButtonClick(object sender, RoutedEventArgs e)
{
using (var fdiag = FileService.CreateFolderBrowserDialog("${res:Dialog.Options.IDEOptions.ProjectAndSolutionOptions.SelectDefaultProjectLocationDialog.Title}", defaultProjectLocationTextBox.Text)) {
if (fdiag.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
defaultProjectLocationTextBox.Text = fdiag.SelectedPath;
}
}
}
public override void LoadOptions()
{
base.LoadOptions();
defaultProjectLocationTextBox.Text = DefaultProjectCreationPath;
parallelBuildCount.Value = Project.BuildOptions.DefaultParallelProjectCount;
onExecuteComboBox.SelectedIndex = (int)Project.BuildModifiedProjectsOnlyService.Setting;
verbosityComboBox.SelectedIndex = (int)Project.BuildOptions.DefaultBuildOutputVerbosity;
}
public override bool SaveOptions()
{
// check for correct settings
string projectPath = defaultProjectLocationTextBox.Text;
if (projectPath.Length > 0) {
if (!FileUtility.IsValidPath(projectPath)) {
MessageService.ShowError(StringParser.Parse("${res:Dialog.Options.IDEOptions.ProjectAndSolutionOptions.InvalidProjectPathSpecified}"));
return false;
}
}
Project.BuildOptions.DefaultParallelProjectCount = (int)parallelBuildCount.Value;
Project.BuildModifiedProjectsOnlyService.Setting = (Project.BuildOnExecuteSetting)onExecuteComboBox.SelectedIndex;
Project.BuildOptions.DefaultBuildOutputVerbosity = (Project.BuildOutputVerbosity)verbosityComboBox.SelectedIndex;
return base.SaveOptions();
}
public static string DefaultProjectCreationPath {
get {
return PropertyService.Get("ICSharpCode.SharpDevelop.Gui.Dialogs.NewProjectDialog.DefaultPath",
Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal),
"SharpDevelop Projects"));
}
set {
PropertyService.Set("ICSharpCode.SharpDevelop.Gui.Dialogs.NewProjectDialog.DefaultPath", value);
}
}
public static bool LoadPrevProjectAtStartup {
get {
return PropertyService.Get("SharpDevelop.LoadPrevProjectOnStartup", false);
}
set {
PropertyService.Set("SharpDevelop.LoadPrevProjectOnStartup", value);
}
}
}
}

81
src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/IDEOptions/ProjectAndSolutionOptionsPanel.cs

@ -1,81 +0,0 @@ @@ -1,81 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using System;
using System.ComponentModel;
using System.IO;
using System.Windows.Forms;
using ICSharpCode.Core;
namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
{
public class ProjectAndSolutionOptionsPanel : XmlFormsOptionPanel
{
public override void LoadPanelContents()
{
SetupFromXmlStream(this.GetType().Assembly.GetManifestResourceStream("Resources.ProjectAndSolutionOptionsPanel.xfrm"));
// read properties
ControlDictionary["projectLocationTextBox"].Text = PropertyService.Get("ICSharpCode.SharpDevelop.Gui.Dialogs.NewProjectDialog.DefaultPath",
Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal),
"SharpDevelop Projects")).ToString();
((CheckBox)ControlDictionary["loadPrevProjectCheckBox"]).Checked = PropertyService.Get("SharpDevelop.LoadPrevProjectOnStartup", false);
((CheckBox)ControlDictionary["showErrorListCheckBox"]).Checked = Project.BuildOptions.ShowErrorListAfterBuild;
((NumericUpDown)ControlDictionary["parallelBuildNumericUpDown"]).Value = Project.BuildOptions.DefaultParallelProjectCount;
((Button)ControlDictionary["selectProjectLocationButton"]).Click += new EventHandler(SelectProjectLocationButtonClicked);
ComboBox onExecuteComboBox = Get<ComboBox>("onExecute");
Type type = typeof(Project.BuildOnExecuteSetting);
foreach (Project.BuildOnExecuteSetting element in Enum.GetValues(type)) {
object[] attr = type.GetField(Enum.GetName(type, element)).GetCustomAttributes(typeof(DescriptionAttribute), false);
string description;
if (attr.Length > 0) {
description = StringParser.Parse((attr[0] as DescriptionAttribute).Description);
} else {
description = Enum.GetName(type, element);
}
onExecuteComboBox.Items.Add(description);
}
onExecuteComboBox.SelectedIndex = (int)Project.BuildModifiedProjectsOnlyService.Setting;
}
public override bool StorePanelContents()
{
// check for correct settings
string projectPath = ControlDictionary["projectLocationTextBox"].Text;
if (projectPath.Length > 0) {
if (!FileUtility.IsValidPath(projectPath)) {
MessageService.ShowError(StringParser.Parse("${res:Dialog.Options.IDEOptions.ProjectAndSolutionOptions.InvalidProjectPathSpecified}"));
return false;
}
}
// set properties
PropertyService.Set("ICSharpCode.SharpDevelop.Gui.Dialogs.NewProjectDialog.DefaultPath", projectPath);
PropertyService.Set("SharpDevelop.LoadPrevProjectOnStartup", ((CheckBox)ControlDictionary["loadPrevProjectCheckBox"]).Checked);
Project.BuildOptions.ShowErrorListAfterBuild = ((CheckBox)ControlDictionary["showErrorListCheckBox"]).Checked;
Project.BuildOptions.DefaultParallelProjectCount = (int)((NumericUpDown)ControlDictionary["parallelBuildNumericUpDown"]).Value;
Project.BuildModifiedProjectsOnlyService.Setting = (Project.BuildOnExecuteSetting)Get<ComboBox>("onExecute").SelectedIndex;
return true;
}
void SelectProjectLocationButtonClicked(object sender, EventArgs e)
{
TextBox projectLocationTextBox = (TextBox)ControlDictionary["projectLocationTextBox"];
using (FolderBrowserDialog fdiag = FileService.CreateFolderBrowserDialog("${res:Dialog.Options.IDEOptions.ProjectAndSolutionOptions.SelectDefaultProjectLocationDialog.Title}", projectLocationTextBox.Text)) {
if (fdiag.ShowDialog() == DialogResult.OK) {
projectLocationTextBox.Text = fdiag.SelectedPath;
}
}
}
}
}

1
src/Main/Base/Project/Src/Project/AbstractProject.cs

@ -523,6 +523,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -523,6 +523,7 @@ namespace ICSharpCode.SharpDevelop.Project
// start of default implementation
var configMatchings = this.ParentSolution.GetActiveConfigurationsAndPlatformsForProjects(options.SolutionConfiguration, options.SolutionPlatform);
ProjectBuildOptions projectOptions = new ProjectBuildOptions(isRootBuildable ? options.ProjectTarget : options.TargetForDependencies);
projectOptions.BuildOutputVerbosity = options.BuildOutputVerbosity;
// find the project configuration
foreach (var matching in configMatchings) {
if (matching.Project == this) {

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

@ -111,7 +111,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -111,7 +111,7 @@ namespace ICSharpCode.SharpDevelop.Project
public void ReportMessage(string message)
{
messageView.AppendLine(ICSharpCode.Core.StringParser.Parse(message));
messageView.AppendLine(message);
}
public void Done(bool success)
@ -198,7 +198,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -198,7 +198,7 @@ namespace ICSharpCode.SharpDevelop.Project
engine.cancellationRegistration = engine.progressMonitor.CancellationToken.Register(engine.BuildCancelled);
engine.ReportMessageInternal("${res:MainWindow.CompilerMessages.BuildStarted}");
engine.ReportMessageLine("${res:MainWindow.CompilerMessages.BuildStarted}");
engine.StartBuildProjects();
engine.UpdateProgressTaskName();
}
@ -516,15 +516,15 @@ namespace ICSharpCode.SharpDevelop.Project @@ -516,15 +516,15 @@ namespace ICSharpCode.SharpDevelop.Project
if (buildIsCancelled) {
results.Result = BuildResultCode.Cancelled;
ReportMessageInternal("${res:MainWindow.CompilerMessages.BuildCancelled}");
ReportMessageLine("${res:MainWindow.CompilerMessages.BuildCancelled}");
} else if (rootNode.hasErrors) {
results.Result = BuildResultCode.Error;
ReportMessageInternal("${res:MainWindow.CompilerMessages.BuildFailed}" + buildTime);
ReportMessageLine("${res:MainWindow.CompilerMessages.BuildFailed}" + buildTime);
} else {
results.Result = BuildResultCode.Success;
ReportMessageInternal("${res:MainWindow.CompilerMessages.BuildFinished}" + buildTime);
ReportMessageLine("${res:MainWindow.CompilerMessages.BuildFinished}" + buildTime);
}
cancellationRegistration.Dispose();
progressMonitor.Dispose();
@ -637,6 +637,11 @@ namespace ICSharpCode.SharpDevelop.Project @@ -637,6 +637,11 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
void ReportMessageLine(string message)
{
ReportMessageInternal(StringParser.Parse(message));
}
void ReportMessageInternal(string message)
{
if (combinedBuildFeedbackSink != null)

27
src/Main/Base/Project/Src/Project/BuildOptions.cs

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
using System;
using System.Collections.Generic;
using ICSharpCode.Core;
using Microsoft.Build.Framework;
namespace ICSharpCode.SharpDevelop.Project
{
@ -43,6 +44,17 @@ namespace ICSharpCode.SharpDevelop.Project @@ -43,6 +44,17 @@ namespace ICSharpCode.SharpDevelop.Project
/// Specifies the project platform used for the build.
/// </summary>
public string Platform { get; set; }
/// <summary>
/// Gets/Sets the verbosity of build output.
/// </summary>
public BuildOutputVerbosity BuildOutputVerbosity { get; set; }
}
public enum BuildOutputVerbosity
{
Normal,
Diagnostic
}
/// <summary>
@ -68,6 +80,15 @@ namespace ICSharpCode.SharpDevelop.Project @@ -68,6 +80,15 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
public static BuildOutputVerbosity DefaultBuildOutputVerbosity {
get {
return PropertyService.Get("SharpDevelop.DefaultBuildOutputVerbosity", BuildOutputVerbosity.Normal);
}
set {
PropertyService.Set("SharpDevelop.DefaultBuildOutputVerbosity", value);
}
}
IDictionary<string, string> globalAdditionalProperties = new SortedList<string, string>();
IDictionary<string, string> projectAdditionalProperties = new SortedList<string, string>();
@ -91,6 +112,11 @@ namespace ICSharpCode.SharpDevelop.Project @@ -91,6 +112,11 @@ namespace ICSharpCode.SharpDevelop.Project
/// </summary>
public int ParallelProjectCount { get; set; }
/// <summary>
/// Gets/Sets the verbosity of build output.
/// </summary>
public BuildOutputVerbosity BuildOutputVerbosity { get; set; }
public BuildOptions(BuildTarget target, BuildCallback callback)
{
this.callback = callback;
@ -99,6 +125,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -99,6 +125,7 @@ namespace ICSharpCode.SharpDevelop.Project
this.BuildDependentProjects = true;
this.ParallelProjectCount = DefaultParallelProjectCount;
this.BuildOutputVerbosity = DefaultBuildOutputVerbosity;
}
readonly BuildCallback callback;

57
src/Main/Base/Project/Src/Project/MSBuildEngine/BuildLogFileLogger.cs

@ -1,57 +0,0 @@ @@ -1,57 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <author name="Daniel Grunwald"/>
// <version>$Revision$</version>
// </file>
using System;
using Microsoft.Build.Framework;
using Microsoft.Build.Logging;
using System.IO;
namespace ICSharpCode.SharpDevelop.Project
{
sealed class BuildLogFileLogger : ConsoleLogger
{
string fileName;
StreamWriter writer;
public BuildLogFileLogger(string fileName, LoggerVerbosity verbosity)
: base(verbosity)
{
this.fileName = fileName;
base.WriteHandler = Write;
}
public override void Initialize(IEventSource eventSource)
{
OpenFile();
base.Initialize(eventSource);
}
public override void Initialize(IEventSource eventSource, int nodeCount)
{
OpenFile();
base.Initialize(eventSource, nodeCount);
}
void OpenFile()
{
writer = new StreamWriter(fileName);
}
public override void Shutdown()
{
base.Shutdown();
writer.Close();
writer = null;
}
void Write(string text)
{
if (writer != null)
writer.Write(text);
}
}
}

25
src/Main/Base/Project/Src/Project/MSBuildEngine/MSBuildEngine.cs

@ -55,7 +55,10 @@ namespace ICSharpCode.SharpDevelop.Project @@ -55,7 +55,10 @@ namespace ICSharpCode.SharpDevelop.Project
// 'BuildingSolutionFile' tells MSBuild that we took care of building a project's dependencies
// before trying to build the project itself. This speeds up compilation because it prevents MSBuild from
// repeatedly looking if a project needs to be rebuilt.
{ "BuildingSolutionFile", "true" }
{ "BuildingSolutionFile", "true" },
// BuildingSolutionFile does not work in MSBuild 4.0 anymore, but BuildingInsideVisualStudio
// can be used to get the same effect.
{ "BuildingInsideVisualStudio", "true" }
};
/// <summary>
@ -189,10 +192,18 @@ namespace ICSharpCode.SharpDevelop.Project @@ -189,10 +192,18 @@ namespace ICSharpCode.SharpDevelop.Project
InterestingTasks.AddRange(MSBuildEngine.CompileTaskNames);
List<ILogger> loggers = new List<ILogger> {
new SharpDevelopLogger(this),
//new BuildLogFileLogger(project.FileName + ".log", LoggerVerbosity.Diagnostic)
};
List<ILogger> loggers = new List<ILogger>();
loggers.Add(new SharpDevelopLogger(this));
if (options.BuildOutputVerbosity == BuildOutputVerbosity.Diagnostic) {
this.ReportMessageEvents = true;
this.ReportAllTaskFinishedEvents = true;
this.ReportAllTaskStartedEvents = true;
this.ReportTargetFinishedEvents = true;
this.ReportTargetStartedEvents = true;
this.ReportUnknownEvents = true;
loggers.Add(new SDConsoleLogger(feedbackSink, LoggerVerbosity.Diagnostic));
}
//loggers.Add(new BuildLogFileLogger(project.FileName + ".log", LoggerVerbosity.Diagnostic));
foreach (IMSBuildAdditionalLogger loggerProvider in MSBuildEngine.AdditionalMSBuildLoggers) {
loggers.Add(loggerProvider.CreateLogger(this));
}
@ -329,7 +340,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -329,7 +340,7 @@ namespace ICSharpCode.SharpDevelop.Project
this.worker = engine;
}
void AppendText(string text)
void AppendLine(string text)
{
worker.OutputText(text);
}
@ -362,7 +373,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -362,7 +373,7 @@ namespace ICSharpCode.SharpDevelop.Project
{
activeTaskName = e.TaskName;
if (MSBuildEngine.CompileTaskNames.Contains(e.TaskName.ToLowerInvariant())) {
AppendText("${res:MainWindow.CompilerMessages.CompileVerb} " + Path.GetFileNameWithoutExtension(e.ProjectFile));
AppendLine(StringParser.Parse("${res:MainWindow.CompilerMessages.CompileVerb} " + Path.GetFileNameWithoutExtension(e.ProjectFile)));
}
}

53
src/Main/Base/Project/Src/Project/MSBuildEngine/SDConsoleLogger.cs

@ -0,0 +1,53 @@ @@ -0,0 +1,53 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <author name="Daniel Grunwald"/>
// <version>$Revision: 5529 $</version>
// </file>
using System;
using System.Diagnostics;
using System.IO;
using System.Text;
using Microsoft.Build.Framework;
using Microsoft.Build.Logging;
namespace ICSharpCode.SharpDevelop.Project
{
sealed class SDConsoleLogger : ConsoleLogger
{
IBuildFeedbackSink feedbackSink;
public SDConsoleLogger(IBuildFeedbackSink feedbackSink, LoggerVerbosity verbosity)
: base(verbosity)
{
if (feedbackSink == null)
throw new ArgumentNullException("feedbackSink");
this.feedbackSink = feedbackSink;
this.ShowSummary = false;
base.WriteHandler = Write;
}
StringBuilder buffer = new StringBuilder();
void Write(string text)
{
// ReportMessage takes full lines, so we have to put stuff into a buffer until we get a whole line
int sendUpTo = text.LastIndexOf('\n');
int oldBufferLength = buffer.Length;
buffer.Append(text);
if (sendUpTo >= 0) {
sendUpTo += oldBufferLength;
Debug.Assert(buffer[sendUpTo] == '\n');
int terminatorLength = 1;
if (sendUpTo > 0 && buffer[sendUpTo - 1] == '\r') {
sendUpTo--;
terminatorLength++;
}
feedbackSink.ReportMessage(buffer.ToString(0, sendUpTo));
buffer.Remove(0, sendUpTo + terminatorLength);
}
}
}
}

4
src/Main/ICSharpCode.Core.Presentation/themes/generic.xaml

@ -2,6 +2,10 @@ @@ -2,6 +2,10 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ICSharpCode.Core.Presentation"
>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/ICSharpCode.Core.Presentation;component/NumericUpDown.xaml" />
</ResourceDictionary.MergedDictionaries>
<Style TargetType="{x:Type Window}" x:Key="{x:Static local:GlobalStyles.WindowStyleKey}">
<Setter Property="UseLayoutRounding" Value="True" />
<Setter Property="TextOptions.TextFormattingMode" Value="Display" />

Loading…
Cancel
Save