Browse Source

Fixed forum-13073 and other SolutionConfigurationEditor-related problems.

Allow to continue on AddIn-loading errors.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2038 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 19 years ago
parent
commit
1246f7de74
  1. 4
      AddIns/ICSharpCode.SharpDevelop.addin
  2. 4
      src/AddIns/DisplayBindings/SettingsEditor/Project/SettingsEditor.addin
  3. 7
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  4. 123
      src/Main/Base/Project/Src/Gui/Dialogs/SolutionConfiguration/EditAvailableConfigurationsDialog.Designer.cs
  5. 157
      src/Main/Base/Project/Src/Gui/Dialogs/SolutionConfiguration/EditAvailableConfigurationsDialog.cs
  6. 38
      src/Main/Base/Project/Src/Gui/Dialogs/SolutionConfiguration/SolutionConfigurationEditor.Designer.cs
  7. 10
      src/Main/Base/Project/Src/Gui/Dialogs/SolutionConfiguration/SolutionConfigurationEditor.cs
  8. 129
      src/Main/Base/Project/Src/Gui/Dialogs/SolutionConfiguration/SolutionConfigurationEditor.resx
  9. 124
      src/Main/Base/Project/Src/Project/Solution/Solution.cs
  10. 6
      src/Main/Core/Project/Src/AddInTree/AddIn/AddIn.cs
  11. 9
      src/Main/Core/Project/Src/AddInTree/AddInTree.cs

4
AddIns/ICSharpCode.SharpDevelop.addin

@ -1359,13 +1359,13 @@
<MenuItem id = "Build" label = "${res:XML.MainMenu.BuildMenu}" type="Menu"> <MenuItem id = "Build" label = "${res:XML.MainMenu.BuildMenu}" type="Menu">
<ComplexCondition action="Disable"> <ComplexCondition action="Disable">
<Or> <Or>
<And> <!--<And>
<Or> <Or>
<Condition name = "WindowActive" activewindow="ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor.ITextEditorControlProvider"/> <Condition name = "WindowActive" activewindow="ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor.ITextEditorControlProvider"/>
<Condition name = "WindowActive" activewindow="ICSharpCode.FormsDesigner.FormsDesignerViewContent"/> <Condition name = "WindowActive" activewindow="ICSharpCode.FormsDesigner.FormsDesignerViewContent"/>
</Or> </Or>
<Condition name = "ActiveViewContentUntitled" activewindowuntitled="False"/> <Condition name = "ActiveViewContentUntitled" activewindowuntitled="False"/>
</And> </And>-->
<Condition name = "SolutionOpen"/> <Condition name = "SolutionOpen"/>
</Or> </Or>
<MenuItem id = "Build" <MenuItem id = "Build"

4
src/AddIns/DisplayBindings/SettingsEditor/Project/SettingsEditor.addin

@ -1,4 +1,4 @@
<AddIn name = "SettingsEditor" <AddIn name = "Settings Editor"
author = "Daniel Grunwald" author = "Daniel Grunwald"
copyright = "prj:///doc/copyright.txt" copyright = "prj:///doc/copyright.txt"
description = "Edits project settings"> description = "Edits project settings">
@ -18,6 +18,6 @@
<Path name = "/SharpDevelop/CustomTools"> <Path name = "/SharpDevelop/CustomTools">
<CustomTool id = "SettingsSingleFileGenerator" <CustomTool id = "SettingsSingleFileGenerator"
class = "ICSharpCode.SettingsEditor.SettingsCodeGeneratorTool" class = "ICSharpCode.SettingsEditor.SettingsCodeGeneratorTool"
fileNamePattern = "\.res(x|ources)$"/> fileNamePattern = "\.settings$"/>
</Path> </Path>
</AddIn> </AddIn>

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

