Browse Source

GacReferencePanel: when the GAC contains multiple versions of an assembly, show the version that MSBuild will use.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2631 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 18 years ago
parent
commit
4423707856
  1. 2
      src/AddIns/Misc/MonoAddIn/Project/MonoAddIn.csproj
  2. 46
      src/AddIns/Misc/MonoAddIn/Project/Src/AddMonoReferenceCommand.cs
  3. 10
      src/AddIns/Misc/MonoAddIn/Project/Src/MonoGacReferencePanel.cs
  4. 311
      src/AddIns/Misc/MonoAddIn/Project/Src/SelectMonoReferenceDialog.cs
  5. 14
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/AssemblyReferencePanel.cs
  6. 8
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/COMReferencePanel.cs
  7. 114
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/GacReferencePanel.cs
  8. 8
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ProjectReferencePanel.cs
  9. 40
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/SelectReferenceDialog.cs
  10. 21
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/GacInterop.cs

2
src/AddIns/Misc/MonoAddIn/Project/MonoAddIn.csproj

@ -45,9 +45,7 @@ @@ -45,9 +45,7 @@
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<Compile Include="Configuration\AssemblyInfo.cs" />
<Compile Include="Src\AddMonoReferenceCommand.cs" />
<Compile Include="Src\IsMonoInstalledCondition.cs" />
<Compile Include="Src\SelectMonoReferenceDialog.cs" />
<Compile Include="Src\MonoGacReferencePanel.cs" />
<Compile Include="..\..\..\..\Main\GlobalAssemblyInfo.cs">
<Link>Configuration\GlobalAssemblyInfo.cs</Link>

46
src/AddIns/Misc/MonoAddIn/Project/Src/AddMonoReferenceCommand.cs

@ -1,46 +0,0 @@ @@ -1,46 +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.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.MonoAddIn
{
/// <summary>
/// Displays the AddMonoReference dialog allowing the user to add
/// a Mono GAC reference to the project
/// </summary>
public class AddMonoReferenceCommand : AbstractMenuCommand
{
public override void Run()
{
AbstractProjectBrowserTreeNode node = Owner as AbstractProjectBrowserTreeNode;
IProject project = (node != null) ? node.Project : ProjectService.CurrentProject;
if (project == null) {
return;
}
using (SelectMonoReferenceDialog selDialog = new SelectMonoReferenceDialog(project)) {
if (selDialog.ShowDialog(ICSharpCode.SharpDevelop.Gui.WorkbenchSingleton.MainForm) == DialogResult.OK) {
/*MonoProjectContentLoader.CreateMonoProjectContent(project);
foreach (ReferenceProjectItem gacReference in selDialog.GacReferences) {
MonoProjectContentLoader.AddGacReference(gacReference.Include);
}*/
foreach (ReferenceProjectItem reference in selDialog.ReferenceInformations) {
ProjectService.AddProjectItem(project, reference);
}
project.Save();
}
}
}
}
}

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

@ -5,10 +5,10 @@ @@ -5,10 +5,10 @@
// <version>$Revision$</version>
// </file>
using ICSharpCode.SharpDevelop.Dom;
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using ICSharpCode.Build.Tasks;
using ICSharpCode.SharpDevelop.Gui;
@ -20,13 +20,11 @@ namespace ICSharpCode.MonoAddIn @@ -20,13 +20,11 @@ namespace ICSharpCode.MonoAddIn
{
}
protected override List<ListViewItem> GetCacheContent()
protected override IList<DomAssemblyName> GetCacheContent()
{
List<ListViewItem> itemList = new List<ListViewItem>();
List<DomAssemblyName> list = new List<DomAssemblyName>();
foreach (MonoAssemblyName assemblyName in MonoGlobalAssemblyCache.GetAssemblyNames()) {
ListViewItem item = new ListViewItem(new string[] {assemblyName.Name, assemblyName.Version.ToString(), assemblyName.Directory});
item.Tag = assemblyName.FullName;
itemList.Add(item);
list.Add(new DomAssemblyName(assemblyName.FullName));
}
return itemList;
}

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

