Browse Source

Improved finding xml documentation (now supports redirections). Add support for compiling for Compact Framework 3.5.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2743 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 18 years ago
parent
commit
f4d79bc951
  1. 3
      AddIns/ICSharpCode.SharpDevelop.addin
  2. 12
      src/Libraries/ICSharpCode.Build.Tasks/Project/SharpDevelop.Build.CSharp.targets
  3. 1
      src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/IDEOptions/LoadSavePanel.cs
  4. 2
      src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/CreateKey.cs
  5. 3
      src/Main/Base/Project/Src/Internal/Templates/Project/ProjectTemplate.cs
  6. 8
      src/Main/Base/Project/Src/Project/Solution/Solution.cs
  7. 2
      src/Main/Base/Project/Src/Services/File/FileChangeWatcher.cs
  8. 35
      src/Main/Base/Project/Src/Services/ParserService/DomHostCallback.cs
  9. 72
      src/Main/Base/Project/Src/Services/ParserService/NetCFProjectContentRegistry.cs
  10. 45
      src/Main/Core/Project/Src/Services/FileUtility/FileUtility.cs
  11. 8
      src/Main/ICSharpCode.SharpDevelop.BuildWorker/Program.cs
  12. 4
      src/Main/ICSharpCode.SharpDevelop.BuildWorker/app.config
  13. 15
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/DefaultProjectContent.cs
  14. 3
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ProjectContentRegistry.cs
  15. 4
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ReflectionProjectContent.cs
  16. 68
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/XmlDoc.cs
  17. 17
      src/Main/StartUp/Project/Resources/SharpDevelop.exe.manifest
  18. 4
      src/Main/StartUp/Project/app.template.config

3
AddIns/ICSharpCode.SharpDevelop.addin

@ -2183,6 +2183,9 @@ @@ -2183,6 +2183,9 @@
<Condition name = "CompareProjectProperty" property = "SharpDevelopTargetFrameworkVersion" equals = "CF 2.0">
<ProjectContentRegistry id="NetCF20" class="ICSharpCode.SharpDevelop.NetCF20ProjectContentRegistry"/>
</Condition>
<Condition name = "CompareProjectProperty" property = "SharpDevelopTargetFrameworkVersion" equals = "CF 3.5">
<ProjectContentRegistry id="NetCF35" class="ICSharpCode.SharpDevelop.NetCF35ProjectContentRegistry"/>
</Condition>
</ComplexCondition>
</Path>

12
src/Libraries/ICSharpCode.Build.Tasks/Project/SharpDevelop.Build.CSharp.targets

@ -18,23 +18,27 @@ @@ -18,23 +18,27 @@
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<SharpDevelopTargetFrameworkClass>CF</SharpDevelopTargetFrameworkClass>
</PropertyGroup>
<PropertyGroup Condition=" '$(SharpDevelopTargetFrameworkVersion)' == 'CF 3.5' ">
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<SharpDevelopTargetFrameworkClass>CF</SharpDevelopTargetFrameworkClass>
</PropertyGroup>
<PropertyGroup Condition=" ('$(SharpDevelopTargetFrameworkVersion)' == 'Mono v1.1') or ('$(SharpDevelopTargetFrameworkVersion)' == 'Mono v2.0') ">
<SharpDevelopTargetFrameworkClass>Mono</SharpDevelopTargetFrameworkClass>
</PropertyGroup>
<!-- Show an error when CF is not installed, or when the target framework is unknown. -->
<Target Name="Build">
<Error Text="'$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets' cannot be found." Condition=" ('$(SharpDevelopTargetFrameworkVersion)' == 'CF 2.0') and (!Exists('$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets')) "/>
<Error Text="'$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets' cannot be found." Condition=" ('$(SharpDevelopTargetFrameworkClass)' == 'CF') and (!Exists('$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets')) "/>
<Error Text="Unknown target framework version '$(SharpDevelopTargetFrameworkVersion)'."/>
</Target>
<Target Name="Rebuild">
<Error Text="'$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets' cannot be found." Condition=" ('$(SharpDevelopTargetFrameworkVersion)' == 'CF 2.0') and (!Exists('$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets')) "/>
<Error Text="'$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets' cannot be found." Condition=" ('$(SharpDevelopTargetFrameworkClass)' == 'CF') and (!Exists('$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets')) "/>
<Error Text="Unknown target framework version '$(SharpDevelopTargetFrameworkVersion)'."/>
</Target>
<Target Name="Clean">
<Error Text="'$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets' cannot be found." Condition=" ('$(SharpDevelopTargetFrameworkVersion)' == 'CF 2.0') and (!Exists('$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets')) "/>
<Error Text="'$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets' cannot be found." Condition=" ('$(SharpDevelopTargetFrameworkClass)' == 'CF') and (!Exists('$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets')) "/>
<Error Text="Unknown target framework version '$(SharpDevelopTargetFrameworkVersion)'."/>
</Target>
@ -62,6 +66,6 @@ @@ -62,6 +66,6 @@
</ItemGroup>
<!-- Compact framework imports -->
<Import Condition=" ('$(SharpDevelopTargetFrameworkVersion)' == 'CF 2.0') and (Exists('$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets')) "
<Import Condition=" ('$(SharpDevelopTargetFrameworkClass)' == 'CF') and (Exists('$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets')) "
Project="$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets"/>
</Project>