@ -678,9 +678,6 @@
<DependentUpon>SolutionConfigurationEditor.cs</DependentUpon> <DependentUpon>SolutionConfigurationEditor.cs</DependentUpon>
</Compile> </Compile>
<Compile Include="Src\Gui\Dialogs\SolutionConfiguration\SolutionConfigurationEditor.cs" /> <Compile Include="Src\Gui\Dialogs\SolutionConfiguration\SolutionConfigurationEditor.cs" />
<EmbeddedResource Include="Src\Gui\Dialogs\SolutionConfiguration\SolutionConfigurationEditor.resx">
<DependentUpon>SolutionConfigurationEditor.cs</DependentUpon>
</EmbeddedResource>
<Compile Include="Src\TextEditor\Gui\Editor\IncrementalSearch.cs" /> <Compile Include="Src\TextEditor\Gui\Editor\IncrementalSearch.cs" />
<EmbeddedResource Include="Resources\IncrementalSearchCursor.cur" /> <EmbeddedResource Include="Resources\IncrementalSearchCursor.cur" />
<EmbeddedResource Include="Resources\ReverseIncrementalSearchCursor.cur" /> <EmbeddedResource Include="Resources\ReverseIncrementalSearchCursor.cur" />
@ -689,6 +686,10 @@
<Compile Include="Src\Util\Linq.cs" /> <Compile Include="Src\Util\Linq.cs" />
<Compile Include="Src\Util\DebugTimer.cs" /> <Compile Include="Src\Util\DebugTimer.cs" />
<Compile Include="Src\Project\CustomTool.cs" /> <Compile Include="Src\Project\CustomTool.cs" />
<Compile Include="Src\Gui\Dialogs\SolutionConfiguration\EditAvailableConfigurationsDialog.Designer.cs">
<DependentUpon>EditAvailableConfigurationsDialog.cs</DependentUpon>
</Compile>
<Compile Include="Src\Gui\Dialogs\SolutionConfiguration\EditAvailableConfigurationsDialog.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\..\Libraries\DockPanel_Src\WinFormsUI\WinFormsUI.csproj"> <ProjectReference Include="..\..\..\Libraries\DockPanel_Src\WinFormsUI\WinFormsUI.csproj">

123
src/Main/Base/Project/Src/Gui/Dialogs/SolutionConfiguration/EditAvailableConfigurationsDialog.Designer.cs generated

@ -0,0 +1,123 @@
// <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>
namespace ICSharpCode.SharpDevelop.Gui
{
partial class EditAvailableConfigurationsDialog : System.Windows.Forms.Form
{
/// <summary>
/// Designer variable used to keep track of non-visual components.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Disposes resources used by the form.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing) {
if (components != null) {
components.Dispose();
}
}
base.Dispose(disposing);
}
/// <summary>
/// This method is required for Windows Forms designer support.
/// Do not change the method contents inside the source code editor. The Forms designer might
/// not be able to load this method if it was changed manually.
/// </summary>
private void InitializeComponent()
{
this.listBox = new System.Windows.Forms.ListBox();
this.okButton = new System.Windows.Forms.Button();
this.removeButton = new System.Windows.Forms.Button();
this.renameButton = new System.Windows.Forms.Button();
this.addButton = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// listBox
//
this.listBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.listBox.FormattingEnabled = true;
this.listBox.IntegralHeight = false;
this.listBox.Location = new System.Drawing.Point(12, 12);
this.listBox.Name = "listBox";
this.listBox.Size = new System.Drawing.Size(204, 93);
this.listBox.TabIndex = 0;
//
// okButton
//
this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK;
this.okButton.Location = new System.Drawing.Point(222, 111);
this.okButton.Name = "okButton";
this.okButton.Size = new System.Drawing.Size(75, 23);
this.okButton.TabIndex = 1;
this.okButton.Text = "${res:Global.OKButtonText}";
this.okButton.UseVisualStyleBackColor = true;
//
// removeButton
//
this.removeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.removeButton.Location = new System.Drawing.Point(222, 12);
this.removeButton.Name = "removeButton";
this.removeButton.Size = new System.Drawing.Size(75, 23);
this.removeButton.TabIndex = 2;
this.removeButton.Text = "${res:Global.RemoveButtonText}";
this.removeButton.UseVisualStyleBackColor = true;
this.removeButton.Click += new System.EventHandler(this.RemoveButtonClick);
//
// renameButton
//
this.renameButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.renameButton.Location = new System.Drawing.Point(222, 41);
this.renameButton.Name = "renameButton";
this.renameButton.Size = new System.Drawing.Size(75, 23);
this.renameButton.TabIndex = 3;
this.renameButton.Text = "${res:Global.RenameButtonText}";
this.renameButton.UseVisualStyleBackColor = true;
this.renameButton.Click += new System.EventHandler(this.RenameButtonClick);
//
// addButton
//
this.addButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.addButton.Location = new System.Drawing.Point(222, 70);
this.addButton.Name = "addButton";
this.addButton.Size = new System.Drawing.Size(75, 23);
this.addButton.TabIndex = 4;
this.addButton.Text = "${res:Global.AddButtonText}...";
this.addButton.UseVisualStyleBackColor = true;
this.addButton.Click += new System.EventHandler(this.AddButtonClick);
//
// EditAvailableConfigurationsDialog
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(309, 146);
this.Controls.Add(this.addButton);
this.Controls.Add(this.renameButton);
this.Controls.Add(this.removeButton);
this.Controls.Add(this.okButton);
this.Controls.Add(this.listBox);
this.MinimumSize = new System.Drawing.Size(230, 165);
this.Name = "EditAvailableConfigurationsDialog";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "EditAvailableConfigurationsDialog";
this.ResumeLayout(false);
}
private System.Windows.Forms.Button addButton;
private System.Windows.Forms.Button renameButton;
private System.Windows.Forms.Button removeButton;
private System.Windows.Forms.ListBox listBox;
private System.Windows.Forms.Button okButton;
}
}

