diff --git a/src/Main/Base/Project/Src/Services/ParserService/DomHostCallback.cs b/src/Main/Base/Project/Src/Services/ParserService/DomHostCallback.cs index 202ca51f2b..12a51a0b4c 100644 --- a/src/Main/Base/Project/Src/Services/ParserService/DomHostCallback.cs +++ b/src/Main/Base/Project/Src/Services/ParserService/DomHostCallback.cs @@ -6,6 +6,8 @@ // using System; +using System.IO; +using Microsoft.Win32; using ICSharpCode.Core; using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Gui; @@ -45,6 +47,13 @@ namespace ICSharpCode.SharpDevelop }; HostCallback.InitializeCodeGeneratorOptions = AmbienceService.InitializeCodeGeneratorOptions; + + string dir = WinFXReferenceDirectory; + if (!string.IsNullOrEmpty(dir)) + XmlDoc.XmlDocLookupDirectories.Add(dir); + dir = XNAReferenceDirectory; + if (!string.IsNullOrEmpty(dir)) + XmlDoc.XmlDocLookupDirectories.Add(dir); } static void ShowAssemblyLoadError(string fileName, string include, string message) @@ -57,5 +66,33 @@ namespace ICSharpCode.SharpDevelop ) + "\r\n" + message + "\r\n" ); } + + static string WinFXReferenceDirectory { + get { + RegistryKey k = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0\Setup\Windows Communication Foundation"); + if (k == null) + return null; + object o = k.GetValue("ReferenceInstallPath"); + k.Close(); + if (o == null) + return null; + else + return o.ToString(); + } + } + + static string XNAReferenceDirectory { + get { + RegistryKey k = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\XNA\Game Studio Express\v1.0"); + if (k == null) + return null; + object o = k.GetValue("InstallPath"); + k.Close(); + if (o == null) + return null; + else + return Path.Combine(o.ToString(), @"References\Windows\x86"); + } + } } } 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 661691f47d..4b1f5706a9 100644 --- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ReflectionProjectContent.cs +++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ReflectionProjectContent.cs @@ -9,7 +9,6 @@ using System; using System.Collections.Generic; using System.IO; using System.Reflection; -using Microsoft.Win32; using ICSharpCode.SharpDevelop.Dom.ReflectionLayer; @@ -116,16 +115,12 @@ namespace ICSharpCode.SharpDevelop.Dom } string fileName = LookupLocalizedXmlDoc(assemblyLocation); - // Not found -> look in runtime directory. if (fileName == null) { - string runtimeDirectory = System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory(); - fileName = LookupLocalizedXmlDoc(Path.Combine(runtimeDirectory, Path.GetFileName(assemblyLocation))); - } - if (fileName == null) { - // still not found -> look in WinFX reference directory - string referenceDirectory = WinFXReferenceDirectory; - if (!string.IsNullOrEmpty(referenceDirectory)) { - fileName = LookupLocalizedXmlDoc(Path.Combine(referenceDirectory, Path.GetFileName(assemblyLocation))); + // Not found -> look in other directories: + foreach (string testDirectory in XmlDoc.XmlDocLookupDirectories) { + fileName = LookupLocalizedXmlDoc(Path.Combine(testDirectory, Path.GetFileName(assemblyLocation))); + if (fileName != null) + break; } } @@ -134,20 +129,6 @@ namespace ICSharpCode.SharpDevelop.Dom } } - static string WinFXReferenceDirectory { - get { - RegistryKey k = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0\Setup\Windows Communication Foundation"); - if (k == null) - return null; - object o = k.GetValue("ReferenceInstallPath"); - k.Close(); - if (o == null) - return null; - else - return o.ToString(); - } - } - public void InitializeSpecialClasses() { if (GetClassInternal(VoidClass.VoidName, 0, Language) != null) { diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/XmlDoc.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/XmlDoc.cs index c0d5bc2060..0169334f09 100644 --- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/XmlDoc.cs +++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/XmlDoc.cs @@ -18,6 +18,14 @@ namespace ICSharpCode.SharpDevelop.Dom /// public sealed class XmlDoc : IDisposable { + static readonly List xmlDocLookupDirectories = new List( + new string[] { System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory() } + ); + + public static IList XmlDocLookupDirectories { + get { return xmlDocLookupDirectories; } + } + struct IndexEntry : IComparable { public int HashCode;