1
src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/IDEOptions/LoadSavePanel.cs

@ -8,7 +8,6 @@ @@ -8,7 +8,6 @@
using System;
using System.Windows.Forms;
using ICSharpCode.Core;
using FileChangeWatcher = ICSharpCode.SharpDevelop.FileChangeWatcher;
namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
{

2
src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/CreateKey.cs

@ -99,7 +99,7 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels @@ -99,7 +99,7 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
public static string StrongNameTool {
get {
return FileUtility.NetSdkInstallRoot + "bin\\sn.exe";
return Path.Combine(FileUtility.NetSdkInstallRoot, "bin\\sn.exe");
}
}
}

3
src/Main/Base/Project/Src/Internal/Templates/Project/ProjectTemplate.cs

@ -29,13 +29,14 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates @@ -29,13 +29,14 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates
public readonly static TargetFramework Net35 = new TargetFramework("v3.5", ".NET Framework 3.5") { BasedOn = Net30 };
public readonly static TargetFramework CF = new TargetFramework("CF", null);
public readonly static TargetFramework CF20 = new TargetFramework("CF 2.0", "Compact Framework 2.0") { BasedOn = CF };
public readonly static TargetFramework CF35 = new TargetFramework("CF 3.5", "Compact Framework 3.5") { BasedOn = CF20 };
public readonly static TargetFramework Mono = new TargetFramework("Mono", null);
public readonly static TargetFramework Mono10 = new TargetFramework("Mono v1.1", "Mono 1.1") { BasedOn = Mono };
public readonly static TargetFramework Mono20 = new TargetFramework("Mono v2.0", "Mono 2.0") { BasedOn = Mono10 };
public readonly static TargetFramework[] TargetFrameworks = {
Net35, Net30, Net20,
CF, CF20,
CF, CF35, CF20,
Mono, Mono20, Mono10
};

8
src/Main/Base/Project/Src/Project/Solution/Solution.cs