157
src/Main/Base/Project/Src/Gui/Dialogs/SolutionConfiguration/EditAvailableConfigurationsDialog.cs

@ -0,0 +1,157 @@
// <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;
using System.Drawing;
using System.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.SharpDevelop.Gui
{
public partial class EditAvailableConfigurationsDialog
{
Solution solution;
IProject project;
bool editPlatforms;
public EditAvailableConfigurationsDialog(Solution solution, bool editPlatforms)
: this()
{
this.solution = solution;
this.editPlatforms = editPlatforms;
InitList();
}
public EditAvailableConfigurationsDialog(IProject project, bool editPlatforms)
: this()
{
this.project = project;
this.solution = project.ParentSolution;
this.editPlatforms = editPlatforms;
InitList();
}
void InitList()
{
if (project != null) {
if (editPlatforms) {
ShowEntries(project.GetPlatformNames(), project.Platform);
} else {
ShowEntries(project.GetConfigurationNames(), project.Configuration);
}
} else {
if (editPlatforms) {
ShowEntries(solution.GetPlatformNames(), solution.Preferences.ActivePlatform);
} else {
ShowEntries(solution.GetConfigurationNames(), solution.Preferences.ActiveConfiguration);
}
}
}
void ShowEntries(IEnumerable<string> list, string activeItem)
{
string[] array = Linq.ToArray(list);
listBox.Items.Clear();
listBox.Items.AddRange(array);
if (listBox.Items.Count == 0) {
throw new Exception("There must be at least one configuration/platform");
}
listBox.SelectedIndex = Math.Max(Array.IndexOf(array, activeItem), 0);
}
private EditAvailableConfigurationsDialog()
{
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();
foreach (Control ctl in this.Controls) {
ctl.Text = StringParser.Parse(ctl.Text);
}
}
void RemoveButtonClick(object sender, EventArgs e)
{
if (listBox.Items.Count == 1) {
MessageService.ShowMessage("You cannot delete all configurations/platforms.");
}
string name = listBox.SelectedItem.ToString();
if (MessageService.AskQuestionFormatted("Do you really want to remove '{0}'?",
new string[] { name }))
{
if (project != null) {
Remove(project, name, editPlatforms);
} else {
Remove(solution, name, editPlatforms);
}
}
}
static void Remove(IProject project, string name, bool isPlatform)
{
throw new NotImplementedException();
}
static void Remove(Solution solution, string name, bool isPlatform)
{
throw new NotImplementedException();
}
void RenameButtonClick(object sender, EventArgs e)
{
string oldName = listBox.SelectedItem.ToString();
string newName = MessageService.ShowInputBox("Rename", "Enter the new name:", oldName);
if (string.IsNullOrEmpty(newName) || newName == oldName)
return;
if (!EnsureCorrectName(ref newName))
return;
if (project != null) {
Rename(project, oldName, newName);
} else {
if (editPlatforms) {
solution.RenameSolutionPlatform(oldName, newName);
} else {
solution.RenameSolutionConfiguration(oldName, newName);
}
// Solution platform name => project platform name
foreach (IProject p in solution.Projects) {
Rename(p, oldName, newName);
}
}
InitList();
}
void Rename(IProject project, string oldName, string newName)
{
}
void AddButtonClick(object sender, EventArgs e)
{
throw new NotImplementedException();
}
bool EnsureCorrectName(ref string newName)
{
newName = newName.Trim();
if (editPlatforms && string.Equals(newName, "AnyCPU", StringComparison.InvariantCultureIgnoreCase))
newName = "Any CPU";
if (listBox.Items.Contains(newName)) {
MessageService.ShowMessage("Duplicate name.");
return false;
}
if (!FileUtility.IsValidDirectoryName(newName)) {
MessageService.ShowMessage("The name was invalid.");
return false;
}
return true;
}
}
}

