Browse Source

Fixed SD2-580: Adding GAC reference to standard .NET assemblies adds full assembly name to project

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1096 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
1893856800
  1. 6
      src/AddIns/Misc/MonoAddIn/Project/Src/MonoGacReferencePanel.cs
  2. 2
      src/AddIns/Misc/MonoAddIn/Project/Src/SelectMonoReferenceDialog.cs
  3. 2
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/AssemblyReferencePanel.cs
  4. 4
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/COMReferencePanel.cs
  5. 93
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/GacReferencePanel.cs
  6. 4
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ProjectReferencePanel.cs
  7. 66
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/SelectReferenceDialog.cs

6
src/AddIns/Misc/MonoAddIn/Project/Src/MonoGacReferencePanel.cs

@ -18,13 +18,15 @@ namespace ICSharpCode.MonoAddIn
{ {
} }
protected override void PrintCache() protected override List<ListViewItem> GetCacheContent()
{ {
List<ListViewItem> itemList = new List<ListViewItem>();
foreach (MonoAssemblyName assemblyName in MonoGlobalAssemblyCache.GetAssemblyNames()) { foreach (MonoAssemblyName assemblyName in MonoGlobalAssemblyCache.GetAssemblyNames()) {
ListViewItem item = new ListViewItem(new string[] {assemblyName.Name, assemblyName.Version.ToString(), assemblyName.Directory}); ListViewItem item = new ListViewItem(new string[] {assemblyName.Name, assemblyName.Version.ToString(), assemblyName.Directory});
item.Tag = assemblyName.FullName; item.Tag = assemblyName.FullName;
Items.Add(item); itemList.Add(item);
} }
return itemList;
} }
} }
} }

2
src/AddIns/Misc/MonoAddIn/Project/Src/SelectMonoReferenceDialog.cs

@ -107,7 +107,7 @@ namespace ICSharpCode.MonoAddIn
void SelectReference(object sender, EventArgs e) void SelectReference(object sender, EventArgs e)
{ {
IReferencePanel refPanel = (IReferencePanel)referenceTabControl.SelectedTab.Controls[0]; IReferencePanel refPanel = (IReferencePanel)referenceTabControl.SelectedTab.Controls[0];
refPanel.AddReference(null, null); refPanel.AddReference();
} }
void RemoveReference(object sender, EventArgs e) void RemoveReference(object sender, EventArgs e)

2
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/AssemblyReferencePanel.cs

@ -56,7 +56,7 @@ namespace ICSharpCode.SharpDevelop.Gui
} }
} }
public void AddReference(object sender, EventArgs e) public void AddReference()
{ {
SelectReferenceDialog(null, null); SelectReferenceDialog(null, null);
} }

4
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/COMReferencePanel.cs