@ -261,7 +261,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -261,7 +261,7 @@ namespace ICSharpCode.SharpDevelop.Project
new string [] {fileName});
if (attemptOverwrite) {
try {
attributes = (int) attributes - FileAttributes.ReadOnly;
attributes &= ~FileAttributes.ReadOnly;
File.SetAttributes(fileName, attributes);
Save(fileName);
return;
@ -356,16 +356,16 @@ namespace ICSharpCode.SharpDevelop.Project @@ -356,16 +356,16 @@ namespace ICSharpCode.SharpDevelop.Project
// we need to specify UTF8 because MSBuild needs the BOM
using (StreamWriter sw = new StreamWriter(fileName, false, Encoding.UTF8)) {
sw.WriteLine();
int versionNumber = 9;
int versionNumber = SolutionVersionVS05;
foreach (IProject p in this.Projects) {
if (p.MinimumSolutionVersion > versionNumber)
versionNumber = p.MinimumSolutionVersion;
}
sw.WriteLine("Microsoft Visual Studio Solution File, Format Version " + versionNumber + ".00");
if (versionNumber == 9) {
if (versionNumber == SolutionVersionVS05) {
sw.WriteLine("# Visual Studio 2005");
} else if (versionNumber == 10) {
} else if (versionNumber == SolutionVersionVS08) {
sw.WriteLine("# Visual Studio 2008");
}
sw.WriteLine("# SharpDevelop " + RevisionClass.FullVersion);

2
src/Main/Base/Project/Src/Services/File/FileChangeWatcher.cs

@ -14,7 +14,6 @@ using ICSharpCode.Core; @@ -14,7 +14,6 @@ using ICSharpCode.Core;
namespace ICSharpCode.SharpDevelop
{
#region FileChangeWatcher
internal sealed class FileChangeWatcher //: IDisposable
{
/*FileSystemWatcher watcher;
@ -122,5 +121,4 @@ namespace ICSharpCode.SharpDevelop @@ -122,5 +121,4 @@ namespace ICSharpCode.SharpDevelop
}
*/
}
#endregion
}

35
src/Main/Base/Project/Src/Services/ParserService/DomHostCallback.cs

@ -51,13 +51,6 @@ namespace ICSharpCode.SharpDevelop @@ -51,13 +51,6 @@ 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)
@ -70,33 +63,5 @@ namespace ICSharpCode.SharpDevelop @@ -70,33 +63,5 @@ 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");
}
}
}
}

72
src/Main/Base/Project/Src/Services/ParserService/NetCFProjectContentRegistry.cs