38
src/Main/Base/Project/Src/Gui/Dialogs/SolutionConfiguration/SolutionConfigurationEditor.Designer.cs generated

@ -41,11 +41,11 @@ namespace ICSharpCode.SharpDevelop.Gui
this.configurationComboBox = new System.Windows.Forms.ComboBox(); this.configurationComboBox = new System.Windows.Forms.ComboBox();
this.label1 = new System.Windows.Forms.Label(); this.label1 = new System.Windows.Forms.Label();
this.grid = new System.Windows.Forms.DataGridView(); this.grid = new System.Windows.Forms.DataGridView();
this.panel2 = new System.Windows.Forms.Panel();
this.okButton = new System.Windows.Forms.Button();
this.projectNameColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.projectNameColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.configurationColumn = new System.Windows.Forms.DataGridViewComboBoxColumn(); this.configurationColumn = new System.Windows.Forms.DataGridViewComboBoxColumn();
this.platformColumn = new System.Windows.Forms.DataGridViewComboBoxColumn(); this.platformColumn = new System.Windows.Forms.DataGridViewComboBoxColumn();
this.panel2 = new System.Windows.Forms.Panel();
this.okButton = new System.Windows.Forms.Button();
this.panel1.SuspendLayout(); this.panel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.grid)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.grid)).BeginInit();
this.panel2.SuspendLayout(); this.panel2.SuspendLayout();
@ -112,6 +112,7 @@ namespace ICSharpCode.SharpDevelop.Gui
this.configurationColumn, this.configurationColumn,
this.platformColumn}); this.platformColumn});
this.grid.Dock = System.Windows.Forms.DockStyle.Fill; this.grid.Dock = System.Windows.Forms.DockStyle.Fill;
this.grid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditOnEnter;
this.grid.Location = new System.Drawing.Point(0, 37); this.grid.Location = new System.Drawing.Point(0, 37);
this.grid.Name = "grid"; this.grid.Name = "grid";
this.grid.Size = new System.Drawing.Size(504, 192); this.grid.Size = new System.Drawing.Size(504, 192);
@ -119,22 +120,6 @@ namespace ICSharpCode.SharpDevelop.Gui
this.grid.CellValueChanged += new System.Windows.Forms.DataGridViewCellEventHandler(this.GridCellValueChanged); this.grid.CellValueChanged += new System.Windows.Forms.DataGridViewCellEventHandler(this.GridCellValueChanged);
this.grid.DataError += new System.Windows.Forms.DataGridViewDataErrorEventHandler(this.GridDataError); this.grid.DataError += new System.Windows.Forms.DataGridViewDataErrorEventHandler(this.GridDataError);
// //
// projectNameColumn
//
this.projectNameColumn.HeaderText = "Project Name";
this.projectNameColumn.Name = "projectNameColumn";
this.projectNameColumn.ReadOnly = true;
//
// configurationColumn
//
this.configurationColumn.HeaderText = "Configuration";
this.configurationColumn.Name = "configurationColumn";
//
// platformColumn
//
this.platformColumn.HeaderText = "Platform";
this.platformColumn.Name = "platformColumn";
//
// panel2 // panel2
// //
this.panel2.Controls.Add(this.okButton); this.panel2.Controls.Add(this.okButton);
@ -155,6 +140,23 @@ namespace ICSharpCode.SharpDevelop.Gui
this.okButton.Text = "${res:Global.OKButtonText}"; this.okButton.Text = "${res:Global.OKButtonText}";
this.okButton.UseVisualStyleBackColor = true; this.okButton.UseVisualStyleBackColor = true;
// //
// projectNameColumn
//
this.projectNameColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
this.projectNameColumn.HeaderText = "Project Name";
this.projectNameColumn.Name = "projectNameColumn";
this.projectNameColumn.ReadOnly = true;
//
// configurationColumn
//
this.configurationColumn.HeaderText = "Configuration";
this.configurationColumn.Name = "configurationColumn";
//
// platformColumn
//
this.platformColumn.HeaderText = "Platform";
this.platformColumn.Name = "platformColumn";
//
// SolutionConfigurationEditor // SolutionConfigurationEditor
// //
this.AcceptButton = this.okButton; this.AcceptButton = this.okButton;