@ -46,11 +46,11 @@ namespace ICSharpCode.SharpDevelop.Gui
Dock = DockStyle.Fill; Dock = DockStyle.Fill;
FullRowSelect = true; FullRowSelect = true;
ItemActivate += new EventHandler(AddReference); ItemActivate += delegate { AddReference(); };
PopulateListView(); PopulateListView();
} }
public void AddReference(object sender, EventArgs e) public void AddReference()
{ {
foreach (ListViewItem item in SelectedItems) { foreach (ListViewItem item in SelectedItems) {
TypeLibrary library = (TypeLibrary)item.Tag; TypeLibrary library = (TypeLibrary)item.Tag;

93
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/GacReferencePanel.cs

@ -8,7 +8,7 @@
using System; using System;
using System.Text; using System.Text;
using System.Drawing; using System.Drawing;
using System.Collections; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
using System.Windows.Forms; using System.Windows.Forms;
using MSjogren.GacTool.FusionNative; using MSjogren.GacTool.FusionNative;
@ -18,10 +18,9 @@ using ICSharpCode.Core;
namespace ICSharpCode.SharpDevelop.Gui namespace ICSharpCode.SharpDevelop.Gui
{ {
public class GacReferencePanel : ListView, IReferencePanel public class GacReferencePanel : UserControl, IReferencePanel
{ {
class ColumnSorter : System.Collections.IComparer
class ColumnSorter : IComparer
{ {
private int column = 0; private int column = 0;
bool asc = true; bool asc = true;
@ -49,72 +48,113 @@ namespace ICSharpCode.SharpDevelop.Gui
} }
} }
protected ListView listView;
CheckBox chooseSpecificVersionCheckBox;
ISelectReferenceDialog selectDialog; ISelectReferenceDialog selectDialog;
ColumnSorter sorter; ColumnSorter sorter;
public GacReferencePanel(ISelectReferenceDialog selectDialog) public GacReferencePanel(ISelectReferenceDialog selectDialog)
{ {
listView = new ListView();
sorter = new ColumnSorter(); sorter = new ColumnSorter();
this.ListViewItemSorter = sorter; listView.ListViewItemSorter = sorter;
this.selectDialog = selectDialog; this.selectDialog = selectDialog;
ColumnHeader referenceHeader = new ColumnHeader(); ColumnHeader referenceHeader = new ColumnHeader();
referenceHeader.Text = ResourceService.GetString("Dialog.SelectReferenceDialog.GacReferencePanel.ReferenceHeader"); referenceHeader.Text = ResourceService.GetString("Dialog.SelectReferenceDialog.GacReferencePanel.ReferenceHeader");
referenceHeader.Width = 160; referenceHeader.Width = 180;
Columns.Add(referenceHeader); listView.Columns.Add(referenceHeader);
Sorting = SortOrder.Ascending; listView.Sorting = SortOrder.Ascending;
ColumnHeader versionHeader = new ColumnHeader(); ColumnHeader versionHeader = new ColumnHeader();
versionHeader.Text = ResourceService.GetString("Dialog.SelectReferenceDialog.GacReferencePanel.VersionHeader"); versionHeader.Text = ResourceService.GetString("Dialog.SelectReferenceDialog.GacReferencePanel.VersionHeader");
versionHeader.Width = 70; versionHeader.Width = 70;
Columns.Add(versionHeader); listView.Columns.Add(versionHeader);
ColumnHeader pathHeader = new ColumnHeader(); ColumnHeader pathHeader = new ColumnHeader();
pathHeader.Text = ResourceService.GetString("Global.Path"); pathHeader.Text = ResourceService.GetString("Global.Path");
pathHeader.Width = 100; pathHeader.Width = 100;
Columns.Add(pathHeader); listView.Columns.Add(pathHeader);
listView.View = View.Details;
listView.FullRowSelect = true;
listView.ItemActivate += delegate { AddReference(); };
listView.ColumnClick += new ColumnClickEventHandler(columnClick);
listView.Dock = DockStyle.Fill;
this.Dock = DockStyle.Fill;
this.Controls.Add(listView);
chooseSpecificVersionCheckBox = new CheckBox();
chooseSpecificVersionCheckBox.Dock = DockStyle.Top;
chooseSpecificVersionCheckBox.Text = StringParser.Parse("${res:Dialog.SelectReferenceDialog.GacReferencePanel.ChooseSpecificAssemblyVersion}");
this.Controls.Add(chooseSpecificVersionCheckBox);
chooseSpecificVersionCheckBox.CheckedChanged += delegate {
listView.Items.Clear();
if (chooseSpecificVersionCheckBox.Checked)
listView.Items.AddRange(fullItemList);
else
listView.Items.AddRange(shortItemList);
};
View = View.Details;
Dock = DockStyle.Fill;
FullRowSelect = true;
ItemActivate += new EventHandler(AddReference);
ColumnClick += new ColumnClickEventHandler(columnClick);
PrintCache(); PrintCache();
} }
void columnClick(object sender, ColumnClickEventArgs e) void columnClick(object sender, ColumnClickEventArgs e)
{ {
if(e.Column < 2) if(e.Column < 2) {
{
sorter.CurrentColumn = e.Column; sorter.CurrentColumn = e.Column;
Sort(); listView.Sort();
} }
} }
public void AddReference(object sender, EventArgs e) public void AddReference()
{ {
foreach (ListViewItem item in SelectedItems) { foreach (ListViewItem item in listView.SelectedItems) {
selectDialog.AddReference(ReferenceType.Gac, selectDialog.AddReference(ReferenceType.Gac,
item.Text, item.Text,
item.Tag.ToString(), chooseSpecificVersionCheckBox.Checked ? item.Tag.ToString() : item.Text,
null); null);
} }
} }
ListViewItem[] fullItemList;
/// <summary>
/// Item list where older versions are filtered out.
/// </summary>
ListViewItem[] shortItemList;
protected virtual void PrintCache() void PrintCache()
{
List<ListViewItem> itemList = GetCacheContent();
fullItemList = itemList.ToArray();
// Remove all items where a higher version exists
itemList.RemoveAll(delegate(ListViewItem item) {
return itemList.Exists(delegate(ListViewItem item2) {
return string.Equals(item.Text, item2.Text, StringComparison.OrdinalIgnoreCase)
&& new Version(item.SubItems[1].Text) < new Version(item2.SubItems[1].Text);
});
});
shortItemList = itemList.ToArray();
listView.Items.AddRange(shortItemList);
}
protected virtual List<ListViewItem> GetCacheContent()
{ {
IApplicationContext applicationContext = null; IApplicationContext applicationContext = null;
IAssemblyEnum assemblyEnum = null; IAssemblyEnum assemblyEnum = null;
IAssemblyName assemblyName = null; IAssemblyName assemblyName = null;
List<ListViewItem> itemList = new List<ListViewItem>();
Fusion.CreateAssemblyEnum(out assemblyEnum, null, null, 2, 0); Fusion.CreateAssemblyEnum(out assemblyEnum, null, null, 2, 0);
while (assemblyEnum.GetNextAssembly(out applicationContext, out assemblyName, 0) == 0) { while (assemblyEnum.GetNextAssembly(out applicationContext, out assemblyName, 0) == 0) {
uint nChars = 0; uint nChars = 0;
assemblyName.GetDisplayName(null, ref nChars, 0); assemblyName.GetDisplayName(null, ref nChars, 0);
StringBuilder sb = new StringBuilder((int)nChars); StringBuilder sb = new StringBuilder((int)nChars);
assemblyName.GetDisplayName(sb, ref nChars, 0); assemblyName.GetDisplayName(sb, ref nChars, 0);
@ -124,8 +164,9 @@ namespace ICSharpCode.SharpDevelop.Gui
string aVersion = info[1].Substring(info[1].LastIndexOf('=') + 1); string aVersion = info[1].Substring(info[1].LastIndexOf('=') + 1);
ListViewItem item = new ListViewItem(new string[] {aName, aVersion}); ListViewItem item = new ListViewItem(new string[] {aName, aVersion});
item.Tag = sb.ToString(); item.Tag = sb.ToString();
Items.Add(item); itemList.Add(item);
} }
return itemList;
} }
} }
} }

4
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ProjectReferencePanel.cs

@ -38,11 +38,11 @@ namespace ICSharpCode.SharpDevelop.Gui
Dock = DockStyle.Fill; Dock = DockStyle.Fill;
FullRowSelect = true; FullRowSelect = true;
ItemActivate += new EventHandler(AddReference); ItemActivate += delegate { AddReference(); };
PopulateListView(); PopulateListView();
} }
public void AddReference(object sender, EventArgs e) public void AddReference()
{ {
foreach (ListViewItem item in SelectedItems) { foreach (ListViewItem item in SelectedItems) {
IProject project = (IProject)item.Tag; IProject project = (IProject)item.Tag;

66
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/SelectReferenceDialog.cs

@ -20,7 +20,7 @@ namespace ICSharpCode.SharpDevelop.Gui
{ {
public interface IReferencePanel public interface IReferencePanel
{ {
void AddReference(object sender, EventArgs e); void AddReference();
} }
public interface ISelectReferenceDialog public interface ISelectReferenceDialog
@ -95,27 +95,6 @@ namespace ICSharpCode.SharpDevelop.Gui
} }
} }
// foreach (ProjectReference refInfo in configureProject.ProjectReferences) {
// if (refInfo.ReferenceType == referenceType) {
// switch (referenceType) {
// case ReferenceType.Typelib:
// case ReferenceType.Gac:
// case ReferenceType.Assembly:
// if (refInfo.Reference == referenceLocation) {
// return;
// }
// break;
// case ReferenceType.Project:
// if (refInfo.Reference == referenceName) {
// return;
// }
// break;
// default:
// System.Diagnostics.Debug.Assert(false, "Unknown reference type" + referenceType);
// break;
// }
// }
// }
ListViewItem newItem = new ListViewItem(new string[] {referenceName, referenceType.ToString(), referenceLocation}); ListViewItem newItem = new ListViewItem(new string[] {referenceName, referenceType.ToString(), referenceLocation});
switch (referenceType) { switch (referenceType) {
case ReferenceType.Typelib: case ReferenceType.Typelib:
@ -146,7 +125,14 @@ namespace ICSharpCode.SharpDevelop.Gui
void SelectReference(object sender, EventArgs e) void SelectReference(object sender, EventArgs e)
{ {
IReferencePanel refPanel = (IReferencePanel)referenceTabControl.SelectedTab.Controls[0]; IReferencePanel refPanel = (IReferencePanel)referenceTabControl.SelectedTab.Controls[0];
refPanel.AddReference(null, null); refPanel.AddReference();
}
void OkButtonClick(object sender, EventArgs e)
{
if (referencesListView.Items.Count == 0) {
SelectReference(sender, e);
}
} }
void RemoveReference(object sender, EventArgs e) void RemoveReference(object sender, EventArgs e)
@ -201,11 +187,11 @@ namespace ICSharpCode.SharpDevelop.Gui
// referenceTabControl // referenceTabControl
// //
this.referenceTabControl.Controls.AddRange(new System.Windows.Forms.Control[] { this.referenceTabControl.Controls.AddRange(new System.Windows.Forms.Control[] {
this.gacTabPage, this.gacTabPage,
this.projectTabPage, this.projectTabPage,
this.browserTabPage, this.browserTabPage,
this.comTabPage this.comTabPage
}); });
this.referenceTabControl.Location = new System.Drawing.Point(8, 8); this.referenceTabControl.Location = new System.Drawing.Point(8, 8);
this.referenceTabControl.SelectedIndex = 0; this.referenceTabControl.SelectedIndex = 0;
this.referenceTabControl.Size = new System.Drawing.Size(472, 224); this.referenceTabControl.Size = new System.Drawing.Size(472, 224);
@ -214,9 +200,9 @@ namespace ICSharpCode.SharpDevelop.Gui
// referencesListView // referencesListView
// //
this.referencesListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { this.referencesListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.referenceHeader, this.referenceHeader,
this.typeHeader, this.typeHeader,
this.locationHeader}); this.locationHeader});
this.referencesListView.Location = new System.Drawing.Point(8, 256); this.referencesListView.Location = new System.Drawing.Point(8, 256);
this.referencesListView.Size = new System.Drawing.Size(472, 97); this.referencesListView.Size = new System.Drawing.Size(472, 97);
this.referencesListView.TabIndex = 3; this.referencesListView.TabIndex = 3;
@ -302,7 +288,7 @@ namespace ICSharpCode.SharpDevelop.Gui
this.okButton.Location = new System.Drawing.Point(312, 368); this.okButton.Location = new System.Drawing.Point(312, 368);
this.okButton.TabIndex = 5; this.okButton.TabIndex = 5;
this.okButton.Text = ResourceService.GetString("Global.OKButtonText"); this.okButton.Text = ResourceService.GetString("Global.OKButtonText");
this.okButton.FlatStyle = FlatStyle.System; this.okButton.Click += OkButtonClick;
// //
// cancelButton // cancelButton
@ -329,14 +315,14 @@ namespace ICSharpCode.SharpDevelop.Gui
this.CancelButton = this.cancelButton; this.CancelButton = this.cancelButton;
this.ClientSize = new System.Drawing.Size(570, 399); this.ClientSize = new System.Drawing.Size(570, 399);
this.Controls.AddRange(new System.Windows.Forms.Control[] { this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.helpButton, this.helpButton,
this.cancelButton, this.cancelButton,
this.okButton, this.okButton,
this.referencesLabel, this.referencesLabel,
this.removeButton, this.removeButton,
this.selectButton, this.selectButton,
this.referencesListView, this.referencesListView,
this.referenceTabControl}); this.referenceTabControl});
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false; this.MaximizeBox = false;
this.MinimizeBox = false; this.MinimizeBox = false;

Loading…
Cancel
Save