diff --git a/data/resources/StringResources.resx b/data/resources/StringResources.resx index cf22475036..24b5d6d4ba 100644 --- a/data/resources/StringResources.resx +++ b/data/resources/StringResources.resx @@ -2437,6 +2437,12 @@ system. I don't think that it needs translation. Any processor + + Any processor (prefer 32-bit) + + + Any processor (prefer 64-bit) + Intel 64-bit Itanium processor diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/BuildAdvanced.xaml b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/BuildAdvanced.xaml index 7c91290006..8a8aa758a3 100644 --- a/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/BuildAdvanced.xaml +++ b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/BuildAdvanced.xaml @@ -35,6 +35,7 @@ + @@ -61,10 +62,10 @@ - - diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/BuildAdvanced.xaml.cs b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/BuildAdvanced.xaml.cs index 50b57deafe..c8eb4adc34 100644 --- a/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/BuildAdvanced.xaml.cs +++ b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/BuildAdvanced.xaml.cs @@ -16,9 +16,9 @@ using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; - using ICSharpCode.Core; using ICSharpCode.SharpDevelop.Project; +using ICSharpCode.SharpDevelop.Project.Converter; using ICSharpCode.SharpDevelop.Widgets; namespace ICSharpCode.SharpDevelop.Gui.OptionPanels @@ -33,26 +33,44 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels private System.Windows.Input.ICommand baseIntermediateOutputPathCommand; private System.Windows.Input.ICommand intermediateOutputPathCommand; private ProjectOptionPanel projectOptions; + bool supports32BitPreferred; public BuildAdvanced() { InitializeComponent(); - InitializeCombos(); this.BaseIntermediateOutputPathCommand = new RelayCommand(BaseIntermediateOutputPathExecute); this.IntermediateOutputPathCommand = new RelayCommand(IntermediateOutputPathExecute); this.DataContext = this; } - void InitializeCombos() + public void Initialize (ProjectOptionPanel projectOptions) { - + if (projectOptions == null) { + throw new ArgumentNullException("projectOptions"); + } + this.projectOptions = projectOptions; + projectOptions.RegisterLoadSaveCallback(this); + + this.SerializationInfo = new List(); this.SerializationInfo.Add(new KeyItemPair("Off", StringParser.Parse("${res:Dialog.ProjectOptions.Build.Off}"))); this.SerializationInfo.Add(new KeyItemPair("On", StringParser.Parse("${res:Dialog.ProjectOptions.Build.On}"))); this.SerializationInfo.Add(new KeyItemPair("Auto", StringParser.Parse("${res:Dialog.ProjectOptions.Build.Auto}"))); this.TargetCPU = new List(); - this.TargetCPU.Add(new KeyItemPair("AnyCPU", StringParser.Parse("${res:Dialog.ProjectOptions.Build.TargetCPU.Any}"))); + supports32BitPreferred = false; + if (DotnetDetection.IsDotnet45Installed()) { + supports32BitPreferred = projectOptions.Project.MinimumSolutionVersion >= Solution.SolutionVersionVS2010; + var compilableProject = projectOptions.Project as CompilableProject; + if (compilableProject != null && compilableProject.OutputType == OutputType.Library) + supports32BitPreferred = false; + } + if (supports32BitPreferred) { + this.TargetCPU.Add(new KeyItemPair("AnyCPU32", StringParser.Parse("${res:Dialog.ProjectOptions.Build.TargetCPU.Any32}"))); + this.TargetCPU.Add(new KeyItemPair("AnyCPU64", StringParser.Parse("${res:Dialog.ProjectOptions.Build.TargetCPU.Any64}"))); + } else { + this.TargetCPU.Add(new KeyItemPair("AnyCPU", StringParser.Parse("${res:Dialog.ProjectOptions.Build.TargetCPU.Any}"))); + } this.TargetCPU.Add(new KeyItemPair("x86", StringParser.Parse("${res:Dialog.ProjectOptions.Build.TargetCPU.x86}"))); this.TargetCPU.Add(new KeyItemPair("x64", StringParser.Parse("${res:Dialog.ProjectOptions.Build.TargetCPU.x64}"))); this.TargetCPU.Add(new KeyItemPair("Itanium", StringParser.Parse("${res:Dialog.ProjectOptions.Build.TargetCPU.Itanium}"))); @@ -65,18 +83,6 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels this.FileAlign.Add(new KeyItemPair("8192", "8192")); } - #region IProjectUserControl - - - public void Initialize (ProjectOptionPanel projectOptions) - { - if (projectOptions == null) { - throw new ArgumentNullException("projectOptions"); - } - this.projectOptions = projectOptions; - projectOptions.RegisterLoadSaveCallback(this); - } - public void Load(MSBuildBasedProject project, string configuration, string platform) { int val; @@ -84,6 +90,20 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels val = 0x400000; } DllBaseAddress = "0x" + val.ToString("x", NumberFormatInfo.InvariantInfo); + + if (supports32BitPreferred && string.Equals(this.PlatformTarget.Value, "AnyCPU", StringComparison.OrdinalIgnoreCase)) { + bool default32BitPreferred = false; + var upgradableProject = projectOptions.Project as IUpgradableProject; + if (upgradableProject != null && upgradableProject.CurrentTargetFramework.IsBasedOn(TargetFramework.Net45)) { + default32BitPreferred = true; + } + if (Prefer32Bit.Value ?? default32BitPreferred) + targetCpuComboBox.SelectedValue = "AnyCPU32"; + else + targetCpuComboBox.SelectedValue = "AnyCPU64"; + } else { + targetCpuComboBox.SelectedValue = this.PlatformTarget.Value; + } } public bool Save(MSBuildBasedProject project, string configuration, string platform) @@ -98,14 +118,28 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels int val; if (int.TryParse(dllBaseAddressWithoutHexPrefix, style, NumberFormatInfo.InvariantInfo, out val)) { BaseAddress.Value = val.ToString(NumberFormatInfo.InvariantInfo); - return true; } else { MessageService.ShowMessage("${res:Dialog.ProjectOptions.PleaseEnterValidNumber}"); return false; } + // targetCPU is saved in targetCPUCombobox_SelectionChanged + + return true; } - #endregion + void TargetCpuComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) + { + if (string.Equals((string)targetCpuComboBox.SelectedValue, "AnyCPU32", StringComparison.OrdinalIgnoreCase)) { + this.PlatformTarget.Value = "AnyCPU"; + this.Prefer32Bit.Value = true; + } else if (string.Equals((string)targetCpuComboBox.SelectedValue, "AnyCPU64", StringComparison.OrdinalIgnoreCase)) { + this.PlatformTarget.Value = "AnyCPU"; + this.Prefer32Bit.Value = false; + } else { + this.PlatformTarget.Value = (string)targetCpuComboBox.SelectedValue; + this.Prefer32Bit.Value = null; + } + } #region Properies @@ -137,7 +171,7 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels } public ProjectOptionPanel.ProjectProperty BaseAddress { - get {return projectOptions.GetProperty("BaseAddress","1000", + get {return projectOptions.GetProperty("BaseAddress","", TextBoxEditMode.EditEvaluatedProperty,PropertyStorageLocations.PlatformSpecific ); } }