@ -1,311 +0,0 @@ @@ -1,311 +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.Collections;
using System.Collections.Generic;
using System.IO;
using System.Windows.Forms;
using ICSharpCode.Build.Tasks;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.MonoAddIn
{
public class SelectMonoReferenceDialog : System.Windows.Forms.Form, ISelectReferenceDialog
{
private System.Windows.Forms.ListView referencesListView;
private System.Windows.Forms.Button selectButton;
private System.Windows.Forms.Button removeButton;
private System.Windows.Forms.TabPage gacTabPage;
private System.Windows.Forms.TabPage projectTabPage;
private System.Windows.Forms.TabPage browserTabPage;
private System.Windows.Forms.Label referencesLabel;
private System.Windows.Forms.ColumnHeader referenceHeader;
private System.Windows.Forms.ColumnHeader typeHeader;
private System.Windows.Forms.ColumnHeader locationHeader;
private System.Windows.Forms.TabControl referenceTabControl;
private System.Windows.Forms.Button okButton;
private System.Windows.Forms.Button cancelButton;
private System.Windows.Forms.Button helpButton;
private System.ComponentModel.Container components = null;
List<ReferenceProjectItem> gacReferences = new List<ReferenceProjectItem>();
IProject configureProject;
public ArrayList ReferenceInformations {
get {
ArrayList referenceInformations = new ArrayList();
foreach (ListViewItem item in referencesListView.Items) {
System.Diagnostics.Debug.Assert(item.Tag != null);
referenceInformations.Add(item.Tag);
}
return referenceInformations;
}
}
public List<ReferenceProjectItem> GacReferences {
get {
return gacReferences;
}
}
public SelectMonoReferenceDialog(IProject configureProject)
{
this.configureProject = configureProject;
InitializeComponent();
gacTabPage.Controls.Add(new MonoGacReferencePanel(this));
projectTabPage.Controls.Add(new ProjectReferencePanel(this));
browserTabPage.Controls.Add(new AssemblyReferencePanel(this));
}
public void AddReference(ReferenceType referenceType, string referenceName, string referenceLocation, object tag)
{
foreach (ListViewItem item in referencesListView.Items) {
if (referenceLocation == item.SubItems[2].Text && referenceName == item.Text ) {
return;
}
}
ListViewItem newItem = new ListViewItem(new string[] {referenceName, referenceType.ToString(), referenceLocation});
switch (referenceType) {
case ReferenceType.Project:
newItem.Tag = new ProjectReferenceProjectItem(configureProject, (IProject)tag);
break;
case ReferenceType.Gac:
ReferenceProjectItem gacReference = new ReferenceProjectItem(configureProject, referenceLocation);
gacReferences.Add(gacReference);
// Add hint path so we can build against Microsoft's Csc too.
gacReference.HintPath = FileUtility.GetRelativePath(configureProject.Directory, GetAssemblyLocation(referenceLocation));
gacReference.SpecificVersion = false;
newItem.Tag = gacReference;
break;
case ReferenceType.Assembly:
ReferenceProjectItem assemblyReference = new ReferenceProjectItem(configureProject, Path.GetFileNameWithoutExtension(referenceLocation));
assemblyReference.HintPath = FileUtility.GetRelativePath(configureProject.Directory, referenceLocation);
assemblyReference.SpecificVersion = false;
newItem.Tag = assemblyReference;
break;
default:
throw new System.NotSupportedException("Unknown reference type:" + referenceType);
}
referencesListView.Items.Add(newItem);
}
void SelectReference(object sender, EventArgs e)
{
IReferencePanel refPanel = (IReferencePanel)referenceTabControl.SelectedTab.Controls[0];
refPanel.AddReference();
}
void RemoveReference(object sender, EventArgs e)
{
ArrayList itemsToDelete = new ArrayList();
foreach (ListViewItem item in referencesListView.SelectedItems) {
itemsToDelete.Add(item);
}
foreach (ListViewItem item in itemsToDelete) {
referencesListView.Items.Remove(item);
ReferenceProjectItem referenceItem = item.Tag as ReferenceProjectItem;
if (referenceItem != null) {
gacReferences.Remove(referenceItem);
}
}
}
string GetAssemblyLocation(string name)
{
MonoAssemblyName assemblyName = MonoGlobalAssemblyCache.FindAssemblyName(name);
if (assemblyName != null) {
return assemblyName.FileName;
}
return String.Empty;
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose(bool disposing)
{
if (disposing) {
if (components != null) {
components.Dispose();
}
}
base.Dispose( disposing );
}
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.referenceTabControl = new System.Windows.Forms.TabControl();
this.referencesListView = new System.Windows.Forms.ListView();
this.selectButton = new System.Windows.Forms.Button();
this.removeButton = new System.Windows.Forms.Button();
this.gacTabPage = new System.Windows.Forms.TabPage();
this.projectTabPage = new System.Windows.Forms.TabPage();
this.browserTabPage = new System.Windows.Forms.TabPage();
this.referencesLabel = new System.Windows.Forms.Label();
this.referenceHeader = new System.Windows.Forms.ColumnHeader();
this.typeHeader = new System.Windows.Forms.ColumnHeader();
this.locationHeader = new System.Windows.Forms.ColumnHeader();
this.okButton = new System.Windows.Forms.Button();
this.cancelButton = new System.Windows.Forms.Button();
this.helpButton = new System.Windows.Forms.Button();
this.referenceTabControl.SuspendLayout();
this.SuspendLayout();
//
// referenceTabControl
//
this.referenceTabControl.Controls.AddRange(new System.Windows.Forms.Control[] {
this.gacTabPage,
this.projectTabPage,
this.browserTabPage,
});
this.referenceTabControl.Location = new System.Drawing.Point(8, 8);
this.referenceTabControl.SelectedIndex = 0;
this.referenceTabControl.Size = new System.Drawing.Size(472, 224);
this.referenceTabControl.TabIndex = 0;
//
// referencesListView
//
this.referencesListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.referenceHeader,
this.typeHeader,
this.locationHeader});
this.referencesListView.Location = new System.Drawing.Point(8, 256);
this.referencesListView.Size = new System.Drawing.Size(472, 97);
this.referencesListView.TabIndex = 3;
this.referencesListView.View = System.Windows.Forms.View.Details;
this.referencesListView.FullRowSelect = true;
//
// selectButton
//
this.selectButton.Location = new System.Drawing.Point(488, 32);
this.selectButton.TabIndex = 1;
this.selectButton.Text = ResourceService.GetString("Dialog.SelectReferenceDialog.SelectButton");
this.selectButton.Click += new EventHandler(SelectReference);
this.selectButton.FlatStyle = FlatStyle.System;
//
// removeButton
//
this.removeButton.Location = new System.Drawing.Point(488, 256);
this.removeButton.TabIndex = 4;
this.removeButton.Text = ResourceService.GetString("Global.RemoveButtonText");
this.removeButton.Click += new EventHandler(RemoveReference);
this.removeButton.FlatStyle = FlatStyle.System;
//
// gacTabPage
//
this.gacTabPage.Location = new System.Drawing.Point(4, 22);
this.gacTabPage.Size = new System.Drawing.Size(464, 198);
this.gacTabPage.TabIndex = 0;
this.gacTabPage.Text = ResourceService.GetString("Dialog.SelectReferenceDialog.GacTabPage");
this.gacTabPage.UseVisualStyleBackColor = true;
//
// projectTabPage
//
this.projectTabPage.Location = new System.Drawing.Point(4, 22);
this.projectTabPage.Size = new System.Drawing.Size(464, 198);
this.projectTabPage.TabIndex = 1;
this.projectTabPage.Text = ResourceService.GetString("Dialog.SelectReferenceDialog.ProjectTabPage");
this.projectTabPage.UseVisualStyleBackColor = true;
//
// browserTabPage
//
this.browserTabPage.Location = new System.Drawing.Point(4, 22);
this.browserTabPage.Size = new System.Drawing.Size(464, 198);
this.browserTabPage.TabIndex = 2;
this.browserTabPage.Text = ResourceService.GetString("Dialog.SelectReferenceDialog.BrowserTabPage");
this.browserTabPage.UseVisualStyleBackColor = true;
//
// referencesLabel
//
this.referencesLabel.Location = new System.Drawing.Point(8, 240);
this.referencesLabel.Size = new System.Drawing.Size(472, 16);
this.referencesLabel.TabIndex = 2;
this.referencesLabel.Text = ResourceService.GetString("Dialog.SelectReferenceDialog.ReferencesLabel");
//
// referenceHeader
//
this.referenceHeader.Text = ResourceService.GetString("Dialog.SelectReferenceDialog.ReferenceHeader");
this.referenceHeader.Width = 183;
//
// typeHeader
//
this.typeHeader.Text = ResourceService.GetString("Dialog.SelectReferenceDialog.TypeHeader");
this.typeHeader.Width = 57;
//
// locationHeader
//
this.locationHeader.Text = ResourceService.GetString("Dialog.SelectReferenceDialog.LocationHeader");
this.locationHeader.Width = 228;
//
// okButton
//
this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK;
this.okButton.Location = new System.Drawing.Point(312, 368);
this.okButton.TabIndex = 5;
this.okButton.Text = ResourceService.GetString("Global.OKButtonText");
this.okButton.FlatStyle = FlatStyle.System;
//
// cancelButton
//
this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.cancelButton.Location = new System.Drawing.Point(400, 368);
this.cancelButton.TabIndex = 6;
this.cancelButton.Text = ResourceService.GetString("Global.CancelButtonText");
this.cancelButton.FlatStyle = FlatStyle.System;
//
// helpButton
//
this.helpButton.Location = new System.Drawing.Point(488, 368);
this.helpButton.TabIndex = 7;
this.helpButton.Text = ResourceService.GetString("Global.HelpButtonText");
this.helpButton.FlatStyle = FlatStyle.System;
//
// SelectReferenceDialog
//
this.AcceptButton = this.okButton;
this.CancelButton = this.cancelButton;
this.ClientSize = new System.Drawing.Size(570, 399);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.helpButton,
this.cancelButton,
this.okButton,
this.referencesLabel,
this.removeButton,
this.selectButton,
this.referencesListView,
this.referenceTabControl});
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.ShowInTaskbar = false;
this.Text = ResourceService.GetString("Dialog.SelectReferenceDialog.DialogName");
this.referenceTabControl.ResumeLayout(false);
this.ResumeLayout(false);
}
}
}

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

