diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/ICSharpCode.SharpDevelop.Dom.csproj b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/ICSharpCode.SharpDevelop.Dom.csproj
index c729757248..c3bf9f6e44 100644
--- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/ICSharpCode.SharpDevelop.Dom.csproj
+++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/ICSharpCode.SharpDevelop.Dom.csproj
@@ -88,6 +88,7 @@
+
diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CecilReader.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CecilReader.cs
index a299d4e047..e3b908de64 100644
--- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CecilReader.cs
+++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CecilReader.cs
@@ -24,9 +24,9 @@ namespace ICSharpCode.SharpDevelop.Dom
throw new ArgumentNullException("registry");
LoggingService.Info("Cecil: Load from " + fileName);
AssemblyDefinition asm = AssemblyFactory.GetAssembly(fileName);
- List referencedAssemblies = new List();
+ List referencedAssemblies = new List();
foreach (AssemblyNameReference anr in asm.MainModule.AssemblyReferences) {
- referencedAssemblies.Add(new AssemblyName(anr.FullName));
+ referencedAssemblies.Add(new DomAssemblyName(anr.FullName));
}
return new CecilProjectContent(asm.Name.FullName, fileName, referencedAssemblies.ToArray(), asm.MainModule.Types, registry);
}
@@ -121,7 +121,7 @@ namespace ICSharpCode.SharpDevelop.Dom
private sealed class CecilProjectContent : ReflectionProjectContent
{
- public CecilProjectContent(string fullName, string fileName, AssemblyName[] referencedAssemblies,
+ public CecilProjectContent(string fullName, string fileName, DomAssemblyName[] referencedAssemblies,
TypeDefinitionCollection types, ProjectContentRegistry registry)
: base(fullName, fileName, referencedAssemblies, registry)
{
diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/DomAssemblyName.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/DomAssemblyName.cs
new file mode 100644
index 0000000000..d1ddb78dea
--- /dev/null
+++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/DomAssemblyName.cs
@@ -0,0 +1,39 @@
+//
+//
+//
+//
+// $Revision$
+//
+
+using System;
+
+namespace ICSharpCode.SharpDevelop.Dom
+{
+ ///
+ /// Similar to System.Reflection.AssemblyName, but does not raise an exception
+ /// on invalid assembly names. (See SD2-1307)
+ ///
+ public sealed class DomAssemblyName
+ {
+ readonly string fullAssemblyName;
+
+ public DomAssemblyName(string fullAssemblyName)
+ {
+ this.fullAssemblyName = fullAssemblyName;
+ }
+
+ public string FullName {
+ get { return fullAssemblyName; }
+ }
+
+ internal static DomAssemblyName[] Convert(System.Reflection.AssemblyName[] names)
+ {
+ if (names == null) return null;
+ DomAssemblyName[] n = new DomAssemblyName[names.Length];
+ for (int i = 0; i < names.Length; i++) {
+ n[i] = new DomAssemblyName(names[i].FullName);
+ }
+ return n;
+ }
+ }
+}
diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ProjectContentRegistry.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ProjectContentRegistry.cs
index 0daa866b06..2e0ac70981 100644
--- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ProjectContentRegistry.cs
+++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ProjectContentRegistry.cs
@@ -192,11 +192,17 @@ namespace ICSharpCode.SharpDevelop.Dom
}
}
+ [Obsolete("Use DomAssemblyName instead of AssemblyName")]
public IProjectContent GetExistingProjectContent(AssemblyName assembly)
{
return GetExistingProjectContent(assembly.FullName, assembly.FullName);
}
+ public IProjectContent GetExistingProjectContent(DomAssemblyName assembly)
+ {
+ return GetExistingProjectContent(assembly.FullName, assembly.FullName);
+ }
+
public virtual IProjectContent GetExistingProjectContent(string itemInclude, string itemFileName)
{
if (itemFileName == itemInclude) {
diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ReflectionProjectContent.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ReflectionProjectContent.cs
index 87d9b39fb9..661691f47d 100644
--- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ReflectionProjectContent.cs
+++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ReflectionProjectContent.cs
@@ -18,7 +18,7 @@ namespace ICSharpCode.SharpDevelop.Dom
public class ReflectionProjectContent : DefaultProjectContent
{
string assemblyFullName;
- AssemblyName[] referencedAssemblies;
+ DomAssemblyName[] referencedAssemblyNames;
ICompilationUnit assemblyCompilationUnit;
string assemblyLocation;
ProjectContentRegistry registry;
@@ -35,16 +35,20 @@ namespace ICSharpCode.SharpDevelop.Dom
}
}
+ [Obsolete("This property always returns an empty array! Use ReferencedAssemblyNames instead!")]
public AssemblyName[] ReferencedAssemblies {
- get {
- return referencedAssemblies;
- }
+ get { return new AssemblyName[0]; }
+ }
+
+ ///
+ /// Gets the list of assembly names referenced by this project content.
+ ///
+ public IList ReferencedAssemblyNames {
+ get { return Array.AsReadOnly(referencedAssemblyNames); }
}
public ICompilationUnit AssemblyCompilationUnit {
- get {
- return assemblyCompilationUnit;
- }
+ get { return assemblyCompilationUnit; }
}
DateTime assemblyFileLastWriteTime;
@@ -73,7 +77,7 @@ namespace ICSharpCode.SharpDevelop.Dom
}
public ReflectionProjectContent(Assembly assembly, string assemblyLocation, ProjectContentRegistry registry)
- : this(assembly.FullName, assemblyLocation, assembly.GetReferencedAssemblies(), registry)
+ : this(assembly.FullName, assemblyLocation, DomAssemblyName.Convert(assembly.GetReferencedAssemblies()), registry)
{
foreach (Type type in assembly.GetExportedTypes()) {
string name = type.FullName;
@@ -84,7 +88,13 @@ namespace ICSharpCode.SharpDevelop.Dom
InitializeSpecialClasses();
}
+ [Obsolete("Use DomAssemblyName instead of AssemblyName!")]
public ReflectionProjectContent(string assemblyFullName, string assemblyLocation, AssemblyName[] referencedAssemblies, ProjectContentRegistry registry)
+ : this(assemblyFullName, assemblyLocation, DomAssemblyName.Convert(referencedAssemblies), registry)
+ {
+ }
+
+ public ReflectionProjectContent(string assemblyFullName, string assemblyLocation, DomAssemblyName[] referencedAssemblies, ProjectContentRegistry registry)
{
if (assemblyFullName == null)
throw new ArgumentNullException("assemblyFullName");
@@ -95,7 +105,7 @@ namespace ICSharpCode.SharpDevelop.Dom
this.registry = registry;
this.assemblyFullName = assemblyFullName;
- this.referencedAssemblies = referencedAssemblies;
+ this.referencedAssemblyNames = referencedAssemblies;
this.assemblyLocation = assemblyLocation;
this.assemblyCompilationUnit = new DefaultCompilationUnit(this);
@@ -146,7 +156,7 @@ namespace ICSharpCode.SharpDevelop.Dom
}
bool initialized = false;
- List missingNames;
+ List missingNames;
public void InitializeReferences()
{
@@ -169,7 +179,7 @@ namespace ICSharpCode.SharpDevelop.Dom
}
} else {
initialized = true;
- foreach (AssemblyName name in referencedAssemblies) {
+ foreach (DomAssemblyName name in referencedAssemblyNames) {
IProjectContent content = registry.GetExistingProjectContent(name);
if (content != null) {
changed = true;
@@ -178,7 +188,7 @@ namespace ICSharpCode.SharpDevelop.Dom
}
} else {
if (missingNames == null)
- missingNames = new List();
+ missingNames = new List();
missingNames.Add(name);
}
}
diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ReflectionLayer/DomPersistence.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ReflectionLayer/DomPersistence.cs
index 87e3d0b471..f5c1aa44c6 100644
--- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ReflectionLayer/DomPersistence.cs
+++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ReflectionLayer/DomPersistence.cs
@@ -249,8 +249,8 @@ namespace ICSharpCode.SharpDevelop.Dom
time = File.GetLastWriteTimeUtc(pc.AssemblyLocation).ToFileTime();
} catch {}
writer.Write(time);
- writer.Write(pc.ReferencedAssemblies.Length);
- foreach (AssemblyName name in pc.ReferencedAssemblies) {
+ writer.Write(pc.ReferencedAssemblyNames.Count);
+ foreach (DomAssemblyName name in pc.ReferencedAssemblyNames) {
writer.Write(name.FullName);
}
WriteClasses();
@@ -281,9 +281,9 @@ namespace ICSharpCode.SharpDevelop.Dom
LoggingService.Warn("Read dom: assembly changed since cache was created");
return null;
}
- AssemblyName[] referencedAssemblies = new AssemblyName[reader.ReadInt32()];
+ DomAssemblyName[] referencedAssemblies = new DomAssemblyName[reader.ReadInt32()];
for (int i = 0; i < referencedAssemblies.Length; i++) {
- referencedAssemblies[i] = new AssemblyName(reader.ReadString());
+ referencedAssemblies[i] = new DomAssemblyName(reader.ReadString());
}
this.pc = new ReflectionProjectContent(assemblyName, assemblyLocation, referencedAssemblies, registry);
if (ReadClasses()) {