10
src/Main/Base/Project/Src/Gui/Dialogs/SolutionConfiguration/SolutionConfigurationEditor.cs

@ -26,6 +26,8 @@ namespace ICSharpCode.SharpDevelop.Gui
public SolutionConfigurationEditor() public SolutionConfigurationEditor()
{ {
this.solution = ProjectService.OpenSolution; this.solution = ProjectService.OpenSolution;
if (solution == null)
throw new Exception("A solution must be opened");
// //
// The InitializeComponent() call is required for Windows Forms designer support. // The InitializeComponent() call is required for Windows Forms designer support.
@ -118,7 +120,9 @@ namespace ICSharpCode.SharpDevelop.Gui
if (!inUpdate) { if (!inUpdate) {
inUpdate = true; inUpdate = true;
if (configurationComboBox.SelectedIndex == configurationComboBoxEditIndex) { if (configurationComboBox.SelectedIndex == configurationComboBoxEditIndex) {
MessageBox.Show("Edit configurations: Feature not implemented yet."); using (Form dlg = new EditAvailableConfigurationsDialog(solution, false)) {
dlg.ShowDialog(this);
}
SelectElement(configurationComboBox, solution.Preferences.ActiveConfiguration); SelectElement(configurationComboBox, solution.Preferences.ActiveConfiguration);
} }
UpdateGrid(); UpdateGrid();
@ -130,7 +134,9 @@ namespace ICSharpCode.SharpDevelop.Gui
if (!inUpdate) { if (!inUpdate) {
inUpdate = true; inUpdate = true;
if (platformComboBox.SelectedIndex == platformComboBoxEditIndex) { if (platformComboBox.SelectedIndex == platformComboBoxEditIndex) {
MessageBox.Show("Edit platforms: Feature not implemented yet."); using (Form dlg = new EditAvailableConfigurationsDialog(solution, true)) {
dlg.ShowDialog(this);
}
SelectElement(platformComboBox, solution.Preferences.ActivePlatform); SelectElement(platformComboBox, solution.Preferences.ActivePlatform);
} }
UpdateGrid(); UpdateGrid();

129
src/Main/Base/Project/Src/Gui/Dialogs/SolutionConfiguration/SolutionConfigurationEditor.resx

@ -1,129 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="projectNameColumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="configurationColumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="platformColumn.UserAddedColumn" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
</root>

124
src/Main/Base/Project/Src/Project/Solution/Solution.cs

@ -23,6 +23,12 @@ namespace ICSharpCode.SharpDevelop.Project
string fileName = String.Empty; string fileName = String.Empty;
public Solution()
{
preferences = new SolutionPreferences(this);
}
#region Enumerate projects/folders
public IProject FindProjectContainingFile(string fileName) public IProject FindProjectContainingFile(string fileName)
{ {
IProject currentProject = ProjectService.CurrentProject; IProject currentProject = ProjectService.CurrentProject;
@ -133,6 +139,23 @@ namespace ICSharpCode.SharpDevelop.Project
} }
} }
public ISolutionFolder GetSolutionFolder(string guid)
{
foreach (ISolutionFolder solutionFolder in SolutionFolders) {
if (solutionFolder.IdGuid == guid) {
return solutionFolder;
}
}
return null;
}
public SolutionFolder CreateFolder(string folderName)
{
return new SolutionFolder(folderName, folderName, "{" + Guid.NewGuid().ToString().ToUpperInvariant() + "}");
}
#endregion
#region Properties
[Browsable(false)] [Browsable(false)]
public bool HasProjects { public bool HasProjects {
get { get {
@ -169,6 +192,16 @@ namespace ICSharpCode.SharpDevelop.Project
} }
} }
SolutionPreferences preferences;
[Browsable(false)]
public SolutionPreferences Preferences {
get {
return preferences;
}
}
#endregion
#region ISolutionFolderContainer implementations #region ISolutionFolderContainer implementations
[Browsable(false)] [Browsable(false)]
public override Solution ParentSolution { public override Solution ParentSolution {
@ -196,30 +229,7 @@ namespace ICSharpCode.SharpDevelop.Project
#endregion #endregion
SolutionPreferences preferences; #region Save
[Browsable(false)]
public SolutionPreferences Preferences {
get {
return preferences;
}
}
public Solution()
{
preferences = new SolutionPreferences(this);
}
public ISolutionFolder GetSolutionFolder(string guid)
{
foreach (ISolutionFolder solutionFolder in SolutionFolders) {
if (solutionFolder.IdGuid == guid) {
return solutionFolder;
}
}
return null;
}
public void Save() public void Save()
{ {
try { try {
@ -231,12 +241,6 @@ namespace ICSharpCode.SharpDevelop.Project
} }
} }
public SolutionFolder CreateFolder(string folderName)
{
return new SolutionFolder(folderName, folderName, "{" + Guid.NewGuid().ToString().ToUpperInvariant() + "}");
}
public void Save(string fileName) public void Save(string fileName)
{ {
this.fileName = fileName; this.fileName = fileName;
@ -357,7 +361,9 @@ namespace ICSharpCode.SharpDevelop.Project
projectSection.Append(Environment.NewLine); projectSection.Append(Environment.NewLine);
} }
} }
#endregion
#region Read/SetupSolution
static Regex versionPattern = new Regex("Microsoft Visual Studio Solution File, Format Version\\s+(?<Version>.*)", RegexOptions.Compiled); static Regex versionPattern = new Regex("Microsoft Visual Studio Solution File, Format Version\\s+(?<Version>.*)", RegexOptions.Compiled);
static Regex projectLinePattern = new Regex("Project\\(\"(?<ProjectGuid>.*)\"\\)\\s+=\\s+\"(?<Title>.*)\",\\s*\"(?<Location>.*)\",\\s*\"(?<Guid>.*)\"", RegexOptions.Compiled); static Regex projectLinePattern = new Regex("Project\\(\"(?<ProjectGuid>.*)\"\\)\\s+=\\s+\"(?<Title>.*)\",\\s*\"(?<Location>.*)\",\\s*\"(?<Guid>.*)\"", RegexOptions.Compiled);
@ -501,7 +507,10 @@ namespace ICSharpCode.SharpDevelop.Project
} }
return true; return true;
} }
#endregion
#region Configuration/Platform management
#region Section management
public ProjectSection GetSolutionConfigurationsSection() public ProjectSection GetSolutionConfigurationsSection()
{ {
foreach (ProjectSection sec in this.Sections) { foreach (ProjectSection sec in this.Sections) {
@ -610,7 +619,9 @@ namespace ICSharpCode.SharpDevelop.Project
} }
return changed; return changed;
} }
#endregion
#region GetProjectConfigurationsSection/GetPlatformNames
public IList<string> GetConfigurationNames() public IList<string> GetConfigurationNames()
{ {
List<string> configurationNames = new List<string>(); List<string> configurationNames = new List<string>();
@ -632,7 +643,9 @@ namespace ICSharpCode.SharpDevelop.Project
} }
return platformNames; return platformNames;
} }
#endregion
#region Solution - project configuration matching
public void ApplySolutionConfigurationAndPlatformToProjects() public void ApplySolutionConfigurationAndPlatformToProjects()
{ {
foreach (ProjectConfigurationPlatformMatching l in foreach (ProjectConfigurationPlatformMatching l in
@ -696,7 +709,50 @@ namespace ICSharpCode.SharpDevelop.Project
GetProjectConfigurationsSection().Items.Add(item); GetProjectConfigurationsSection().Items.Add(item);
return item; return item;
} }
#endregion
#region Configurations management
public void RenameSolutionConfiguration(string oldName, string newName)
{
foreach (string platform in GetPlatformNames()) {
foreach (ProjectConfigurationPlatformMatching m
in GetActiveConfigurationsAndPlatformsForProjects(oldName, platform))
{
if (m.SolutionItem == null)
continue;
m.SolutionItem.Name = m.Project.IdGuid + "." + newName + "|" + platform + ".Build.0";
}
}
foreach (SolutionItem item in GetSolutionConfigurationsSection().Items) {
if (AbstractProject.GetConfigurationNameFromKey(item.Name) == oldName) {
item.Name = newName + "|" + AbstractProject.GetPlatformNameFromKey(item.Name);
item.Location = item.Name;
}
}
}
public void RenameSolutionPlatform(string oldName, string newName)
{
foreach (string configuration in GetConfigurationNames()) {
foreach (ProjectConfigurationPlatformMatching m
in GetActiveConfigurationsAndPlatformsForProjects(configuration, oldName))
{
if (m.SolutionItem == null)
continue;
m.SolutionItem.Name = m.Project.IdGuid + "." + configuration + "|" + newName + ".Build.0";
}
}
foreach (SolutionItem item in GetSolutionConfigurationsSection().Items) {
if (AbstractProject.GetPlatformNameFromKey(item.Name) == oldName) {
item.Name = AbstractProject.GetConfigurationNameFromKey(item.Name) + "|" + newName;
item.Location = item.Name;
}
}
}
#endregion
#endregion
#region Load
static Solution solutionBeingLoaded; static Solution solutionBeingLoaded;
public static Solution SolutionBeingLoaded { public static Solution SolutionBeingLoaded {
@ -740,6 +796,7 @@ namespace ICSharpCode.SharpDevelop.Project
solutionBeingLoaded = null; solutionBeingLoaded = null;
return newSolution; return newSolution;
} }
#endregion
#region System.IDisposable interface implementation #region System.IDisposable interface implementation
public void Dispose() public void Dispose()
@ -750,9 +807,12 @@ namespace ICSharpCode.SharpDevelop.Project
} }
#endregion #endregion
public void RunMSBuild(string target, MSBuildEngineCallback callback, IDictionary<string, string> additionalProperties) public void RunMSBuild(string target, MSBuildEngineCallback callback,
IDictionary<string, string> additionalProperties)
{ {
MSBuildProject.RunMSBuild(FileName, target, preferences.ActiveConfiguration, preferences.ActivePlatform, false, callback, additionalProperties); MSBuildProject.RunMSBuild(FileName, target, preferences.ActiveConfiguration,
preferences.ActivePlatform, false, callback,
additionalProperties);
} }
public void Build(MSBuildEngineCallback callback) public void Build(MSBuildEngineCallback callback)