@ -12,18 +12,25 @@ using Microsoft.Win32; @@ -12,18 +12,25 @@ using Microsoft.Win32;
namespace ICSharpCode.SharpDevelop
{
public class NetCF20ProjectContentRegistry : ProjectContentRegistry
public abstract class NetCFProjectContentRegistry : ProjectContentRegistry
{
public override IProjectContent Mscorlib {
get {
return GetProjectContentForReference("mscorlib", "mscorlib");
string folder = GetInstallFolder();
if (folder != null)
return GetProjectContentForReference("mscorlib", Path.Combine(folder, "mscorlib.dll"));
else
return GetProjectContentForReference("mscorlib", "mscorlib");
}
}
static string GetInstallFolder()
protected abstract string AssemblyFolderRegKey {
get;
}
string GetInstallFolder()
{
const string regkey = @"SOFTWARE\Microsoft\.NETCompactFramework\v2.0.0.0\WindowsCE\AssemblyFoldersEx";
RegistryKey key = Registry.LocalMachine.OpenSubKey(regkey);
RegistryKey key = Registry.LocalMachine.OpenSubKey(AssemblyFolderRegKey);
if (key != null) {
string dir = key.GetValue(null) as string;
key.Close();
@ -32,45 +39,28 @@ namespace ICSharpCode.SharpDevelop @@ -32,45 +39,28 @@ namespace ICSharpCode.SharpDevelop
return null;
}
/*
Is this still required now that we use MSBuild to resolve assembly references?
protected override IProjectContent LoadProjectContent(string itemInclude, string itemFileName)
protected override System.Reflection.Assembly GetDefaultAssembly(string shortName)
{
if (File.Exists(itemFileName)) {
// we cannot reuse project contents from the default registry because they would
// reference the wrong mscorlib version, causing code-completion problems
// when a CF application references a CF library
return base.LoadProjectContent(itemInclude, itemFileName);
// do not use default assemblies, but pick the CF version
return null;
}
}
public class NetCF20ProjectContentRegistry : NetCFProjectContentRegistry
{
protected override string AssemblyFolderRegKey {
get {
return @"SOFTWARE\Microsoft\.NETCompactFramework\v2.0.0.0\WindowsCE\AssemblyFoldersEx";
}
string netPath = GetInstallFolder();
if (!string.IsNullOrEmpty(netPath) && File.Exists(Path.Combine(netPath, "mscorlib.dll"))) {
string shortName = itemInclude;
int pos = shortName.IndexOf(',');
if (pos > 0)
shortName = shortName.Substring(0, pos);
if (File.Exists(Path.Combine(netPath, shortName + ".dll"))) {
ReflectionProjectContent rpc = CecilReader.LoadAssembly(Path.Combine(netPath, shortName + ".dll"), this);
if (rpc != null) {
redirectedAssemblyNames.Add(shortName, rpc.AssemblyFullName);
}
return rpc;
} else if (File.Exists(Path.Combine(netPath, shortName))) {
// perhaps shortName includes file extension
ReflectionProjectContent rpc = CecilReader.LoadAssembly(Path.Combine(netPath, shortName), this);
if (rpc != null) {
redirectedAssemblyNames.Add(Path.GetFileNameWithoutExtension(shortName), rpc.AssemblyFullName);
}
return rpc;
}
} else {
string message = "Warning: .NET Compact Framework SDK is not installed." + Environment.NewLine;
if (!TaskService.BuildMessageViewCategory.Text.Contains(message)) {
TaskService.BuildMessageViewCategory.AppendText(message);
}
}
}
public class NetCF35ProjectContentRegistry : NetCFProjectContentRegistry
{
protected override string AssemblyFolderRegKey {
get {
return @"SOFTWARE\Microsoft\.NETCompactFramework\v3.5.0.0\WindowsCE\AssemblyFoldersEx";
}
return base.LoadProjectContent(itemInclude, itemFileName);
}
*/
}
}

45
src/Main/Core/Project/Src/Services/FileUtility/FileUtility.cs

@ -49,15 +49,27 @@ namespace ICSharpCode.Core @@ -49,15 +49,27 @@ namespace ICSharpCode.Core
}
}
static string GetPathFromRegistry(string key, string valueName)
{
using (RegistryKey installRootKey = Registry.LocalMachine.OpenSubKey(key)) {
if (installRootKey != null) {
object o = installRootKey.GetValue(valueName);
if (o != null) {
string r = o.ToString();
if (!string.IsNullOrEmpty(r))
return r;
}
}
}
return null;
}
/// <summary>
/// Gets the installation root of the .NET Framework (@"C:\Windows\Microsoft.NET\Framework\")
/// </summary>
public static string NETFrameworkInstallRoot {
get {
using (RegistryKey installRootKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\.NETFramework")) {
object o = installRootKey.GetValue("InstallRoot");
return o == null ? String.Empty : o.ToString();
}
return GetPathFromRegistry(@"SOFTWARE\Microsoft\.NETFramework", "InstallRoot") ?? string.Empty;
}
}
@ -67,23 +79,10 @@ namespace ICSharpCode.Core @@ -67,23 +79,10 @@ namespace ICSharpCode.Core
/// </summary>
public static string NetSdkInstallRoot {
get {
string val = String.Empty;
RegistryKey sdkRootKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SDKs\Windows\v6.0");
if (sdkRootKey != null) {
object o = sdkRootKey.GetValue("InstallationFolder");
val = o == null ? String.Empty : o.ToString();
sdkRootKey.Close();
}
if (val.Length == 0) {
RegistryKey installRootKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\.NETFramework");
if (installRootKey != null) {
object o = installRootKey.GetValue("sdkInstallRootv2.0");
val = o == null ? String.Empty : o.ToString();
installRootKey.Close();
}
}
return val;
return GetPathFromRegistry(@"SOFTWARE\Microsoft\Microsoft SDKs\Windows\v6.0a", "InstallationFolder")
?? GetPathFromRegistry(@"SOFTWARE\Microsoft\Microsoft SDKs\Windows\v6.0", "InstallationFolder")
?? GetPathFromRegistry(@"SOFTWARE\Microsoft\.NETFramework", "sdkInstallRootv2.0")
?? string.Empty;
}
}
@ -252,10 +251,10 @@ namespace ICSharpCode.Core @@ -252,10 +251,10 @@ namespace ICSharpCode.Core
/// </summary>
static void SearchDirectory(string directory, string filemask, List<string> collection, bool searchSubdirectories, bool ignoreHidden)
{
// If Directory.GetFiles() searches the 8.3 name as well as the full name so if the filemask is
// If Directory.GetFiles() searches the 8.3 name as well as the full name so if the filemask is
// "*.xpt" it will return "Template.xpt~"
bool isExtMatch = Regex.IsMatch(filemask, @"^\*\..{3}$");
string ext = null;
string ext = null;
string[] file = Directory.GetFiles(directory, filemask);
if (isExtMatch) ext = filemask.Remove(0,1);

8
src/Main/ICSharpCode.SharpDevelop.BuildWorker/Program.cs

@ -38,10 +38,10 @@ namespace ICSharpCode.SharpDevelop.BuildWorker @@ -38,10 +38,10 @@ namespace ICSharpCode.SharpDevelop.BuildWorker
ShowMessageBox(ex.ToString());
}
} else {
Program.Log("ICSharpCode.SharpDevelop.BuildWorker.exe is used to compile " +
"MSBuild projects inside SharpDevelop.");
Program.Log("If you want to compile projects on the command line, use " +
"MSBuild.exe (part of the .NET Framework)");
Console.WriteLine("ICSharpCode.SharpDevelop.BuildWorker.exe is used to compile " +
"MSBuild projects inside SharpDevelop.");
Console.WriteLine("If you want to compile projects on the command line, use " +
"MSBuild.exe (part of the .NET Framework)");
}
}