@ -9,7 +9,7 @@ using System; @@ -9,7 +9,7 @@ using System;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.Core;
namespace ICSharpCode.SharpDevelop.Gui
@ -42,11 +42,15 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -42,11 +42,15 @@ namespace ICSharpCode.SharpDevelop.Gui
if (fdiag.ShowDialog(ICSharpCode.SharpDevelop.Gui.WorkbenchSingleton.MainForm) == DialogResult.OK) {
foreach (string file in fdiag.FileNames) {
selectDialog.AddReference(ReferenceType.Assembly,
Path.GetFileName(file),
file,
null);
ReferenceProjectItem assemblyReference = new ReferenceProjectItem(selectDialog.ConfigureProject);
assemblyReference.Include = Path.GetFileNameWithoutExtension(file);
assemblyReference.HintPath = FileUtility.GetRelativePath(selectDialog.ConfigureProject.Directory, file);
assemblyReference.SpecificVersion = false;
selectDialog.AddReference(
Path.GetFileName(file), "Assembly", file,
assemblyReference
);
}
}
}

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

@ -44,10 +44,10 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -44,10 +44,10 @@ namespace ICSharpCode.SharpDevelop.Gui
{
foreach (ListViewItem item in SelectedItems) {
TypeLibrary library = (TypeLibrary)item.Tag;
selectDialog.AddReference(ReferenceType.Typelib,
library.Name,
library.Path,
library);
selectDialog.AddReference(
library.Name, "Typelib", library.Path,
new ComReferenceProjectItem(selectDialog.ConfigureProject, library)
);
}
}

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