6
src/Main/Core/Project/Src/AddInTree/AddIn/AddIn.cs

@ -53,6 +53,8 @@ namespace ICSharpCode.Core
/// <summary> /// <summary>
/// Gets the message of a custom load error. Used only when AddInAction is set to CustomError. /// Gets the message of a custom load error. Used only when AddInAction is set to CustomError.
/// Settings this property to a non-null value causes Enabled to be set to false and
/// Action to be set to AddInAction.CustomError.
/// </summary> /// </summary>
public string CustomErrorMessage { public string CustomErrorMessage {
get { get {
@ -149,7 +151,7 @@ namespace ICSharpCode.Core
} }
} }
AddIn() internal AddIn()
{ {
} }
@ -259,7 +261,7 @@ namespace ICSharpCode.Core
return addIn; return addIn;
} }
} catch (Exception e) { } catch (Exception e) {
throw new AddInLoadException("Can't load " + fileName + " " + e); throw new AddInLoadException("Can't load " + fileName, e);
} }
} }
} }

9
src/Main/Core/Project/Src/AddInTree/AddInTree.cs

@ -288,7 +288,14 @@ namespace ICSharpCode.Core
Dictionary<string, Version> dict = new Dictionary<string, Version>(); Dictionary<string, Version> dict = new Dictionary<string, Version>();
Dictionary<string, AddIn> addInDict = new Dictionary<string, AddIn>(); Dictionary<string, AddIn> addInDict = new Dictionary<string, AddIn>();
foreach (string fileName in addInFiles) { foreach (string fileName in addInFiles) {
AddIn addIn = AddIn.Load(fileName); AddIn addIn;
try {
addIn = AddIn.Load(fileName);
} catch (AddInLoadException ex) {
MessageService.ShowError(ex, "Error loading AddIn " + fileName);
addIn = new AddIn();
addIn.CustomErrorMessage = ex.Message;
}
if (addIn.Action == AddInAction.CustomError) { if (addIn.Action == AddInAction.CustomError) {
list.Add(addIn); list.Add(addIn);
continue; continue;

Loading…
Cancel
Save