diff --git a/AddIns/ICSharpCode.SharpDevelop.addin b/AddIns/ICSharpCode.SharpDevelop.addin
index 88bb4c9b73..78d4629e49 100644
--- a/AddIns/ICSharpCode.SharpDevelop.addin
+++ b/AddIns/ICSharpCode.SharpDevelop.addin
@@ -2183,6 +2183,9 @@
+
+
+
diff --git a/src/Libraries/ICSharpCode.Build.Tasks/Project/SharpDevelop.Build.CSharp.targets b/src/Libraries/ICSharpCode.Build.Tasks/Project/SharpDevelop.Build.CSharp.targets
index c1c64152c9..2ca45a6ee1 100644
--- a/src/Libraries/ICSharpCode.Build.Tasks/Project/SharpDevelop.Build.CSharp.targets
+++ b/src/Libraries/ICSharpCode.Build.Tasks/Project/SharpDevelop.Build.CSharp.targets
@@ -18,23 +18,27 @@
v2.0
CF
+
+ v3.5
+ CF
+
Mono
-
+
-
+
-
+
@@ -62,6 +66,6 @@
-
diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/IDEOptions/LoadSavePanel.cs b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/IDEOptions/LoadSavePanel.cs
index f9acc73726..3d8307b1c1 100644
--- a/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/IDEOptions/LoadSavePanel.cs
+++ b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/IDEOptions/LoadSavePanel.cs
@@ -8,7 +8,6 @@
using System;
using System.Windows.Forms;
using ICSharpCode.Core;
-using FileChangeWatcher = ICSharpCode.SharpDevelop.FileChangeWatcher;
namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
{
diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/CreateKey.cs b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/CreateKey.cs
index 4ffe521aa2..b25408a85e 100644
--- a/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/CreateKey.cs
+++ b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/CreateKey.cs
@@ -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");
}
}
}
diff --git a/src/Main/Base/Project/Src/Internal/Templates/Project/ProjectTemplate.cs b/src/Main/Base/Project/Src/Internal/Templates/Project/ProjectTemplate.cs
index 63f1f4727d..25144855af 100644
--- a/src/Main/Base/Project/Src/Internal/Templates/Project/ProjectTemplate.cs
+++ b/src/Main/Base/Project/Src/Internal/Templates/Project/ProjectTemplate.cs
@@ -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
};
diff --git a/src/Main/Base/Project/Src/Project/Solution/Solution.cs b/src/Main/Base/Project/Src/Project/Solution/Solution.cs
index 03bfe3827a..dd07599efc 100644
--- a/src/Main/Base/Project/Src/Project/Solution/Solution.cs
+++ b/src/Main/Base/Project/Src/Project/Solution/Solution.cs
@@ -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
// 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);
diff --git a/src/Main/Base/Project/Src/Services/File/FileChangeWatcher.cs b/src/Main/Base/Project/Src/Services/File/FileChangeWatcher.cs
index 4193118e41..b60dcca9ad 100644
--- a/src/Main/Base/Project/Src/Services/File/FileChangeWatcher.cs
+++ b/src/Main/Base/Project/Src/Services/File/FileChangeWatcher.cs
@@ -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
}
*/
}
- #endregion
}
diff --git a/src/Main/Base/Project/Src/Services/ParserService/DomHostCallback.cs b/src/Main/Base/Project/Src/Services/ParserService/DomHostCallback.cs
index 52b0a70441..da0111b6fc 100644
--- a/src/Main/Base/Project/Src/Services/ParserService/DomHostCallback.cs
+++ b/src/Main/Base/Project/Src/Services/ParserService/DomHostCallback.cs
@@ -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
) + "\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/Base/Project/Src/Services/ParserService/NetCFProjectContentRegistry.cs b/src/Main/Base/Project/Src/Services/ParserService/NetCFProjectContentRegistry.cs
index b4a1a8dfcc..13c60e8c9b 100644
--- a/src/Main/Base/Project/Src/Services/ParserService/NetCFProjectContentRegistry.cs
+++ b/src/Main/Base/Project/Src/Services/ParserService/NetCFProjectContentRegistry.cs
@@ -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
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);
}
- */
}
}
diff --git a/src/Main/Core/Project/Src/Services/FileUtility/FileUtility.cs b/src/Main/Core/Project/Src/Services/FileUtility/FileUtility.cs
index 9c62490ddb..3f93ed5549 100644
--- a/src/Main/Core/Project/Src/Services/FileUtility/FileUtility.cs
+++ b/src/Main/Core/Project/Src/Services/FileUtility/FileUtility.cs
@@ -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;
+ }
+
///
/// Gets the installation root of the .NET Framework (@"C:\Windows\Microsoft.NET\Framework\")
///
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
///
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
///
static void SearchDirectory(string directory, string filemask, List 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);
diff --git a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/Program.cs b/src/Main/ICSharpCode.SharpDevelop.BuildWorker/Program.cs
index 8bdd0de987..66d4bd0a89 100644
--- a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/Program.cs
+++ b/src/Main/ICSharpCode.SharpDevelop.BuildWorker/Program.cs
@@ -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)");
}
}
diff --git a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/app.config b/src/Main/ICSharpCode.SharpDevelop.BuildWorker/app.config
index acbc7ec0cc..aa701ee4ae 100644
--- a/src/Main/ICSharpCode.SharpDevelop.BuildWorker/app.config
+++ b/src/Main/ICSharpCode.SharpDevelop.BuildWorker/app.config
@@ -6,10 +6,10 @@
-
+
diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/DefaultProjectContent.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/DefaultProjectContent.cs
index 836d44e2cb..19aff434e4 100644
--- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/DefaultProjectContent.cs
+++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/DefaultProjectContent.cs
@@ -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();
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 1dad24f3f9..6171317780 100644
--- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ProjectContentRegistry.cs
+++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ProjectContentRegistry.cs
@@ -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
}
}
+
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 bf3230de45..272436df11 100644
--- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ReflectionProjectContent.cs
+++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ReflectionProjectContent.cs
@@ -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;
}
diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/XmlDoc.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/XmlDoc.cs
index efb85c4c33..bfe61f1381 100644
--- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/XmlDoc.cs
+++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/XmlDoc.cs
@@ -18,9 +18,9 @@ namespace ICSharpCode.SharpDevelop.Dom
///
public sealed class XmlDoc : IDisposable
{
- static readonly List xmlDocLookupDirectories = new List(
- new string[] { System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory() }
- );
+ static readonly List xmlDocLookupDirectories = new List {
+ System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()
+ };
public static IList XmlDocLookupDirectories {
get { return xmlDocLookupDirectories; }
@@ -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
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
}
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;
+ }
}
}
diff --git a/src/Main/StartUp/Project/Resources/SharpDevelop.exe.manifest b/src/Main/StartUp/Project/Resources/SharpDevelop.exe.manifest
deleted file mode 100644
index ae77ef9da7..0000000000
--- a/src/Main/StartUp/Project/Resources/SharpDevelop.exe.manifest
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
- A free .NET IDE
-
-
-
-
-
-
diff --git a/src/Main/StartUp/Project/app.template.config b/src/Main/StartUp/Project/app.template.config
index 239ab07ad9..20723149f3 100644
--- a/src/Main/StartUp/Project/app.template.config
+++ b/src/Main/StartUp/Project/app.template.config
@@ -43,10 +43,10 @@
-
+