Browse Source

Avoid crash on invalid version numbers in assembly references.

pull/14/head
Daniel Grunwald 15 years ago
parent
commit
4eb879cda0
  1. 2
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/AddComponentsDialog.cs
  2. 8
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/GacReferencePanel.cs
  3. 5
      src/Main/Base/Project/Src/Project/Items/ReferenceProjectItem.cs
  4. 5
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/GacInterop.cs
  5. 8
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/DomAssemblyName.cs

2
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/AddComponentsDialog.cs

@ -47,7 +47,7 @@ namespace ICSharpCode.FormsDesigner.Gui @@ -47,7 +47,7 @@ namespace ICSharpCode.FormsDesigner.Gui
void PrintGACCache()
{
foreach (DomAssemblyName asm in GacInterop.GetAssemblyList()) {
ListViewItem item = new ListViewItem(new string[] {asm.ShortName, asm.Version});
ListViewItem item = new ListViewItem(new string[] {asm.ShortName, asm.Version.ToString()});
item.Tag = asm.FullName;
((ListView)ControlDictionary["gacListView"]).Items.Add(item);
}

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

@ -117,7 +117,7 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -117,7 +117,7 @@ namespace ICSharpCode.SharpDevelop.Gui
ListViewItem lowestVersion = item;
foreach (ListViewItem item2 in fullItemList) {
if (item2.Text == item.Text) {
if (new Version(item2.SubItems[1].Text) < new Version(((DomAssemblyName)lowestVersion.Tag).Version)) {
if (new Version(item2.SubItems[1].Text) < ((DomAssemblyName)lowestVersion.Tag).Version) {
lowestVersion = item2;
}
}
@ -147,7 +147,7 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -147,7 +147,7 @@ namespace ICSharpCode.SharpDevelop.Gui
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});
ListViewItem item = new ListViewItem(new string[] {asm.ShortName, asm.Version.ToString()});
item.Tag = asm;
itemList.Add(item);
}
@ -160,13 +160,13 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -160,13 +160,13 @@ namespace ICSharpCode.SharpDevelop.Gui
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;
itemList[j].SubItems[1].Text += "/" + asm.Version.ToString();
isDuplicate = true;
break;
}
}
if (!isDuplicate) {
ListViewItem item = new ListViewItem(new string[] {asm.ShortName, asm.Version});
ListViewItem item = new ListViewItem(new string[] {asm.ShortName, asm.Version.ToString()});
item.Tag = asm;
itemList.Add(item);
}

5
src/Main/Base/Project/Src/Project/Items/ReferenceProjectItem.cs

@ -122,10 +122,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -122,10 +122,7 @@ namespace ICSharpCode.SharpDevelop.Project
Description="${res:ICSharpCode.SharpDevelop.Internal.Project.ProjectReference.Version.Description}")]
public virtual Version Version {
get {
if (this.AssemblyName.Version == null)
return null;
else
return new Version(this.AssemblyName.Version);
return this.AssemblyName.Version;
}
}

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

@ -74,7 +74,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -74,7 +74,7 @@ namespace ICSharpCode.SharpDevelop.Dom
public static DomAssemblyName FindBestMatchingAssemblyName(DomAssemblyName name)
{
string[] info;
string version = name.Version;
Version requiredVersion = name.Version;
string publicKey = name.PublicKeyToken;
IApplicationContext applicationContext = null;
@ -106,9 +106,8 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -106,9 +106,8 @@ namespace ICSharpCode.SharpDevelop.Dom
string best = null;
Version bestVersion = null;
Version currentVersion;
if (version != null) {
if (requiredVersion != null) {
// use assembly with lowest version higher or equal to required version
Version requiredVersion = new Version(version);
for (int i = 0; i < names.Count; i++) {
info = names[i].Split(',');
currentVersion = new Version(info[1].Substring(info[1].LastIndexOf('=') + 1));

8
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/DomAssemblyName.cs

@ -12,7 +12,8 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -12,7 +12,8 @@ namespace ICSharpCode.SharpDevelop.Dom
public sealed class DomAssemblyName : IEquatable<DomAssemblyName>
{
readonly string fullAssemblyName;
readonly string shortName, version, culture, publicKeyToken;
readonly string shortName, culture, publicKeyToken;
readonly Version version;
public DomAssemblyName(string fullAssemblyName)
{
@ -25,7 +26,8 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -25,7 +26,8 @@ namespace ICSharpCode.SharpDevelop.Dom
if (pos > 0) {
switch (val.Substring(0, pos)) {
case "Version":
version = val.Substring(pos + 1);
string versionText = val.Substring(pos + 1);
Version.TryParse(versionText, out version);
break;
case "Culture":
culture = val.Substring(pos + 1);
@ -46,7 +48,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -46,7 +48,7 @@ namespace ICSharpCode.SharpDevelop.Dom
get { return shortName; }
}
public string Version {
public Version Version {
get { return version; }
}

Loading…
Cancel
Save