4
src/Main/ICSharpCode.SharpDevelop.BuildWorker/app.config

@ -6,10 +6,10 @@ @@ -6,10 +6,10 @@
<assemblyIdentity name="Microsoft.Build.Framework" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="3.5.0.0"/>
</dependentAssembly>
<!--<dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.CompactFramework.Build.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="9.0.0.0"/>
</dependentAssembly>-->
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

15
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/DefaultProjectContent.cs

@ -219,21 +219,6 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -219,21 +219,6 @@ namespace ICSharpCode.SharpDevelop.Dom
return null;
}
protected static string LookupLocalizedXmlDoc(string fileName)
{
string xmlFileName = Path.ChangeExtension(fileName, ".xml");
string localizedXmlDocFile = Path.GetDirectoryName(fileName);
localizedXmlDocFile = Path.Combine(localizedXmlDocFile, Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName);
localizedXmlDocFile = Path.Combine(localizedXmlDocFile, Path.GetFileName(xmlFileName));
if (File.Exists(localizedXmlDocFile)) {
return localizedXmlDocFile;
}
if (File.Exists(xmlFileName)) {
return xmlFileName;
}
return null;
}
public virtual void Dispose()
{
xmlDoc.Dispose();

3
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ProjectContentRegistry.cs

@ -363,7 +363,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -363,7 +363,7 @@ namespace ICSharpCode.SharpDevelop.Dom
}
}
static Assembly GetDefaultAssembly(string shortName)
protected virtual Assembly GetDefaultAssembly(string shortName)
{
// These assemblies are already loaded by SharpDevelop, so we
// don't need to load them in a separate AppDomain/with Cecil.
@ -401,3 +401,4 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -401,3 +401,4 @@ namespace ICSharpCode.SharpDevelop.Dom
}
}

4
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ReflectionProjectContent.cs