@ -7,10 +7,13 @@ @@ -7,10 +7,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.SharpDevelop.Gui
{
@ -59,21 +62,16 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -59,21 +62,16 @@ namespace ICSharpCode.SharpDevelop.Gui
ColumnHeader referenceHeader = new ColumnHeader();
referenceHeader.Text = ResourceService.GetString("Dialog.SelectReferenceDialog.GacReferencePanel.ReferenceHeader");
referenceHeader.Width = 180;
referenceHeader.Width = 240;
listView.Columns.Add(referenceHeader);
listView.Sorting = SortOrder.Ascending;
ColumnHeader versionHeader = new ColumnHeader();
versionHeader.Text = ResourceService.GetString("Dialog.SelectReferenceDialog.GacReferencePanel.VersionHeader");
versionHeader.Width = 70;
versionHeader.Width = 120;
listView.Columns.Add(versionHeader);
ColumnHeader pathHeader = new ColumnHeader();
pathHeader.Text = ResourceService.GetString("Global.Path");
pathHeader.Width = 100;
listView.Columns.Add(pathHeader);
listView.View = View.Details;
listView.FullRowSelect = true;
listView.ItemActivate += delegate { AddReference(); };
@ -109,14 +107,15 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -109,14 +107,15 @@ namespace ICSharpCode.SharpDevelop.Gui
public void AddReference()
{
foreach (ListViewItem item in listView.SelectedItems) {
selectDialog.AddReference(ReferenceType.Gac,
item.Text,
chooseSpecificVersionCheckBox.Checked ? item.Tag.ToString() : item.Text,
null);
selectDialog.AddReference(
item.Text, "Gac", item.Tag.ToString(),
new ReferenceProjectItem(selectDialog.ConfigureProject, item.Tag.ToString())
);
}
}
ListViewItem[] fullItemList;
/// <summary>
/// Item list where older versions are filtered out.
/// </summary>
@ -124,30 +123,93 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -124,30 +123,93 @@ namespace ICSharpCode.SharpDevelop.Gui
void PrintCache()
{
List<ListViewItem> itemList = GetCacheContent();
IList<DomAssemblyName> cacheContent = GetCacheContent();
List<ListViewItem> itemList = new List<ListViewItem>();
// Create full item list
foreach (DomAssemblyName asm in cacheContent) {
ListViewItem item = new ListViewItem(new string[] {asm.ShortName, asm.Version});
item.Tag = asm.FullName;
itemList.Add(item);
}
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);
});
});
// Create short item list (without multiple versions)
itemList.Clear();
for (int i = 0; i < cacheContent.Count; i++) {
DomAssemblyName asm = cacheContent[i];
bool isDuplicate = false;
for (int j = 0; j < itemList.Count; j++) {
if (string.Equals(asm.ShortName, itemList[j].Text, StringComparison.OrdinalIgnoreCase)) {
itemList[j].SubItems[1].Text += "/" + asm.Version;
isDuplicate = true;
break;
}
}
if (!isDuplicate) {
ListViewItem item = new ListViewItem(new string[] {asm.ShortName, asm.Version});
item.Tag = asm.ShortName;
itemList.Add(item);
}
}
shortItemList = itemList.ToArray();
listView.Items.AddRange(shortItemList);
Thread resolveVersionsThread = new Thread(ResolveVersionsWorker);
resolveVersionsThread.SetApartmentState(ApartmentState.STA);
resolveVersionsThread.IsBackground = true;
resolveVersionsThread.Name = "resolveVersionsThread";
resolveVersionsThread.Priority = ThreadPriority.BelowNormal;
resolveVersionsThread.Start();
}
protected virtual List<ListViewItem> GetCacheContent()
void ResolveVersionsThread()
{
List<ListViewItem> itemList = new List<ListViewItem>();
foreach (GacInterop.AssemblyListEntry asm in GacInterop.GetAssemblyList()) {
ListViewItem item = new ListViewItem(new string[] {asm.Name, asm.Version});
item.Tag = asm.FullName;
itemList.Add(item);
try {
ResolveVersionsWorker();
} catch (Exception ex) {
MessageService.ShowError(ex);
}
}
void ResolveVersionsWorker()
{
MSBuildBasedProject project = selectDialog.ConfigureProject as MSBuildBasedProject;
if (project == null)
return;
List<ListViewItem> itemsToResolveVersion = new List<ListViewItem>();
List<ReferenceProjectItem> referenceItems = new List<ReferenceProjectItem>();
WorkbenchSingleton.SafeThreadCall(
delegate {
foreach (ListViewItem item in shortItemList) {
if (item.SubItems[1].Text.Contains("/")) {
itemsToResolveVersion.Add(item);
referenceItems.Add(new ReferenceProjectItem(project, item.Text));
}
}
});
MSBuildInternals.ResolveAssemblyReferences(project, referenceItems.ToArray());
WorkbenchSingleton.SafeThreadAsyncCall(
delegate {
if (IsDisposed) return;
for (int i = 0; i < itemsToResolveVersion.Count; i++) {
if (referenceItems[i].Version != null) {
itemsToResolveVersion[i].SubItems[1].Text = referenceItems[i].Version.ToString();
}
}
return itemList;
});
}
protected virtual IList<DomAssemblyName> GetCacheContent()
{
List<DomAssemblyName> list = GacInterop.GetAssemblyList();
list.RemoveAll(name => name.ShortName.ToLowerInvariant().EndsWith(".resources"));
return list;
}
}
}

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

