diff --git a/data/templates/project/CSharp/PortableAssemblyInfo.cs b/data/templates/project/CSharp/PortableAssemblyInfo.cs new file mode 100644 index 0000000000..f33ea31a7c --- /dev/null +++ b/data/templates/project/CSharp/PortableAssemblyInfo.cs @@ -0,0 +1,27 @@ +#region Using directives + +using System; +using System.Reflection; +using System.Runtime.InteropServices; + +#endregion + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("${ProjectName}")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("${ProjectName}")] +[assembly: AssemblyCopyright("Copyright ${DATE:yyyy}")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// The assembly version has following format : +// +// Major.Minor.Build.Revision +// +// You can specify all the values or you can use the default the Revision and +// Build Numbers by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.*")] diff --git a/data/templates/project/CSharp/PortableLibrary.xpt b/data/templates/project/CSharp/PortableLibrary.xpt new file mode 100644 index 0000000000..5c784bcc25 --- /dev/null +++ b/data/templates/project/CSharp/PortableLibrary.xpt @@ -0,0 +1,54 @@ + + diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.addin b/src/Main/Base/Project/ICSharpCode.SharpDevelop.addin index 959cbe3181..5c84c35d7a 100755 --- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.addin +++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.addin @@ -2362,6 +2362,8 @@ - + + + diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj index ad487f6bed..6e972e1cb6 100644 --- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj +++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj @@ -379,6 +379,9 @@ + + + @@ -928,6 +931,7 @@ + diff --git a/src/Main/Base/Project/Src/Internal/Templates/Project/ProjectDescriptor.cs b/src/Main/Base/Project/Src/Internal/Templates/Project/ProjectDescriptor.cs index 64480a27d6..de69ac4797 100644 --- a/src/Main/Base/Project/Src/Internal/Templates/Project/ProjectDescriptor.cs +++ b/src/Main/Base/Project/Src/Internal/Templates/Project/ProjectDescriptor.cs @@ -422,6 +422,24 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates } } + // Add properties from + // This must be done before adding , because the import path can refer to properties. + if (projectProperties.Count > 0) { + if (!(project is MSBuildBasedProject)) + throw new Exception(" may be only used in project templates for MSBuildBasedProjects"); + + foreach (ProjectProperty p in projectProperties) { + ((MSBuildBasedProject)project).SetProperty( + StringParser.Parse(p.Configuration), + StringParser.Parse(p.Platform), + StringParser.Parse(p.Name), + StringParser.Parse(p.Value), + p.Location, + p.ValueIsLiteral + ); + } + } + // Add Imports if (clearExistingImports || projectImports.Count > 0) { MSBuildBasedProject msbuildProject = project as MSBuildBasedProject; @@ -450,22 +468,6 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates } } - if (projectProperties.Count > 0) { - if (!(project is MSBuildBasedProject)) - throw new Exception(" may be only used in project templates for MSBuildBasedProjects"); - - foreach (ProjectProperty p in projectProperties) { - ((MSBuildBasedProject)project).SetProperty( - StringParser.Parse(p.Configuration), - StringParser.Parse(p.Platform), - StringParser.Parse(p.Name), - StringParser.Parse(p.Value), - p.Location, - p.ValueIsLiteral - ); - } - } - // Add Files if (project is IProjectItemListProvider) { diff --git a/src/Main/Base/Project/Src/Project/AbstractProject.cs b/src/Main/Base/Project/Src/Project/AbstractProject.cs index d6c2f96410..11e51fb147 100644 --- a/src/Main/Base/Project/Src/Project/AbstractProject.cs +++ b/src/Main/Base/Project/Src/Project/AbstractProject.cs @@ -597,5 +597,15 @@ namespace ICSharpCode.SharpDevelop.Project return projectBehavior; } } + + public virtual bool HasProjectType(Guid projectTypeGuid) + { + Guid myGuid; + if (Guid.TryParse(this.TypeGuid, out myGuid)) { + return myGuid == projectTypeGuid; + } else { + return false; + } + } } } diff --git a/src/Main/Base/Project/Src/Project/Behaviors/DotNetStartBehavior.cs b/src/Main/Base/Project/Src/Project/Behaviors/DotNetStartBehavior.cs index f1c1c016f8..4509d2e27d 100644 --- a/src/Main/Base/Project/Src/Project/Behaviors/DotNetStartBehavior.cs +++ b/src/Main/Base/Project/Src/Project/Behaviors/DotNetStartBehavior.cs @@ -126,6 +126,22 @@ namespace ICSharpCode.SharpDevelop.Project return base.GetDefaultItemType(fileName); } + public override CompilerVersion CurrentCompilerVersion { + get { + switch (Project.MinimumSolutionVersion) { + case Solution.SolutionVersionVS2005: + return CompilerVersion.MSBuild20; + case Solution.SolutionVersionVS2008: + return CompilerVersion.MSBuild35; + case Solution.SolutionVersionVS2010: + case Solution.SolutionVersionVS11: + return CompilerVersion.MSBuild40; + default: + throw new NotSupportedException(); + } + } + } + public override IEnumerable GetAvailableCompilerVersions() { List versions = new List(); @@ -137,6 +153,28 @@ namespace ICSharpCode.SharpDevelop.Project return versions; } + public override TargetFramework CurrentTargetFramework { + get { + string fxVersion = Project.TargetFrameworkVersion; + string fxProfile = Project.TargetFrameworkProfile; + if (string.Equals(fxProfile, "Client", StringComparison.OrdinalIgnoreCase)) { + foreach (ClientProfileTargetFramework fx in TargetFramework.TargetFrameworks.OfType()) + if (fx.FullFramework.Name == fxVersion) + return fx; + } else { + foreach (TargetFramework fx in TargetFramework.TargetFrameworks) + if (fx.Name == fxVersion) + return fx; + } + return null; + } + } + + public override IEnumerable GetAvailableTargetFrameworks() + { + return TargetFramework.TargetFrameworks.Where(fx => fx.IsAvailable()); + } + public override void UpgradeProject(CompilerVersion newVersion, TargetFramework newFramework) { if (!Project.ReadOnly) { diff --git a/src/Main/Base/Project/Src/Project/Behaviors/ProjectBehavior.cs b/src/Main/Base/Project/Src/Project/Behaviors/ProjectBehavior.cs index 063ccee949..2b1a00090c 100644 --- a/src/Main/Base/Project/Src/Project/Behaviors/ProjectBehavior.cs +++ b/src/Main/Base/Project/Src/Project/Behaviors/ProjectBehavior.cs @@ -94,6 +94,29 @@ namespace ICSharpCode.SharpDevelop.Project return Enumerable.Empty(); } + public virtual IEnumerable GetAvailableTargetFrameworks() + { + if (this.next != null) + return next.GetAvailableTargetFrameworks(); + return Enumerable.Empty(); + } + + public virtual CompilerVersion CurrentCompilerVersion { + get { + if (this.next != null) + return next.CurrentCompilerVersion; + throw new InvalidOperationException(); + } + } + + public virtual TargetFramework CurrentTargetFramework { + get { + if (this.next != null) + return next.CurrentTargetFramework; + throw new InvalidOperationException(); + } + } + public virtual void UpgradeProject(CompilerVersion newVersion, TargetFramework newFramework) { if (this.next != null) diff --git a/src/Main/Base/Project/Src/Project/Behaviors/ProjectBehaviorSupportedConditionEvaluator.cs b/src/Main/Base/Project/Src/Project/Behaviors/ProjectBehaviorSupportedConditionEvaluator.cs index 04c2673f35..2c45c6b35b 100644 --- a/src/Main/Base/Project/Src/Project/Behaviors/ProjectBehaviorSupportedConditionEvaluator.cs +++ b/src/Main/Base/Project/Src/Project/Behaviors/ProjectBehaviorSupportedConditionEvaluator.cs @@ -16,35 +16,20 @@ namespace ICSharpCode.SharpDevelop.Project if (!Guid.TryParse(condition.Properties["guid"], out conditionGuid)) return true; - string guidString; - if (owner is IProject) - guidString = FindGuidInProject((IProject)owner); - else if (ProjectService.CurrentProject != null) - guidString = FindGuidInProject(ProjectService.CurrentProject); - else + IProject project = owner as IProject ?? ProjectService.CurrentProject; + if (project == null) return false; - - Guid result; - foreach (string guid in guidString.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries)) { - if (Guid.TryParse(guid, out result) && conditionGuid == result) - return true; + // TODO: simplify this once HasProjectType() is part of IProject + AbstractProject p2 = project as AbstractProject; + if (p2 != null) { + return p2.HasProjectType(conditionGuid); + } else { + Guid projectGuid; + if (Guid.TryParse(project.TypeGuid, out projectGuid)) + return conditionGuid == projectGuid; + else + return false; } - - return false; - } - - string FindGuidInProject(IProject project) - { - if (project is MSBuildBasedProject) { - string guid = ((MSBuildBasedProject)project).GetEvaluatedProperty("ProjectTypeGuids"); - if (!string.IsNullOrEmpty(guid)) - return guid; - } else if (project is UnknownProject || project is MissingProject) { - // don't return any GUID for projects that could not be loaded - return string.Empty; - } - - return project.TypeGuid; } } } diff --git a/src/Main/Base/Project/Src/Project/CompilableProject.cs b/src/Main/Base/Project/Src/Project/CompilableProject.cs index a1ee2cf4ff..b6bcb398b7 100644 --- a/src/Main/Base/Project/Src/Project/CompilableProject.cs +++ b/src/Main/Base/Project/Src/Project/CompilableProject.cs @@ -277,36 +277,11 @@ namespace ICSharpCode.SharpDevelop.Project } public virtual CompilerVersion CurrentCompilerVersion { - get { - switch (MinimumSolutionVersion) { - case Solution.SolutionVersionVS2005: - return CompilerVersion.MSBuild20; - case Solution.SolutionVersionVS2008: - return CompilerVersion.MSBuild35; - case Solution.SolutionVersionVS2010: - case Solution.SolutionVersionVS11: - return CompilerVersion.MSBuild40; - default: - throw new NotSupportedException(); - } - } + get { return GetOrCreateBehavior().CurrentCompilerVersion; } } public virtual TargetFramework CurrentTargetFramework { - get { - string fxVersion = this.TargetFrameworkVersion; - string fxProfile = this.TargetFrameworkProfile; - if (string.Equals(fxProfile, "Client", StringComparison.OrdinalIgnoreCase)) { - foreach (ClientProfileTargetFramework fx in TargetFramework.TargetFrameworks.OfType()) - if (fx.FullFramework.Name == fxVersion) - return fx; - } else { - foreach (TargetFramework fx in TargetFramework.TargetFrameworks) - if (fx.Name == fxVersion) - return fx; - } - return null; - } + get { return GetOrCreateBehavior().CurrentTargetFramework; } } public virtual IEnumerable GetAvailableCompilerVersions() @@ -314,6 +289,11 @@ namespace ICSharpCode.SharpDevelop.Project return GetOrCreateBehavior().GetAvailableCompilerVersions(); } + public virtual IEnumerable GetAvailableTargetFrameworks() + { + return GetOrCreateBehavior().GetAvailableTargetFrameworks(); + } + public virtual void UpgradeProject(CompilerVersion newVersion, TargetFramework newFramework) { GetOrCreateBehavior().UpgradeProject(newVersion, newFramework); diff --git a/src/Main/Base/Project/Src/Project/Converter/IUpgradableProject.cs b/src/Main/Base/Project/Src/Project/Converter/IUpgradableProject.cs index 4883bff1ee..831ec89ea1 100644 --- a/src/Main/Base/Project/Src/Project/Converter/IUpgradableProject.cs +++ b/src/Main/Base/Project/Src/Project/Converter/IUpgradableProject.cs @@ -28,6 +28,11 @@ namespace ICSharpCode.SharpDevelop.Project.Converter /// IEnumerable GetAvailableCompilerVersions(); + /// + /// Gets the supported target frameworks. + /// + IEnumerable GetAvailableTargetFrameworks(); + /// /// Gets the current compiler version. /// @@ -56,6 +61,7 @@ namespace ICSharpCode.SharpDevelop.Project.Converter public static readonly CompilerVersion MSBuild35 = new CompilerVersion(new Version(3, 5), "MSBuild 3.5"); public static readonly CompilerVersion MSBuild40 = new CompilerVersion(new Version(4, 0), "MSBuild 4.0"); + [Obsolete("Use IUpgradableProject.GetAvailableTargetFrameworks() instead")] public virtual IEnumerable GetSupportedTargetFrameworks() { return from fx in TargetFramework.TargetFrameworks diff --git a/src/Main/Base/Project/Src/Project/Converter/UpgradeView.xaml.cs b/src/Main/Base/Project/Src/Project/Converter/UpgradeView.xaml.cs index 1d89679d13..db10d3d1ec 100644 --- a/src/Main/Base/Project/Src/Project/Converter/UpgradeView.xaml.cs +++ b/src/Main/Base/Project/Src/Project/Converter/UpgradeView.xaml.cs @@ -121,34 +121,30 @@ namespace ICSharpCode.SharpDevelop.Project.Converter void UpdateTargetFrameworkComboBox() { // Determine the available target frameworks - List availableFrameworks; bool doNotChangeAllowed; CompilerVersion selectedCompiler = newVersionComboBox.SelectedValue as CompilerVersion; - if (selectedCompiler == null || selectedCompiler is UnchangedCompilerVersion) { - // no entries or "Do not change" selected - // -> available target frameworks is the intersection of all compiler's target framework, - // and "Do not change" is always available - - availableFrameworks = ( - from Entry entry in listView.SelectedItems - where entry.CompilerVersion != null - from fx in entry.CompilerVersion.GetSupportedTargetFrameworks() - select fx - ).Distinct().ToList(); - - doNotChangeAllowed = true; - } else { - // Specific compiler version is selected - // Show that compiler's target frameworks - availableFrameworks = selectedCompiler.GetSupportedTargetFrameworks().ToList(); - // Allow do not change on target framework if all current frameworks are supported - // by the new compiler. - doNotChangeAllowed = true; - foreach (Entry entry in listView.SelectedItems) { - doNotChangeAllowed &= availableFrameworks.Contains(entry.TargetFramework); - } + if (selectedCompiler is UnchangedCompilerVersion) + selectedCompiler = null; + + // Calculate the intersection of available frameworks for all selected projects: + HashSet availableFrameworkSet = null; + foreach (Entry entry in listView.SelectedItems) { + var entryFrameworks = entry.Project.GetAvailableTargetFrameworks() + .Where(fx => fx.IsCompatibleWith(selectedCompiler ?? entry.CompilerVersion)); + if (availableFrameworkSet == null) + availableFrameworkSet = new HashSet(entryFrameworks); + else + availableFrameworkSet.IntersectWith(entryFrameworks); + } + + // Allow do not change on target framework if all current frameworks are supported + // by the new compiler. + doNotChangeAllowed = true; + foreach (Entry entry in listView.SelectedItems) { + doNotChangeAllowed &= availableFrameworkSet.Contains(entry.TargetFramework); } + List availableFrameworks = availableFrameworkSet.ToList(); availableFrameworks.Sort((a, b) => a.DisplayName.CompareTo(b.DisplayName)); if (doNotChangeAllowed) { availableFrameworks.Insert(0, new UnchangedTargetFramework()); diff --git a/src/Main/Base/Project/Src/Project/IProject.cs b/src/Main/Base/Project/Src/Project/IProject.cs index 421e367c19..e64b99697c 100644 --- a/src/Main/Base/Project/Src/Project/IProject.cs +++ b/src/Main/Base/Project/Src/Project/IProject.cs @@ -273,6 +273,9 @@ namespace ICSharpCode.SharpDevelop.Project /// Saves the project extension content with the specified name. /// void SaveProjectExtensions(string name, XElement element); + + // TODO: + // bool HasProjectType(Guid projectTypeGuid); } /// diff --git a/src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs b/src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs index daea783b75..2bb2fad392 100644 --- a/src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs +++ b/src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs @@ -1625,6 +1625,19 @@ namespace ICSharpCode.SharpDevelop.Project } return formattedText.ToString(); } - #endregion + #endregion + + public override bool HasProjectType(Guid projectTypeGuid) + { + string guidList = GetEvaluatedProperty("ProjectTypeGuids"); + if (string.IsNullOrEmpty(guidList)) + return base.HasProjectType(projectTypeGuid); + foreach (string guid in guidList.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries)) { + Guid result; + if (Guid.TryParse(guid, out result) && projectTypeGuid == result) + return true; + } + return false; + } } } diff --git a/src/Main/Base/Project/Src/Project/MissingProject.cs b/src/Main/Base/Project/Src/Project/MissingProject.cs index 721d8c7d51..1e7bf5f76c 100644 --- a/src/Main/Base/Project/Src/Project/MissingProject.cs +++ b/src/Main/Base/Project/Src/Project/MissingProject.cs @@ -30,5 +30,10 @@ namespace ICSharpCode.SharpDevelop.Project return projectBehavior; } } + + public override bool HasProjectType(Guid projectTypeGuid) + { + return false; + } } } diff --git a/src/Main/Base/Project/Src/Project/PortableLibrary/PortableLibraryProjectBehavior.cs b/src/Main/Base/Project/Src/Project/PortableLibrary/PortableLibraryProjectBehavior.cs new file mode 100644 index 0000000000..614bdc9336 --- /dev/null +++ b/src/Main/Base/Project/Src/Project/PortableLibrary/PortableLibraryProjectBehavior.cs @@ -0,0 +1,38 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using ICSharpCode.SharpDevelop.Project.Converter; + +namespace ICSharpCode.SharpDevelop.Project.PortableLibrary +{ + public class PortableLibraryProjectBehavior : ProjectBehavior + { + public readonly static TargetFramework PortableTargetFramework = new TargetFramework("v4.0Portable", "Portable Library") { + MinimumMSBuildVersion = new Version(4, 0) + }; + + public override IEnumerable GetAvailableCompilerVersions() + { + return base.GetAvailableCompilerVersions().Where(c => c.MSBuildVersion == new Version(4, 0)); + } + + public override IEnumerable GetAvailableTargetFrameworks() + { + return new[] { PortableTargetFramework }; + } + + public override TargetFramework CurrentTargetFramework { + get { return PortableTargetFramework; } + } + + public override void UpgradeProject(CompilerVersion newVersion, TargetFramework newFramework) + { + // can't upgrade portable libraries + } + } +} diff --git a/src/Main/Base/Project/Src/Project/PortableLibrary/Profile.cs b/src/Main/Base/Project/Src/Project/PortableLibrary/Profile.cs new file mode 100644 index 0000000000..0a022660b1 --- /dev/null +++ b/src/Main/Base/Project/Src/Project/PortableLibrary/Profile.cs @@ -0,0 +1,45 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; + +namespace ICSharpCode.SharpDevelop.Project.PortableLibrary +{ + /// + /// Description of Profile. + /// + public class Profile + { + #region Load List of Profiles + static string GetPortableLibraryPath() + { + string programFiles = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86); + return Path.Combine(programFiles, @"Reference Assemblies\Microsoft\Framework\.NETPortable"); + } + + public static IList LoadProfiles() + { + throw new NotImplementedException(); + } + + public static bool IsPortableLibraryInstalled() + { + return Directory.Exists(GetPortableLibraryPath()); + } + #endregion + + public readonly string TargetFrameworkVersion; + public readonly string TargetFrameworkProfile; + public readonly IList SupportedFrameworks; + + public Profile(string targetFrameworkVersion, string targetFrameworkProfile, IList supportedFrameworks) + { + this.TargetFrameworkVersion = targetFrameworkVersion; + this.TargetFrameworkProfile = targetFrameworkProfile; + this.SupportedFrameworks = supportedFrameworks; + } + } +} diff --git a/src/Main/Base/Project/Src/Project/PortableLibrary/SupportedFramework.cs b/src/Main/Base/Project/Src/Project/PortableLibrary/SupportedFramework.cs new file mode 100644 index 0000000000..6cc39d1b1a --- /dev/null +++ b/src/Main/Base/Project/Src/Project/PortableLibrary/SupportedFramework.cs @@ -0,0 +1,36 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; +using System.Xml.Linq; + +namespace ICSharpCode.SharpDevelop.Project.PortableLibrary +{ + /// + /// A supported framework. + /// + public class SupportedFramework + { + public readonly string Identifier; + public readonly string Profile; + public readonly Version MinimumVersion; + public readonly string DisplayName; + + public SupportedFramework(XElement framework) + { + this.Identifier = (string)framework.Attribute("Identifier"); + this.Profile = (string)framework.Attribute("Profile"); + Version.TryParse((string)framework.Attribute("MinimumVersion"), out MinimumVersion); + string displayName = (string)framework.Attribute("DisplayName"); + string minimumVersionDisplayName = (string)framework.Attribute("MinimumVersionDisplayName"); + if (!string.IsNullOrEmpty(minimumVersionDisplayName)) + displayName += " " + minimumVersionDisplayName; + this.DisplayName = displayName; + } + + public override string ToString() + { + return this.DisplayName; + } + } +} diff --git a/src/Main/Base/Project/Src/Project/Solution/Project_TypeGuids.cs b/src/Main/Base/Project/Src/Project/Solution/Project_TypeGuids.cs index 05e0bd1c4f..d73ec0e207 100644 --- a/src/Main/Base/Project/Src/Project/Solution/Project_TypeGuids.cs +++ b/src/Main/Base/Project/Src/Project/Solution/Project_TypeGuids.cs @@ -22,5 +22,6 @@ namespace ICSharpCode.SharpDevelop.Project public const string WebApplication = "{349C5851-65DF-11DA-9384-00065B846F21}"; public const string WebSite = "{E24C65DC-7377-472B-9ABA-BC803B73C61A}"; public const string Silverlight = "{A1591282-1198-4647-A2B1-27E5FF5F6F3B}"; + public static readonly Guid PortableLibrary = Guid.Parse("{786C830F-07A1-408B-BD7F-6EE04809D6DB}"); } } diff --git a/src/Main/Base/Project/Src/Project/TargetFramework.cs b/src/Main/Base/Project/Src/Project/TargetFramework.cs index 4592c2c4e7..a6bad389fd 100644 --- a/src/Main/Base/Project/Src/Project/TargetFramework.cs +++ b/src/Main/Base/Project/Src/Project/TargetFramework.cs @@ -2,6 +2,7 @@ // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) using System; +using ICSharpCode.SharpDevelop.Project.Converter; namespace ICSharpCode.SharpDevelop.Project { @@ -116,6 +117,11 @@ namespace ICSharpCode.SharpDevelop.Project /// public TargetFramework BasedOn { get; set; } + public virtual bool IsCompatibleWith(CompilerVersion compilerVersion) + { + return MinimumMSBuildVersion <= compilerVersion.MSBuildVersion; + } + public bool IsBasedOn(TargetFramework potentialBase) { TargetFramework tmp = this; diff --git a/src/Main/Base/Project/Src/Project/UnknownProject.cs b/src/Main/Base/Project/Src/Project/UnknownProject.cs index efdc1c23e4..ddb1f71da8 100644 --- a/src/Main/Base/Project/Src/Project/UnknownProject.cs +++ b/src/Main/Base/Project/Src/Project/UnknownProject.cs @@ -52,5 +52,10 @@ namespace ICSharpCode.SharpDevelop.Project return projectBehavior; } } + + public override bool HasProjectType(Guid projectTypeGuid) + { + return false; + } } }