@ -109,11 +109,11 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -109,11 +109,11 @@ namespace ICSharpCode.SharpDevelop.Dom
LoggingService.Warn(ex);
}
string fileName = LookupLocalizedXmlDoc(assemblyLocation);
string fileName = XmlDoc.LookupLocalizedXmlDoc(assemblyLocation);
if (fileName == null) {
// Not found -> look in other directories:
foreach (string testDirectory in XmlDoc.XmlDocLookupDirectories) {
fileName = LookupLocalizedXmlDoc(Path.Combine(testDirectory, Path.GetFileName(assemblyLocation)));
fileName = XmlDoc.LookupLocalizedXmlDoc(Path.Combine(testDirectory, Path.GetFileName(assemblyLocation)));
if (fileName != null)
break;
}

68
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/XmlDoc.cs

@ -18,9 +18,9 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -18,9 +18,9 @@ namespace ICSharpCode.SharpDevelop.Dom
/// </summary>
public sealed class XmlDoc : IDisposable
{
static readonly List<string> xmlDocLookupDirectories = new List<string>(
new string[] { System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory() }
);
static readonly List<string> xmlDocLookupDirectories = new List<string> {
System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()
};
public static IList<string> XmlDocLookupDirectories {
get { return xmlDocLookupDirectories; }
@ -246,6 +246,11 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -246,6 +246,11 @@ namespace ICSharpCode.SharpDevelop.Dom
}
public static XmlDoc Load(string fileName, string cachePath)
{
return Load(fileName, cachePath, true);
}
static XmlDoc Load(string fileName, string cachePath, bool allowRedirect)
{
//LoggingService.Debug("Loading XmlDoc for " + fileName);
XmlDoc doc;
@ -270,6 +275,17 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -270,6 +275,17 @@ namespace ICSharpCode.SharpDevelop.Dom
try {
using (XmlTextReader xmlReader = new XmlTextReader(fileName)) {
xmlReader.MoveToContent();
if (allowRedirect && !string.IsNullOrEmpty(xmlReader.GetAttribute("redirect"))) {
string redirectionTarget = GetRedirectionTarget(xmlReader.GetAttribute("redirect"));
if (redirectionTarget != null) {
LoggingService.Info("XmlDoc " + fileName + " is redirecting to " + redirectionTarget);
return Load(redirectionTarget, cachePath, false);
} else {
LoggingService.Warn("XmlDoc " + fileName + " is redirecting to " + xmlReader.GetAttribute("redirect") + ", but that file was not found.");
return new XmlDoc();
}
}
doc = Load(xmlReader);
}
} catch (XmlException ex) {
@ -292,5 +308,51 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -292,5 +308,51 @@ namespace ICSharpCode.SharpDevelop.Dom
}
return doc;
}
static string GetRedirectionTarget(string target)
{
string programFilesDir = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
if (!programFilesDir.EndsWith("\\") && !programFilesDir.EndsWith("/"))
programFilesDir += "\\";
string corSysDir = System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory();
if (!corSysDir.EndsWith("\\") && !corSysDir.EndsWith("/"))
corSysDir += "\\";
return LookupLocalizedXmlDoc(target.Replace("%PROGRAMFILESDIR%", programFilesDir)
.Replace("%CORSYSDIR%", corSysDir));
}
internal static string LookupLocalizedXmlDoc(string fileName)
{
string xmlFileName = Path.ChangeExtension(fileName, ".xml");
string currentCulture = System.Threading.Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName;
string localizedXmlDocFile = GetLocalizedName(xmlFileName, currentCulture);
LoggingService.Debug("Try find XMLDoc @" + localizedXmlDocFile);
if (File.Exists(localizedXmlDocFile)) {
return localizedXmlDocFile;
}
LoggingService.Debug("Try find XMLDoc @" + xmlFileName);
if (File.Exists(xmlFileName)) {
return xmlFileName;
}
if (currentCulture != "en") {
string englishXmlDocFile = GetLocalizedName(xmlFileName, "en");
LoggingService.Debug("Try find XMLDoc @" + englishXmlDocFile);
if (File.Exists(englishXmlDocFile)) {
return englishXmlDocFile;
}
}
return null;
}
static string GetLocalizedName(string fileName, string language)
{
string localizedXmlDocFile = Path.GetDirectoryName(fileName);
localizedXmlDocFile = Path.Combine(localizedXmlDocFile, language);
localizedXmlDocFile = Path.Combine(localizedXmlDocFile, Path.GetFileName(fileName));
return localizedXmlDocFile;
}
}
}

17
src/Main/StartUp/Project/Resources/SharpDevelop.exe.manifest

@ -1,17 +0,0 @@ @@ -1,17 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<description>A free .NET IDE</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>

4
src/Main/StartUp/Project/app.template.config

@ -43,10 +43,10 @@ @@ -43,10 +43,10 @@
<assemblyIdentity name="Microsoft.Build.Framework" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="3.5.0.0"/>
</dependentAssembly>
<!--<dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.CompactFramework.Build.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-99.9.9.9" newVersion="9.0.0.0"/>
</dependentAssembly>-->
</dependentAssembly>
<probing privatePath="Tools\NUnit"/>
</assemblyBinding>

Loading…
Cancel
Save