@ -44,10 +44,10 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -44,10 +44,10 @@ namespace ICSharpCode.SharpDevelop.Gui
IProject project = (IProject)item.Tag;
ILanguageBinding binding = LanguageBindingService.GetBindingPerLanguageName(project.Language);
selectDialog.AddReference(ReferenceType.Project,
project.Name,
project.OutputAssemblyFullPath,
project);
selectDialog.AddReference(
project.Name, "Project", project.OutputAssemblyFullPath,
new ProjectReferenceProjectItem(selectDialog.ConfigureProject, project)
);
}
}

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

@ -22,7 +22,12 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -22,7 +22,12 @@ namespace ICSharpCode.SharpDevelop.Gui
public interface ISelectReferenceDialog
{
void AddReference(ReferenceType referenceType, string referenceName, string referenceLocation, object tag);
/// <summary>
/// Project to create references for.
/// </summary>
IProject ConfigureProject { get; }
void AddReference(string referenceName, string referenceType, string referenceLocation, ReferenceProjectItem projectItem);
}
public enum ReferenceType {
@ -60,6 +65,10 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -60,6 +65,10 @@ namespace ICSharpCode.SharpDevelop.Gui
IProject configureProject;
public IProject ConfigureProject {
get { return configureProject; }
}
public ArrayList ReferenceInformations {
get {
ArrayList referenceInformations = new ArrayList();
@ -84,36 +93,19 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -84,36 +93,19 @@ namespace ICSharpCode.SharpDevelop.Gui
comTabPage.Controls.Add(new COMReferencePanel(this));
}
public void AddReference(ReferenceType referenceType, string referenceName, string referenceLocation, object tag)
public void AddReference(string referenceName, string referenceType, string referenceLocation, ReferenceProjectItem projectItem)
{
if (projectItem == null)
throw new ArgumentNullException("projectItem");
foreach (ListViewItem item in referencesListView.Items) {
if (referenceLocation == item.SubItems[2].Text && referenceName == item.Text ) {
return;
}
}
ListViewItem newItem = new ListViewItem(new string[] {referenceName, referenceType.ToString(), referenceLocation});
switch (referenceType) {
case ReferenceType.Typelib:
newItem.Tag = new ComReferenceProjectItem(configureProject, (TypeLibrary)tag);
break;
case ReferenceType.Project:
newItem.Tag = new ProjectReferenceProjectItem(configureProject, (IProject)tag);
break;
case ReferenceType.Gac:
newItem.Tag = new ReferenceProjectItem(configureProject, referenceLocation);
break;
case ReferenceType.Assembly:
ReferenceProjectItem assemblyReference = new ReferenceProjectItem(configureProject);
assemblyReference.Include = Path.GetFileNameWithoutExtension(referenceLocation);
assemblyReference.HintPath = FileUtility.GetRelativePath(configureProject.Directory, referenceLocation);
assemblyReference.SpecificVersion = false;
newItem.Tag = assemblyReference;
break;
default:
throw new System.NotSupportedException("Unknown reference type:" + referenceType);
}
ListViewItem newItem = new ListViewItem(new string[] {referenceName, referenceType, referenceLocation});
newItem.Tag = projectItem;
referencesListView.Items.Add(newItem);
}

21
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/GacInterop.cs

@ -31,28 +31,13 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -31,28 +31,13 @@ namespace ICSharpCode.SharpDevelop.Dom
}
}
public sealed class AssemblyListEntry
{
public readonly string FullName;
public readonly string Name;
public readonly string Version;
internal AssemblyListEntry(string fullName)
{
this.FullName = fullName;
string[] info = fullName.Split(',');
this.Name = info[0];
this.Version = info[1].Substring(info[1].LastIndexOf('=') + 1);
}
}
public static List<AssemblyListEntry> GetAssemblyList()
public static List<DomAssemblyName> GetAssemblyList()
{
IApplicationContext applicationContext = null;
IAssemblyEnum assemblyEnum = null;
IAssemblyName assemblyName = null;
List<AssemblyListEntry> l = new List<AssemblyListEntry>();
List<DomAssemblyName> l = new List<DomAssemblyName>();
Fusion.CreateAssemblyEnum(out assemblyEnum, null, null, 2, 0);
while (assemblyEnum.GetNextAssembly(out applicationContext, out assemblyName, 0) == 0) {
uint nChars = 0;
@ -61,7 +46,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -61,7 +46,7 @@ namespace ICSharpCode.SharpDevelop.Dom
StringBuilder sb = new StringBuilder((int)nChars);
assemblyName.GetDisplayName(sb, ref nChars, 0);
l.Add(new AssemblyListEntry(sb.ToString()));
l.Add(new DomAssemblyName(sb.ToString()));
}
return l;
}

Loading…
Cancel
Save