diff --git a/AddIns/ICSharpCode.SharpDevelop.addin b/AddIns/ICSharpCode.SharpDevelop.addin index e7af6a2116..8163f40e85 100644 --- a/AddIns/ICSharpCode.SharpDevelop.addin +++ b/AddIns/ICSharpCode.SharpDevelop.addin @@ -1359,13 +1359,13 @@ - + @@ -18,6 +18,6 @@ + fileNamePattern = "\.settings$"/> diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj index 4d01683db6..f23348d4bd 100644 --- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj +++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj @@ -678,9 +678,6 @@ SolutionConfigurationEditor.cs - - SolutionConfigurationEditor.cs - @@ -689,6 +686,10 @@ + + EditAvailableConfigurationsDialog.cs + + diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/SolutionConfiguration/EditAvailableConfigurationsDialog.Designer.cs b/src/Main/Base/Project/Src/Gui/Dialogs/SolutionConfiguration/EditAvailableConfigurationsDialog.Designer.cs new file mode 100644 index 0000000000..f71f52235f --- /dev/null +++ b/src/Main/Base/Project/Src/Gui/Dialogs/SolutionConfiguration/EditAvailableConfigurationsDialog.Designer.cs @@ -0,0 +1,123 @@ +// +// +// +// +// $Revision$ +// + +namespace ICSharpCode.SharpDevelop.Gui +{ + partial class EditAvailableConfigurationsDialog : System.Windows.Forms.Form + { + /// + /// Designer variable used to keep track of non-visual components. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Disposes resources used by the form. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing) { + if (components != null) { + components.Dispose(); + } + } + base.Dispose(disposing); + } + + /// + /// 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. + /// + 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; + } +} diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/SolutionConfiguration/EditAvailableConfigurationsDialog.cs b/src/Main/Base/Project/Src/Gui/Dialogs/SolutionConfiguration/EditAvailableConfigurationsDialog.cs new file mode 100644 index 0000000000..1ba838c2c1 --- /dev/null +++ b/src/Main/Base/Project/Src/Gui/Dialogs/SolutionConfiguration/EditAvailableConfigurationsDialog.cs @@ -0,0 +1,157 @@ +// +// +// +// +// $Revision$ +// + +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 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; + } + } +} diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/SolutionConfiguration/SolutionConfigurationEditor.Designer.cs b/src/Main/Base/Project/Src/Gui/Dialogs/SolutionConfiguration/SolutionConfigurationEditor.Designer.cs index 0e4967f428..2eeefb6f4f 100644 --- a/src/Main/Base/Project/Src/Gui/Dialogs/SolutionConfiguration/SolutionConfigurationEditor.Designer.cs +++ b/src/Main/Base/Project/Src/Gui/Dialogs/SolutionConfiguration/SolutionConfigurationEditor.Designer.cs @@ -41,11 +41,11 @@ namespace ICSharpCode.SharpDevelop.Gui this.configurationComboBox = new System.Windows.Forms.ComboBox(); this.label1 = new System.Windows.Forms.Label(); 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.configurationColumn = 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(); ((System.ComponentModel.ISupportInitialize)(this.grid)).BeginInit(); this.panel2.SuspendLayout(); @@ -112,6 +112,7 @@ namespace ICSharpCode.SharpDevelop.Gui this.configurationColumn, this.platformColumn}); 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.Name = "grid"; 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.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 // this.panel2.Controls.Add(this.okButton); @@ -155,6 +140,23 @@ namespace ICSharpCode.SharpDevelop.Gui this.okButton.Text = "${res:Global.OKButtonText}"; 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 // this.AcceptButton = this.okButton; diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/SolutionConfiguration/SolutionConfigurationEditor.cs b/src/Main/Base/Project/Src/Gui/Dialogs/SolutionConfiguration/SolutionConfigurationEditor.cs index c0cfdd243f..8e5789d7c7 100644 --- a/src/Main/Base/Project/Src/Gui/Dialogs/SolutionConfiguration/SolutionConfigurationEditor.cs +++ b/src/Main/Base/Project/Src/Gui/Dialogs/SolutionConfiguration/SolutionConfigurationEditor.cs @@ -26,6 +26,8 @@ namespace ICSharpCode.SharpDevelop.Gui public SolutionConfigurationEditor() { 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. @@ -118,7 +120,9 @@ namespace ICSharpCode.SharpDevelop.Gui if (!inUpdate) { inUpdate = true; 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); } UpdateGrid(); @@ -130,7 +134,9 @@ namespace ICSharpCode.SharpDevelop.Gui if (!inUpdate) { inUpdate = true; 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); } UpdateGrid(); diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/SolutionConfiguration/SolutionConfigurationEditor.resx b/src/Main/Base/Project/Src/Gui/Dialogs/SolutionConfiguration/SolutionConfigurationEditor.resx deleted file mode 100644 index 2f667800f0..0000000000 --- a/src/Main/Base/Project/Src/Gui/Dialogs/SolutionConfiguration/SolutionConfigurationEditor.resx +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - True - - - True - - - True - - \ No newline at end of file diff --git a/src/Main/Base/Project/Src/Project/Solution/Solution.cs b/src/Main/Base/Project/Src/Project/Solution/Solution.cs index e76f508332..25f7f02499 100644 --- a/src/Main/Base/Project/Src/Project/Solution/Solution.cs +++ b/src/Main/Base/Project/Src/Project/Solution/Solution.cs @@ -23,6 +23,12 @@ namespace ICSharpCode.SharpDevelop.Project string fileName = String.Empty; + public Solution() + { + preferences = new SolutionPreferences(this); + } + + #region Enumerate projects/folders public IProject FindProjectContainingFile(string fileName) { 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)] public bool HasProjects { get { @@ -169,6 +192,16 @@ namespace ICSharpCode.SharpDevelop.Project } } + SolutionPreferences preferences; + + [Browsable(false)] + public SolutionPreferences Preferences { + get { + return preferences; + } + } + #endregion + #region ISolutionFolderContainer implementations [Browsable(false)] public override Solution ParentSolution { @@ -196,30 +229,7 @@ namespace ICSharpCode.SharpDevelop.Project #endregion - SolutionPreferences preferences; - - [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; - } - + #region Save public void Save() { 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) { this.fileName = fileName; @@ -357,7 +361,9 @@ namespace ICSharpCode.SharpDevelop.Project projectSection.Append(Environment.NewLine); } } + #endregion + #region Read/SetupSolution static Regex versionPattern = new Regex("Microsoft Visual Studio Solution File, Format Version\\s+(?.*)", RegexOptions.Compiled); static Regex projectLinePattern = new Regex("Project\\(\"(?.*)\"\\)\\s+=\\s+\"(?.*)\",\\s*\"(?<Location>.*)\",\\s*\"(?<Guid>.*)\"", RegexOptions.Compiled); @@ -501,7 +507,10 @@ namespace ICSharpCode.SharpDevelop.Project } return true; } + #endregion + #region Configuration/Platform management + #region Section management public ProjectSection GetSolutionConfigurationsSection() { foreach (ProjectSection sec in this.Sections) { @@ -610,7 +619,9 @@ namespace ICSharpCode.SharpDevelop.Project } return changed; } + #endregion + #region GetProjectConfigurationsSection/GetPlatformNames public IList<string> GetConfigurationNames() { List<string> configurationNames = new List<string>(); @@ -632,7 +643,9 @@ namespace ICSharpCode.SharpDevelop.Project } return platformNames; } + #endregion + #region Solution - project configuration matching public void ApplySolutionConfigurationAndPlatformToProjects() { foreach (ProjectConfigurationPlatformMatching l in @@ -696,7 +709,50 @@ namespace ICSharpCode.SharpDevelop.Project GetProjectConfigurationsSection().Items.Add(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; public static Solution SolutionBeingLoaded { @@ -740,6 +796,7 @@ namespace ICSharpCode.SharpDevelop.Project solutionBeingLoaded = null; return newSolution; } + #endregion #region System.IDisposable interface implementation public void Dispose() @@ -750,9 +807,12 @@ namespace ICSharpCode.SharpDevelop.Project } #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) diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/AddIn.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/AddIn.cs index b0832829f8..f4cd62d91c 100644 --- a/src/Main/Core/Project/Src/AddInTree/AddIn/AddIn.cs +++ b/src/Main/Core/Project/Src/AddInTree/AddIn/AddIn.cs @@ -53,6 +53,8 @@ namespace ICSharpCode.Core /// <summary> /// 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> public string CustomErrorMessage { get { @@ -149,7 +151,7 @@ namespace ICSharpCode.Core } } - AddIn() + internal AddIn() { } @@ -259,7 +261,7 @@ namespace ICSharpCode.Core return addIn; } } catch (Exception e) { - throw new AddInLoadException("Can't load " + fileName + " " + e); + throw new AddInLoadException("Can't load " + fileName, e); } } } diff --git a/src/Main/Core/Project/Src/AddInTree/AddInTree.cs b/src/Main/Core/Project/Src/AddInTree/AddInTree.cs index 00e693a0f7..fdafad4e7a 100644 --- a/src/Main/Core/Project/Src/AddInTree/AddInTree.cs +++ b/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, AddIn> addInDict = new Dictionary<string, AddIn>(); 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) { list.Add(addIn); continue;