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 @@
+
+
+
+
+
+ Portable Library
+ C#
+ C#.Project.Library
+ Library that can be used on Windows, Silverlight, Windows Phone, and Xbox.
+
+
+
+
+
+
+
+
+
+
+ Library
+ Properties
+ v4.0
+ Profile1
+
+
+
+ {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+
+
+
+
+
+
+
+
+
+
+ /// Description of MyClass.
+ ///
+ public class MyClass
+ {
+
+ }
+}]]>
+
+
+
+
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;
+ }
}
}