Browse Source

Improve the "TargetFramework" API:

* List of target frameworks can be extended using the AddInTree.
* CompilableProject no longer needs special-case logic for client profile frameworks.
* ReferenceAssemblies property allows retrieving the list of assemblies that ships with the framework.
pull/326/merge
Daniel Grunwald 12 years ago
parent
commit
8873a2432f
  1. 8
      SharpDevelop.Tests.sln
  2. 9
      src/AddIns/Analysis/CodeCoverage/Test/Testing/OpenCoverApplicationTests.cs
  3. 2
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/CSharpCodeGenerator.cs
  4. 2
      src/AddIns/BackendBindings/WixBinding/Project/Src/Project/WixProject.cs
  5. 11
      src/Main/Base/Project/ICSharpCode.SharpDevelop.addin
  6. 7
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  7. 20
      src/Main/Base/Project/Parser/DomAssemblyName.cs
  8. 12
      src/Main/Base/Project/Project/IProjectService.cs
  9. 4
      src/Main/Base/Project/Project/PortableLibrary/ConvertToPortableLibraryProjectBehavior.cs
  10. 24
      src/Main/Base/Project/Project/PortableLibrary/PickPortableTargetFramework.cs
  11. 2
      src/Main/Base/Project/Project/PortableLibrary/PortableLibraryProjectBehavior.cs
  12. 64
      src/Main/Base/Project/Project/PortableLibrary/PortableTargetFramework.cs
  13. 17
      src/Main/Base/Project/Project/PortableLibrary/Profile.cs
  14. 160
      src/Main/Base/Project/Project/TargetFrameworks/DotNet2x.cs
  15. 125
      src/Main/Base/Project/Project/TargetFrameworks/DotNet4x.cs
  16. 537
      src/Main/Base/Project/Project/TargetFrameworks/RedistLists.cs
  17. 377
      src/Main/Base/Project/Project/TargetFrameworks/TargetFramework.cs
  18. 10
      src/Main/Base/Project/Src/Gui/Dialogs/NewProjectDialog.cs
  19. 4
      src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/BuildAdvanced.xaml.cs
  20. 48
      src/Main/Base/Project/Src/Project/Behaviors/DotNetStartBehavior.cs
  21. 15
      src/Main/Base/Project/Src/Project/CompilableProject.cs
  22. 21
      src/Main/Base/Project/Src/Project/Converter/IUpgradableProject.cs
  23. 21
      src/Main/Base/Project/Src/Project/Converter/UpgradeView.xaml.cs
  24. 189
      src/Main/Base/Project/Src/Project/TargetFramework.cs
  25. 2
      src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs
  26. 35
      src/Main/Base/Project/Util/Versions.cs
  27. 1
      src/Main/Core/Project/ICSharpCode.Core.csproj
  28. 65
      src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/StaticDoozer.cs
  29. 1
      src/Main/Core/Project/Src/AddInTree/AddInTree.cs
  30. 7
      src/Main/SharpDevelop/Dom/ClassBrowser/OpenFromGacDialog.xaml.cs
  31. 11
      src/Main/SharpDevelop/Project/ProjectService.cs
  32. 1
      src/Main/SharpDevelop/SharpDevelop.csproj
  33. 2
      src/Main/SharpDevelop/Templates/Project/ProjectTemplateImpl.cs

8
SharpDevelop.Tests.sln

@ -569,6 +569,10 @@ Global @@ -569,6 +569,10 @@ Global
{7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}.Release|Any CPU.Build.0 = Release|Any CPU
{CBC6C247-747B-4908-B09A-4D2E0F640B6B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CBC6C247-747B-4908-B09A-4D2E0F640B6B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CBC6C247-747B-4908-B09A-4D2E0F640B6B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CBC6C247-747B-4908-B09A-4D2E0F640B6B}.Release|Any CPU.Build.0 = Release|Any CPU
{1D18D788-F7EE-4585-A23B-34DC8EC63CB8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1D18D788-F7EE-4585-A23B-34DC8EC63CB8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1D18D788-F7EE-4585-A23B-34DC8EC63CB8}.Release|Any CPU.ActiveCfg = Release|Any CPU
@ -641,10 +645,6 @@ Global @@ -641,10 +645,6 @@ Global
{3DF4060F-5EE0-41CF-8096-F27355FD5511}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3DF4060F-5EE0-41CF-8096-F27355FD5511}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3DF4060F-5EE0-41CF-8096-F27355FD5511}.Release|Any CPU.Build.0 = Release|Any CPU
{CBC6C247-747B-4908-B09A-4D2E0F640B6B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CBC6C247-747B-4908-B09A-4D2E0F640B6B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CBC6C247-747B-4908-B09A-4D2E0F640B6B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CBC6C247-747B-4908-B09A-4D2E0F640B6B}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

9
src/AddIns/Analysis/CodeCoverage/Test/Testing/OpenCoverApplicationTests.cs

@ -23,8 +23,10 @@ using System.Diagnostics; @@ -23,8 +23,10 @@ using System.Diagnostics;
using ICSharpCode.CodeCoverage;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.UnitTesting;
using NUnit.Framework;
using Rhino.Mocks;
using UnitTesting.Tests.Utils;
namespace ICSharpCode.CodeCoverage.Tests.Testing
@ -38,6 +40,13 @@ namespace ICSharpCode.CodeCoverage.Tests.Testing @@ -38,6 +40,13 @@ namespace ICSharpCode.CodeCoverage.Tests.Testing
OpenCoverSettings openCoverSettings;
MockCSharpProject project;
public override void FixtureSetUp()
{
base.FixtureSetUp();
SD.Services.AddStrictMockService<IProjectService>();
SD.ProjectService.Stub(p => p.TargetFrameworks).Return(new[] { TargetFramework.Net40Client, TargetFramework.Net40 });
}
[Test]
public void FileNameWhenOpenCoverApplicationConstructedWithFileNameParameterMatchesFileNameParameter()
{

2
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/CSharpCodeGenerator.cs

@ -126,7 +126,7 @@ namespace CSharpBinding.Refactoring @@ -126,7 +126,7 @@ namespace CSharpBinding.Refactoring
var attr = new AttributeSection();
attr.AttributeTarget = target;
attr.Attributes.Add(builder.ConvertAttribute(attribute));
script.InsertBefore(node, attr);
script.AddAttribute(node, attr);
}
}

2
src/AddIns/BackendBindings/WixBinding/Project/Src/Project/WixProject.cs

@ -53,6 +53,8 @@ namespace ICSharpCode.WixBinding @@ -53,6 +53,8 @@ namespace ICSharpCode.WixBinding
: base(info)
{
SetProperty("OutputType", "Package");
SetProperty("AssemblyName", null);
this.AssemblyName = info.ProjectName;
AddWixTargetsPathProperties();
AddImport(DefaultTargetsFile, null);
CheckWixIsInstalled();

11
src/Main/Base/Project/ICSharpCode.SharpDevelop.addin

@ -2456,4 +2456,15 @@ @@ -2456,4 +2456,15 @@
<Class id="ConvertToPortableLibraryBehavior" class="ICSharpCode.SharpDevelop.Project.PortableLibrary.ConvertToPortableLibraryProjectBehavior" />
</ComplexCondition>
</Path>
<Path name = "/SharpDevelop/TargetFrameworks">
<Static class="ICSharpCode.SharpDevelop.Project.TargetFramework" member="Net20" />
<Static class="ICSharpCode.SharpDevelop.Project.TargetFramework" member="Net30" />
<Static class="ICSharpCode.SharpDevelop.Project.TargetFramework" member="Net35" />
<Static class="ICSharpCode.SharpDevelop.Project.TargetFramework" member="Net35Client" />
<Static class="ICSharpCode.SharpDevelop.Project.TargetFramework" member="Net40" />
<Static class="ICSharpCode.SharpDevelop.Project.TargetFramework" member="Net40Client" />
<Static class="ICSharpCode.SharpDevelop.Project.TargetFramework" member="Net45" />
<Static class="ICSharpCode.SharpDevelop.Project.TargetFramework" member="Net451" />
</Path>
</AddIn>

7
src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj

@ -208,6 +208,10 @@ @@ -208,6 +208,10 @@
<Compile Include="Project\Project_TypeGuids.cs" />
<Compile Include="Project\SolutionEventArgs.cs" />
<Compile Include="Project\SolutionSection.cs" />
<Compile Include="Project\TargetFrameworks\DotNet2x.cs" />
<Compile Include="Project\TargetFrameworks\RedistLists.cs" />
<Compile Include="Project\TargetFrameworks\TargetFramework.cs" />
<Compile Include="Project\TargetFrameworks\DotNet4x.cs" />
<Compile Include="Refactoring\CodeGenerator.cs" />
<Compile Include="Services\IClipboard.cs" />
<Compile Include="Services\IFileSystem.cs" />
@ -334,6 +338,7 @@ @@ -334,6 +338,7 @@
<Compile Include="Util\SimpleTaskScheduler.cs" />
<Compile Include="Util\TreeNode.cs" />
<Compile Include="Util\UnclosableStream.cs" />
<Compile Include="Util\Versions.cs" />
<Compile Include="WinForms\IClipboardHandler.cs" />
<Compile Include="WinForms\IContextHelpProvider.cs" />
<Compile Include="WinForms\IPrintable.cs" />
@ -563,7 +568,6 @@ @@ -563,7 +568,6 @@
<Compile Include="Src\Project\ProjectLoadException.cs" />
<Compile Include="Src\Project\ProjectPropertyChangedEventArgs.cs" />
<Compile Include="Src\Project\ProjectUpgradeException.cs" />
<Compile Include="Src\Project\TargetFramework.cs" />
<Compile Include="Refactoring\ContextAction.cs" />
<Compile Include="Refactoring\EditorRefactoringContext.cs" />
<Compile Include="Refactoring\IContextAction.cs" />
@ -852,6 +856,7 @@ @@ -852,6 +856,7 @@
<Folder Include="Designer" />
<Folder Include="Dom\ClassBrowser" />
<Folder Include="Editor\ContextActions" />
<Folder Include="Project\TargetFrameworks" />
<Folder Include="Src\Editor\Dialogs" />
<Folder Include="Templates" />
<Folder Include="Project\Configuration" />

20
src/Main/Base/Project/Parser/DomAssemblyName.cs

@ -17,6 +17,7 @@ @@ -17,6 +17,7 @@
// DEALINGS IN THE SOFTWARE.
using System;
using System.Text;
namespace ICSharpCode.SharpDevelop.Parser
{
@ -56,6 +57,25 @@ namespace ICSharpCode.SharpDevelop.Parser @@ -56,6 +57,25 @@ namespace ICSharpCode.SharpDevelop.Parser
}
}
public DomAssemblyName(string shortName, Version version, string publicKeyToken, string culture)
{
this.shortName = shortName;
this.version = version;
this.publicKeyToken = publicKeyToken;
this.culture = culture;
const string sep = ", ";
StringBuilder b = new StringBuilder(shortName);
if (version != null) {
b.Append(sep + "Version=");
b.Append(version.ToString());
}
b.Append(sep + "Culture=");
b.Append(string.IsNullOrEmpty(culture) ? "neutral" : culture);
b.Append(sep + "PublicKeyToken=");
b.Append(publicKeyToken ?? "null");
this.fullAssemblyName = b.ToString();
}
public string FullName {
get { return fullAssemblyName; }
}

12
src/Main/Base/Project/Project/IProjectService.cs

@ -21,6 +21,8 @@ using System.Collections.Generic; @@ -21,6 +21,8 @@ using System.Collections.Generic;
using System.ComponentModel;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Project.Converter;
using ICSharpCode.SharpDevelop.Project.PortableLibrary;
namespace ICSharpCode.SharpDevelop.Project
{
@ -158,6 +160,16 @@ namespace ICSharpCode.SharpDevelop.Project @@ -158,6 +160,16 @@ namespace ICSharpCode.SharpDevelop.Project
event EventHandler<ProjectItemEventArgs> ProjectItemAdded;
event EventHandler<ProjectItemEventArgs> ProjectItemRemoved;
/// <summary>
/// Gets the list of registered .NET target frameworks.
/// This is the list that is supposed to be displayed to the user when selecting a target framework.
/// It corresponds to the AddInTree path '/SharpDevelop/TargetFrameworks'.
///
/// Note that in the project upgrade view, <see cref="IUpgradableProject.GetAvailableTargetFrameworks"/> is used instead.
/// Some target framework types (such as 'portable library') might be added by project behaviors, and are not available in this list.
/// </summary>
IReadOnlyList<TargetFramework> TargetFrameworks { get; }
/// <summary>
/// Gets the list of registered project bindings.
/// </summary>

4
src/Main/Base/Project/Project/PortableLibrary/ConvertToPortableLibraryProjectBehavior.cs

@ -44,6 +44,7 @@ namespace ICSharpCode.SharpDevelop.Project.PortableLibrary @@ -44,6 +44,7 @@ namespace ICSharpCode.SharpDevelop.Project.PortableLibrary
SD.AnalyticsMonitor.TrackFeature(GetType(), "ConvertToPortableLibrary");
var project = (CompilableProject)Project;
lock (project.SyncRoot) {
var oldTargetFramework = project.CurrentTargetFramework;
if (newVersion != null && GetAvailableCompilerVersions().Contains(newVersion)) {
project.ToolsVersion = newVersion.MSBuildVersion.Major + "." + newVersion.MSBuildVersion.Minor;
}
@ -68,8 +69,7 @@ namespace ICSharpCode.SharpDevelop.Project.PortableLibrary @@ -68,8 +69,7 @@ namespace ICSharpCode.SharpDevelop.Project.PortableLibrary
string assemblyName = referenceItem.Include;
if (assemblyName.IndexOf(',') >= 0)
assemblyName = assemblyName.Substring(0, assemblyName.IndexOf(','));
assemblyName += ",";
if (KnownFrameworkAssemblies.FullAssemblyNames.Any(fullName => fullName.StartsWith(assemblyName, StringComparison.OrdinalIgnoreCase))) {
if (oldTargetFramework.ReferenceAssemblies.Any(fullName => string.Equals(fullName.ShortName, assemblyName, StringComparison.OrdinalIgnoreCase))) {
// If it's a framework assembly, remove the reference
// (portable libraries automatically reference all available framework assemblies)
ProjectService.RemoveProjectItem(project, referenceItem);

24
src/Main/Base/Project/Project/PortableLibrary/PickPortableTargetFramework.cs

@ -32,10 +32,26 @@ namespace ICSharpCode.SharpDevelop.Project.PortableLibrary @@ -32,10 +32,26 @@ namespace ICSharpCode.SharpDevelop.Project.PortableLibrary
/// </summary>
sealed class PickPortableTargetFramework : TargetFramework
{
public PickPortableTargetFramework()
: base("PickPortableTargetFramework", Profile.PortableSubsetDisplayName + StringParser.Parse(" (${res:PortableLibrary.ChooseTargetFrameworks})"))
{
this.MinimumMSBuildVersion = new Version(4, 0);
public override string TargetFrameworkVersion {
get { return "PickPortableTargetFramework"; }
}
public override string DisplayName {
get {
return Profile.PortableSubsetDisplayName + StringParser.Parse(" (${res:PortableLibrary.ChooseTargetFrameworks})");
}
}
public override Version Version {
get {
return new Version(4, 0);
}
}
public override Version MinimumMSBuildVersion {
get {
return new Version(4, 0);
}
}
public override bool Equals(object obj)

2
src/Main/Base/Project/Project/PortableLibrary/PortableLibraryProjectBehavior.cs

@ -83,7 +83,7 @@ namespace ICSharpCode.SharpDevelop.Project.PortableLibrary @@ -83,7 +83,7 @@ namespace ICSharpCode.SharpDevelop.Project.PortableLibrary
project.RemoveProjectType(ProjectTypeGuids.PortableLibrary);
AddReferenceIfNotExists("System");
AddReferenceIfNotExists("System.Xml");
if (newFramework.IsBasedOn(TargetFramework.Net35) || newFramework.IsBasedOn(TargetFramework.Net35Client))
if (newFramework.Version >= Versions.V3_5)
AddReferenceIfNotExists("System.Core");
base.UpgradeProject(newVersion, newFramework);
return;

64
src/Main/Base/Project/Project/PortableLibrary/PortableTargetFramework.cs

@ -23,28 +23,68 @@ using System.IO; @@ -23,28 +23,68 @@ using System.IO;
using System.Linq;
using System.Xml;
using System.Xml.Linq;
using ICSharpCode.NRefactory;
using ICSharpCode.SharpDevelop.Parser;
namespace ICSharpCode.SharpDevelop.Project.PortableLibrary
{
public class PortableTargetFramework : TargetFramework
{
public readonly string TargetFrameworkVersion;
public readonly string TargetFrameworkProfile;
readonly string targetFrameworkVersion;
readonly string targetFrameworkProfile;
readonly string displayName;
readonly IReadOnlyList<DomAssemblyName> redistList;
public PortableTargetFramework(string targetFrameworkVersion, string targetFrameworkProfile)
: base(targetFrameworkVersion + "-" + targetFrameworkProfile, Profile.PortableSubsetDisplayName + " (" + targetFrameworkVersion + "-" + targetFrameworkProfile + ")")
/// <summary>
/// Creates a new PortableTargetFramework instance for the given profile.
/// </summary>
public PortableTargetFramework(Profile profile)
{
this.TargetFrameworkVersion = targetFrameworkVersion;
this.TargetFrameworkProfile = targetFrameworkProfile;
this.MinimumMSBuildVersion = new Version(4, 0);
this.targetFrameworkVersion = profile.TargetFrameworkVersion;
this.targetFrameworkProfile = profile.TargetFrameworkProfile;
this.displayName = profile.DisplayName;
this.redistList = profile.ReferenceAssemblies;
}
public PortableTargetFramework(Profile profile)
: base(profile.TargetFrameworkVersion + "-" + profile.TargetFrameworkProfile, profile.DisplayName)
/// <summary>
/// Creates a new PortableTargetFramework for a profile that is not installed.
/// </summary>
public PortableTargetFramework(string targetFrameworkVersion, string targetFrameworkProfile)
{
this.TargetFrameworkVersion = profile.TargetFrameworkVersion;
this.TargetFrameworkProfile = profile.TargetFrameworkProfile;
this.MinimumMSBuildVersion = new Version(4, 0);
this.targetFrameworkVersion = targetFrameworkVersion;
this.targetFrameworkProfile = targetFrameworkProfile;
this.displayName = Profile.PortableSubsetDisplayName + " (" + targetFrameworkVersion + "-" + targetFrameworkProfile + ")";
this.redistList = EmptyList<DomAssemblyName>.Instance;
}
public override string TargetFrameworkVersion {
get { return targetFrameworkVersion; }
}
public override string TargetFrameworkProfile {
get { return targetFrameworkProfile; }
}
public override string DisplayName {
get { return displayName; }
}
public override Version Version {
get {
switch (targetFrameworkVersion) {
case "v4.0":
return Versions.V4_0;
case "v4.5":
default:
return Versions.V4_5;
}
}
}
public override Version MinimumMSBuildVersion {
get {
return new Version(4, 0);
}
}
public override bool Equals(object obj)

17
src/Main/Base/Project/Project/PortableLibrary/Profile.cs

@ -25,6 +25,7 @@ using System.Text; @@ -25,6 +25,7 @@ using System.Text;
using System.Xml;
using System.Xml.Linq;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Parser;
namespace ICSharpCode.SharpDevelop.Project.PortableLibrary
{
@ -47,10 +48,11 @@ namespace ICSharpCode.SharpDevelop.Project.PortableLibrary @@ -47,10 +48,11 @@ namespace ICSharpCode.SharpDevelop.Project.PortableLibrary
XDocument doc = XDocument.Load(frameworkFile);
frameworks.Add(new SupportedFramework(doc.Root));
}
if (frameworks.Count > 0)
return new Profile(targetFrameworkVersion, targetFrameworkProfile, frameworks);
else
if (frameworks.Count == 0)
return null;
string redistListFileName = Path.Combine(profileDir, "RedistList", "FrameworkList.xml");
var redistList = TargetFramework.ReadRedistList(redistListFileName);
return new Profile(targetFrameworkVersion, targetFrameworkProfile, frameworks, redistList);
} catch (XmlException) {
return null;
} catch (IOException) {
@ -59,12 +61,14 @@ namespace ICSharpCode.SharpDevelop.Project.PortableLibrary @@ -59,12 +61,14 @@ namespace ICSharpCode.SharpDevelop.Project.PortableLibrary
return null;
}
}
// These must be properties for WPF data binding
public string TargetFrameworkVersion { get; private set; }
public string TargetFrameworkProfile { get; private set; }
public string DisplayName { get; private set; }
public IList<SupportedFramework> SupportedFrameworks { get; private set; }
public IReadOnlyList<SupportedFramework> SupportedFrameworks { get; private set; }
public IReadOnlyList<DomAssemblyName> ReferenceAssemblies { get; private set; }
/// <summary>
/// Returns ".NET Portable Subset" localized
@ -75,11 +79,12 @@ namespace ICSharpCode.SharpDevelop.Project.PortableLibrary @@ -75,11 +79,12 @@ namespace ICSharpCode.SharpDevelop.Project.PortableLibrary
}
}
public Profile(string targetFrameworkVersion, string targetFrameworkProfile, IList<SupportedFramework> supportedFrameworks)
public Profile(string targetFrameworkVersion, string targetFrameworkProfile, IReadOnlyList<SupportedFramework> supportedFrameworks, IReadOnlyList<DomAssemblyName> referenceAssemblies)
{
this.TargetFrameworkVersion = targetFrameworkVersion;
this.TargetFrameworkProfile = targetFrameworkProfile;
this.SupportedFrameworks = supportedFrameworks;
this.ReferenceAssemblies = referenceAssemblies;
this.DisplayName = PortableSubsetDisplayName + " (" + string.Join(", ", supportedFrameworks) + ")";
}

160
src/Main/Base/Project/Project/TargetFrameworks/DotNet2x.cs

@ -0,0 +1,160 @@ @@ -0,0 +1,160 @@
// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System;
using System.Collections.Generic;
using ICSharpCode.SharpDevelop.Parser;
namespace ICSharpCode.SharpDevelop.Project.TargetFrameworks
{
/// <summary>
/// Desktop Framework based on the .NET 2.0 runtime. (.NET 2.x/3.x)
/// </summary>
abstract class DotNet2x : TargetFramework
{
public override bool IsDesktopFramework {
get { return true; }
}
public override string SupportedRuntimeVersion {
get { return "v2.0.50727"; }
}
public override bool IsAvailable()
{
// .NET 2.0/3.0/3.5 can only be used if .NET 3.5 SP1 is installed
return DotnetDetection.IsDotnet35SP1Installed();
}
public override bool IsBasedOn(TargetFramework fx)
{
// This implementation is used for all non-client versions of .NET 2.x/3.x
return fx != null && fx.IsDesktopFramework && fx.Version <= this.Version;
}
}
sealed class DotNet20 : DotNet2x
{
public override string TargetFrameworkVersion {
get { return "v2.0"; }
}
public override string DisplayName {
get { return ".NET Framework 2.0";}
}
public override Version Version {
get { return Versions.V2_0; }
}
public override Version MinimumMSBuildVersion {
get { return Versions.V2_0; }
}
public override IReadOnlyList<DomAssemblyName> ReferenceAssemblies {
get { return RedistLists.Net20; }
}
}
sealed class DotNet30 : DotNet2x
{
public override string TargetFrameworkVersion {
get { return "v3.0"; }
}
public override string DisplayName {
get { return ".NET Framework 3.0";}
}
public override Version Version {
get { return Versions.V3_0; }
}
public override Version MinimumMSBuildVersion {
get { return Versions.V3_5; }
}
public override IReadOnlyList<DomAssemblyName> ReferenceAssemblies {
get { return RedistLists.Net30; }
}
}
sealed class DotNet35 : DotNet2x
{
public override string TargetFrameworkVersion {
get { return "v3.5"; }
}
public override string DisplayName {
get { return ".NET Framework 3.5";}
}
public override Version Version {
get { return Versions.V3_5; }
}
public override Version MinimumMSBuildVersion {
get { return Versions.V3_5; }
}
public override IReadOnlyList<DomAssemblyName> ReferenceAssemblies {
get { return RedistLists.Net35; }
}
}
sealed class DotNet35Client : DotNet2x
{
public override string TargetFrameworkVersion {
get { return "v3.5"; }
}
public override string TargetFrameworkProfile {
get { return "Client"; }
}
public override string DisplayName {
get { return ".NET Framework 3.5 Client Profile";}
}
public override string SupportedSku {
get { return "Client"; }
}
public override bool RequiresAppConfigEntry {
get { return true; }
}
public override Version Version {
get { return Versions.V3_5; }
}
public override Version MinimumMSBuildVersion {
get { return Versions.V3_5; }
}
public override IReadOnlyList<DomAssemblyName> ReferenceAssemblies {
get { return RedistLists.Net35Client; }
}
public override bool IsBasedOn(TargetFramework fx)
{
// 3.5 Client was the first client profile
return fx == this;
}
}
}

125
src/Main/Base/Project/Project/TargetFrameworks/DotNet4x.cs

@ -0,0 +1,125 @@ @@ -0,0 +1,125 @@
// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System;
using System.Collections.Generic;
using ICSharpCode.SharpDevelop.Parser;
namespace ICSharpCode.SharpDevelop.Project
{
/// <summary>
/// Desktop Framework based on the .NET 4.0 runtime.
/// The client profile framework derives from this class.
/// </summary>
class DotNet4x : TargetFramework
{
readonly Version version;
readonly string targetFrameworkVersion;
readonly string displayName;
readonly IReadOnlyList<DomAssemblyName> redistList;
readonly Func<bool> isAvailable;
public DotNet4x(Version version, IReadOnlyList<DomAssemblyName> redistList, Func<bool> isAvailable)
{
this.version = version;
this.targetFrameworkVersion = "v" + version;
this.displayName = ".NET Framework " + version;
this.redistList = redistList;
this.isAvailable = isAvailable;
}
public override string TargetFrameworkVersion {
get { return targetFrameworkVersion; }
}
public override string DisplayName {
get { return displayName; }
}
public override Version Version {
get { return version; }
}
public override bool IsAvailable()
{
return isAvailable();
}
public override Version MinimumMSBuildVersion {
get { return Versions.V4_0; }
}
public override string SupportedRuntimeVersion {
get { return "v4.0"; }
}
public override string SupportedSku {
get {
string sku = ".NETFramework,Version=" + this.TargetFrameworkVersion;
if (!string.IsNullOrEmpty(this.TargetFrameworkProfile))
sku += ",Profile=" + this.TargetFrameworkProfile;
return sku;
}
}
public override bool RequiresAppConfigEntry {
get { return true; }
}
public override bool IsDesktopFramework {
get { return true; }
}
public override IReadOnlyList<DomAssemblyName> ReferenceAssemblies {
get { return redistList; }
}
public override bool IsBasedOn(TargetFramework fx)
{
// This implementation is used for all non-client versions of .NET 4.x
return fx != null && fx.IsDesktopFramework && fx.Version <= this.Version;
}
}
/// <summary>
/// Desktop Framework based on the .NET 4.0 runtime, client profile.
/// </summary>
class DotNet4xClient : DotNet4x
{
public DotNet4xClient(Version version, IReadOnlyList<DomAssemblyName> redistList, Func<bool> isAvailable)
: base(version, redistList, isAvailable)
{
}
public override string DisplayName {
get {
return base.DisplayName + " Client Profile";
}
}
public override string TargetFrameworkProfile {
get { return "Client"; }
}
public override bool IsBasedOn(TargetFramework fx)
{
// This implementation is used for all non-client versions of .NET 4.x
return fx != null && fx.IsDesktopFramework && fx.TargetFrameworkProfile == "Client" && fx.Version <= this.Version;
}
}
}

537
src/Main/Base/Project/Project/TargetFrameworks/RedistLists.cs

@ -0,0 +1,537 @@ @@ -0,0 +1,537 @@
// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System;
using System.Collections.Generic;
using System.Linq;
using ICSharpCode.SharpDevelop.Parser;
namespace ICSharpCode.SharpDevelop.Project.TargetFrameworks
{
static class RedistLists
{
static IReadOnlyList<DomAssemblyName> MakeList(params string[] assemblyNames)
{
return Array.ConvertAll(assemblyNames, n => new DomAssemblyName(n));
}
public static readonly IReadOnlyList<DomAssemblyName> Net20 = MakeList(
"Accessibility, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"CustomMarshalers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"ISymWrapper, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.Build.Engine, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.Build.Framework, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.Build.Tasks, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.Build.Utilities, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.JScript, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.VisualBasic.Compatibility, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.VisualBasic.Compatibility.Data, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.VisualBasic.Vsa, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.VisualC, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.Vsa, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"sysglobl, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Configuration.Install, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data.SqlXml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Deployment, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.DirectoryServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.DirectoryServices.Protocols, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Drawing.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.EnterpriseServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Management, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Messaging, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Runtime.Remoting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Runtime.Serialization.Formatters.Soap, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Security, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.ServiceProcess, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Transactions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Web.Mobile, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Web.RegularExpressions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Web.Services, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
);
public static readonly IReadOnlyList<DomAssemblyName> Net30 = Net20.Concat(MakeList(
"PresentationBuildTasks, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"PresentationCFFRasterizer, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"PresentationCore, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"PresentationFramework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"PresentationFramework.Aero, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"PresentationFramework.Classic, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"PresentationFramework.Luna, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"PresentationFramework.Royale, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"PresentationUI, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"ReachFramework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.IdentityModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.IdentityModel.Selectors, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.IO.Log, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Printing, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Runtime.Serialization, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Speech, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Workflow.Activities, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Workflow.ComponentModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Workflow.Runtime, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"UIAutomationClient, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"UIAutomationClientsideProviders, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"UIAutomationProvider, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"UIAutomationTypes, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"WindowsBase, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"WindowsFormsIntegration, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
)).ToArray();
public static readonly IReadOnlyList<DomAssemblyName> Net35 = Net30.Concat(MakeList(
"Microsoft.Build.Conversion.v3.5, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.Build.Engine, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.Build.Framework, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.Build.Tasks.v3.5, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.Build.Utilities.v3.5, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.VisualC.STLCLR, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Sentinel.v3.5Client, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.AddIn, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.AddIn.Contract, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.ComponentModel.DataAnnotations, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data.Entity, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data.Entity.Design, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data.Services, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data.Services.Client, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data.Services.Design, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.DirectoryServices.AccountManagement, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Management.Instrumentation, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Net, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.ServiceModel.Web, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Web.Abstractions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Web.DynamicData, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Web.DynamicData.Design, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Web.Entity, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Web.Entity.Design, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Web.Extensions.Design, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Windows.Presentation, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.WorkflowServices, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
)).ToArray();
public static readonly IReadOnlyList<DomAssemblyName> Net35Client = MakeList(
"Accessibility, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"CustomMarshalers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"ISymWrapper, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.JScript, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.VisualC, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.Vsa, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"PresentationCore, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"PresentationFramework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"PresentationFramework.Aero, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"PresentationFramework.Classic, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"PresentationFramework.Luna, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"PresentationFramework.Royale, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"ReachFramework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.AddIn, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.AddIn.Contract, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Configuration.Install, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data.Services.Client, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data.SqlXml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Deployment, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.DirectoryServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.EnterpriseServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.IdentityModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Management, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Messaging, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Net, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Printing, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Runtime.Remoting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Runtime.Serialization, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Runtime.Serialization.Formatters.Soap, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Security, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.ServiceModel.Web, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.ServiceProcess, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Transactions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Web.Services, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Windows.Presentation, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"UIAutomationClient, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"UIAutomationClientsideProviders, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"UIAutomationProvider, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"UIAutomationTypes, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"WindowsBase, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"WindowsFormsIntegration, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
);
public static readonly IReadOnlyList<DomAssemblyName> Net40Client = MakeList(
"Accessibility, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"CustomMarshalers, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.JScript, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.VisualBasic, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.VisualBasic.Compatibility, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.VisualBasic.Compatibility.Data, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.VisualC, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"PresentationCore, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"PresentationFramework.Aero, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"PresentationFramework.Classic, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"PresentationFramework.Luna, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"PresentationFramework.Royale, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"ReachFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"sysglobl, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Activities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Activities.Core.Presentation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Activities.DurableInstancing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Activities.Presentation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.AddIn, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.AddIn.Contract, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.ComponentModel.Composition, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Configuration.Install, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data.DataSetExtensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data.Services.Client, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data.SqlXml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Deployment, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Device, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.DirectoryServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.DirectoryServices.AccountManagement, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.DirectoryServices.Protocols, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Dynamic, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.IdentityModel.Selectors, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.IO.Log, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Management, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Management.Instrumentation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Messaging, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Net, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Printing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Runtime.DurableInstancing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Runtime.Serialization.Formatters.Soap, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.ServiceModel.Activities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.ServiceModel.Channels, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.ServiceModel.Discovery, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.ServiceModel.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.ServiceProcess, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Speech, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Web.ApplicationServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Web.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Windows.Forms.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Windows.Input.Manipulations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Windows.Presentation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Xaml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"UIAutomationClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"UIAutomationClientsideProviders, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"UIAutomationProvider, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"UIAutomationTypes, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"WindowsFormsIntegration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
);
public static readonly IReadOnlyList<DomAssemblyName> Net40 = MakeList(
"Accessibility, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"CustomMarshalers, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"ISymWrapper, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.Build, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.Build.Conversion.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.Build.Engine, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.Build.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.Build.Utilities.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.JScript, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.VisualBasic, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.VisualBasic.Compatibility, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.VisualBasic.Compatibility.Data, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.VisualC, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.VisualC.STLCLR, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"PresentationBuildTasks, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"PresentationCore, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"PresentationFramework.Aero, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"PresentationFramework.Classic, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"PresentationFramework.Luna, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"PresentationFramework.Royale, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"ReachFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"sysglobl, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Activities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Activities.Core.Presentation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Activities.DurableInstancing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Activities.Presentation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.AddIn, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.AddIn.Contract, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.ComponentModel.Composition, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Configuration.Install, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data.DataSetExtensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data.Entity.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data.OracleClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data.Services.Client, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data.Services.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data.SqlXml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Deployment, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Device, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.DirectoryServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.DirectoryServices.AccountManagement, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.DirectoryServices.Protocols, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Drawing.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Dynamic, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.IdentityModel.Selectors, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.IO.Log, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Management, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Management.Instrumentation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Messaging, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Net, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Printing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Runtime.Caching, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Runtime.DurableInstancing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Runtime.Serialization.Formatters.Soap, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.ServiceModel.Activities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.ServiceModel.Channels, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.ServiceModel.Discovery, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.ServiceModel.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.ServiceProcess, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Speech, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Web.ApplicationServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Web.DataVisualization.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Web.DynamicData, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Web.DynamicData.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Web.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Web.Entity.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Web.Extensions.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Web.Mobile, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Web.RegularExpressions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Web.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Windows.Forms.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Windows.Forms.DataVisualization.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Windows.Input.Manipulations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Windows.Presentation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Workflow.Activities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Workflow.ComponentModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Workflow.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.WorkflowServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Xaml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"UIAutomationClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"UIAutomationClientsideProviders, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"UIAutomationProvider, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"UIAutomationTypes, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"WindowsFormsIntegration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"XamlBuildTask, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
);
public static readonly IReadOnlyList<DomAssemblyName> Net45 = MakeList(
"Accessibility, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"CustomMarshalers, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"ISymWrapper, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.Activities.Build, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"Microsoft.Build, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.Build.Conversion.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.Build.Engine, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.Build.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.Build.Utilities.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.JScript, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.VisualBasic, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.VisualBasic.Compatibility, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.VisualBasic.Compatibility.Data, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.VisualC, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"Microsoft.VisualC.STLCLR, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"PresentationBuildTasks, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"PresentationCore, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"PresentationFramework.Aero, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"PresentationFramework.Aero2, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"PresentationFramework.AeroLite, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"PresentationFramework.Classic, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"PresentationFramework.Luna, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"PresentationFramework.Royale, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"ReachFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"sysglobl, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Activities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Activities.Core.Presentation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Activities.DurableInstancing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Activities.Presentation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Activities.Statements, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.AddIn, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.AddIn.Contract, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.ComponentModel.Composition, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.ComponentModel.Composition.Registration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Configuration.Install, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data.DataSetExtensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data.Entity.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data.OracleClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data.Services.Client, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data.Services.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Data.SqlXml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Deployment, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Device, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.DirectoryServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.DirectoryServices.AccountManagement, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.DirectoryServices.Protocols, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Drawing.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Dynamic, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.IdentityModel.Selectors, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.IO.Compression, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.IO.Compression.FileSystem, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.IO.Log, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Management, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Management.Instrumentation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Messaging, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Net, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Net.Http.WebRequest, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Printing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Reflection.Context, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Runtime.Caching, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Runtime.DurableInstancing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Runtime.Serialization.Formatters.Soap, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.ServiceModel.Activities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.ServiceModel.Channels, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.ServiceModel.Discovery, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.ServiceModel.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.ServiceProcess, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Speech, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Web.ApplicationServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Web.DataVisualization.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Web.DynamicData, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Web.DynamicData.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Web.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Web.Entity.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Web.Extensions.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Web.Mobile, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Web.RegularExpressions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Web.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Windows, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Windows.Controls.Ribbon, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Windows.Forms.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Windows.Forms.DataVisualization.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Windows.Input.Manipulations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Windows.Presentation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Workflow.Activities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Workflow.ComponentModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Workflow.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.WorkflowServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Xaml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Xml.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"UIAutomationClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"UIAutomationClientsideProviders, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"UIAutomationProvider, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"UIAutomationTypes, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"WindowsFormsIntegration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"XamlBuildTask, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
);
}
}

377
src/Main/Base/Project/Project/TargetFrameworks/TargetFramework.cs

@ -0,0 +1,377 @@ @@ -0,0 +1,377 @@
// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;
using ICSharpCode.NRefactory;
using ICSharpCode.SharpDevelop.Parser;
using ICSharpCode.SharpDevelop.Project.Converter;
using ICSharpCode.SharpDevelop.Project.TargetFrameworks;
namespace ICSharpCode.SharpDevelop.Project
{
public abstract class TargetFramework
{
public static readonly TargetFramework Net20 = new DotNet20();
public static readonly TargetFramework Net30 = new DotNet30();
public static readonly TargetFramework Net35 = new DotNet35();
public static readonly TargetFramework Net35Client = new DotNet35Client();
public static readonly TargetFramework Net40 = new DotNet4x(Versions.V4_0, RedistLists.Net40, DotnetDetection.IsDotnet40Installed);
public static readonly TargetFramework Net40Client = new DotNet4xClient(Versions.V4_0, RedistLists.Net40Client, DotnetDetection.IsDotnet40Installed);
public static readonly TargetFramework Net45 = new DotNet4x(Versions.V4_5, RedistLists.Net45, DotnetDetection.IsDotnet45Installed);
public static readonly TargetFramework Net451 = new DotNet4x(Versions.V4_5_1, RedistLists.Net45, DotnetDetection.IsDotnet451Installed);
/// <summary>
/// Retrieves a target framework by a 'name'.
/// Used by the .xpt project system; please do not use anywhere else.
/// </summary>
internal static TargetFramework GetByName(string name)
{
foreach (var fx in SD.ProjectService.TargetFrameworks) {
// Yes, put version + profile together without any separator... that's how we indicated the Client profiles in SD 4.x and the .xpt file format
if (fx.TargetFrameworkVersion + fx.TargetFrameworkProfile == name)
return fx;
}
return null;
}
internal const string DefaultTargetFrameworkVersion = "v4.0";
internal const string DefaultTargetFrameworkProfile = "";
/// <summary>
/// Gets the name of the target framework.
/// This is used in the project's &lt;TargetFrameworkVersion&gt; element.
/// </summary>
public abstract string TargetFrameworkVersion { get; }
/// <summary>
/// Gets the profile of the target framework.
/// This is used in the project's &lt;TargetFrameworkProfile&gt; element.
///
/// Returns the empty string if no profile name is in use.
/// </summary>
public virtual string TargetFrameworkProfile {
get { return string.Empty; }
}
/// <summary>
/// Gets the corresponding .NET desktop framework version.
/// If this target framework is not a .NET desktop version, gets the closest corresponding version.
/// </summary>
public abstract Version Version { get; }
/// <summary>
/// Gets the display name of the target framework.
/// </summary>
public virtual string DisplayName {
get { return this.TargetFrameworkVersion; }
}
/// <summary>
/// Gets the minimum MSBuild version required to build projects with this target framework.
/// </summary>
public abstract Version MinimumMSBuildVersion { get; } // TODO: maybe remove this property?
/// <summary>
/// Gets whether this is the MS.NET Framework for the desktop. (not Mono, not WinPhone/Win8 app/portable library/...)
/// </summary>
public virtual bool IsDesktopFramework {
get { return false; }
}
public virtual bool Supports32BitPreferredOption {
get { return Version >= Versions.V4_5; }
}
/// <summary>
/// Supported runtime version string for app.config
/// </summary>
public virtual string SupportedRuntimeVersion {
get { return null; }
}
/// <summary>
/// Supported SKU string for app.config.
/// </summary>
public virtual string SupportedSku {
get { return null; }
}
/// <summary>
/// Specifies whether this target framework requires an explicit app.config entry.
/// </summary>
public virtual bool RequiresAppConfigEntry {
get { return false; }
}
/// <summary>
/// Gets whether this target framework in an "improved version" of the specified framework.
/// This should usually return whether this framework is (mostly) backward-compatible with the specified framework.
/// </summary>
/// <remarks>The 'IsBasedOn' relation should be reflexive and transitive.</remarks>
public virtual bool IsBasedOn(TargetFramework fx)
{
return fx == this;
}
/// <summary>
/// Gets whether the runtime for the specified target framework is available on this machine.
/// This method controls whether the target framework is visible to the user.
///
/// Note: for the desktop frameworks, this method tests for run-time availability; it does not check if the reference assemblies are present.
/// </summary>
public virtual bool IsAvailable()
{
return true;
}
/* We might implement+use this API in the future if we want to notify the user about missing reference assemblies.
/// <summary>
/// Tests whether the reference assemblies for this framework are installed on this machine.
/// </summary>
public virtual bool ReferenceAssembliesAvailable()
{
return true;
}
/// <summary>
/// Returns the URL where the reference assemblies can be download.
/// May return null if the download location is unknown.
/// </summary>
public virtual Uri ReferenceAssemblyDownloadLocation {
get { return null; }
}
/// <summary>
/// Returns the name of the product that contains the reference assemblies for this framework. (for example: "Windows SDK x.y")
/// May return null if the source for the reference assemblies is unknown.
/// </summary>
public virtual string ReferenceAssemblyDownloadVehicle {
get { return null; }
}
*/
/// <summary>
/// Retrieves the list of reference assemblies for this framework.
/// May return an empty list if the reference assemblies are not installed.
/// </summary>
public virtual IReadOnlyList<DomAssemblyName> ReferenceAssemblies {
get {
return EmptyList<DomAssemblyName>.Instance;
}
}
/// <summary>
/// Reads the 'RedistList/FrameworkList.xml' file with the specified file name.
/// </summary>
public static IReadOnlyList<DomAssemblyName> ReadRedistList(string redistListFileName)
{
List<DomAssemblyName> list = new List<DomAssemblyName>();
XDocument doc = XDocument.Load(redistListFileName);
foreach (var file in doc.Root.Elements()) {
string assemblyName = (string)file.Attribute("AssemblyName");
string version = (string)file.Attribute("Version");
string publicKeyToken = (string)file.Attribute("PublicKeyToken");
string culture = (string)file.Attribute("Culture");
//string processorArchitecture = (string)file.Attribute("ProcessorArchitecture");
if ((string)file.Attribute("InGAC") == "false" || (string)file.Attribute("InGac") == "false") {
// Ignore assemblies not in GAC.
// Note that casing of 'InGAC'/'InGac' is inconsistent between different .NET versions
continue;
}
list.Add(new DomAssemblyName(assemblyName, Version.Parse(version), publicKeyToken, culture));
}
return list;
}
/// <summary>
/// Shows a dialog to pick the target framework.
/// This method is called by the UpgradeView 'convert' button to retrieve the actual target framework
/// </summary>
public virtual TargetFramework PickFramework(IEnumerable<IUpgradableProject> selectedProjects)
{
return this;
}
public override string ToString()
{
return DisplayName;
}
}
/*
public class TargetFramework
{
public readonly static TargetFramework Net20 = new TargetFramework("v2.0", ".NET Framework 2.0") {
SupportedRuntimeVersion = "v2.0.50727",
MinimumMSBuildVersion = new Version(2, 0),
// .NET 2.0/3.0/3.5 can only be used if .NET 3.5 SP1 is installed
IsAvailable = DotnetDetection.IsDotnet35SP1Installed
};
public readonly static TargetFramework Net30 = new TargetFramework("v3.0", ".NET Framework 3.0") {
SupportedRuntimeVersion = "v2.0.50727",
BasedOn = Net20,
MinimumMSBuildVersion = new Version(3, 5)
};
public readonly static TargetFramework Net35 = new TargetFramework("v3.5", ".NET Framework 3.5") {
SupportedRuntimeVersion = "v2.0.50727",
BasedOn = Net30,
MinimumMSBuildVersion = new Version(3, 5)
};
public readonly static TargetFramework Net35Client = new ClientProfileTargetFramework(Net35) {
RequiresAppConfigEntry = true
};
public readonly static TargetFramework Net40 = new TargetFramework("v4.0", ".NET Framework 4.0") {
BasedOn = Net35,
MinimumMSBuildVersion = new Version(4, 0),
SupportedSku = ".NETFramework,Version=v4.0",
RequiresAppConfigEntry = true,
IsAvailable = DotnetDetection.IsDotnet40Installed
};
public readonly static TargetFramework Net40Client = new ClientProfileTargetFramework(Net40) {
BasedOn = Net35Client
};
public readonly static TargetFramework Net45 = new TargetFramework("v4.5", ".NET Framework 4.5") {
BasedOn = Net40,
MinimumMSBuildVersion = new Version(4, 0),
SupportedRuntimeVersion = "v4.0",
SupportedSku = ".NETFramework,Version=v4.5",
RequiresAppConfigEntry = true,
IsAvailable = DotnetDetection.IsDotnet45Installed
};
public readonly static TargetFramework Net451 = new TargetFramework("v4.5.1", ".NET Framework 4.5.1") {
BasedOn = Net45,
MinimumMSBuildVersion = new Version(4, 0),
SupportedRuntimeVersion = "v4.0",
SupportedSku = ".NETFramework,Version=v4.5.1",
RequiresAppConfigEntry = true,
IsAvailable = DotnetDetection.IsDotnet451Installed
};
public readonly static TargetFramework[] TargetFrameworks = {
Net451, Net45, Net40, Net40Client, Net35, Net35Client, Net30, Net20
};
public readonly static TargetFramework DefaultTargetFramework = Net40Client;
public static TargetFramework GetByName(string name)
{
foreach (TargetFramework tf in TargetFrameworks) {
if (tf.Name == name)
return tf;
}
throw new ArgumentException("No target framework '" + name + "' exists");
}
string name, displayName;
public TargetFramework(string name, string displayName)
{
this.name = name;
this.displayName = displayName;
this.SupportedRuntimeVersion = name;
this.IsAvailable = delegate {
if (this.BasedOn != null)
return this.BasedOn.IsAvailable();
else
return true;
};
}
public string Name {
get { return name; }
}
public string DisplayName {
get { return displayName; }
}
/// <summary>
/// Function that determines if this target framework is available.
/// </summary>
public Func<bool> IsAvailable { get; set; }
/// <summary>
/// Supported runtime version string for app.config
/// </summary>
public string SupportedRuntimeVersion { get; set; }
/// <summary>
/// Supported SKU string for app.config.
/// </summary>
public string SupportedSku { get; set; }
/// <summary>
/// Specifies whether this target framework requires an explicit app.config entry.
/// </summary>
public bool RequiresAppConfigEntry { get; set; }
/// <summary>
/// Gets the minimum MSBuild version required to build projects with this target framework.
/// </summary>
public Version MinimumMSBuildVersion { get; set; }
/// <summary>
/// Gets the previous release of this target framework.
/// </summary>
public TargetFramework BasedOn { get; set; }
public virtual bool IsCompatibleWith(CompilerVersion compilerVersion)
{
return MinimumMSBuildVersion <= compilerVersion.MSBuildVersion;
}
public bool IsBasedOn(TargetFramework potentialBase)
{
TargetFramework tmp = this;
while (tmp != null) {
if (tmp == potentialBase)
return true;
tmp = tmp.BasedOn;
}
return false;
}
public override string ToString()
{
return DisplayName;
}
}
public class ClientProfileTargetFramework : TargetFramework
{
public TargetFramework FullFramework { get; private set; }
public ClientProfileTargetFramework(TargetFramework fullFramework)
: base(fullFramework.Name + "Client", fullFramework.DisplayName + " Client Profile")
{
this.FullFramework = fullFramework;
this.SupportedRuntimeVersion = fullFramework.SupportedRuntimeVersion;
this.MinimumMSBuildVersion = fullFramework.MinimumMSBuildVersion;
this.IsAvailable = fullFramework.IsAvailable;
if (fullFramework.SupportedSku != null)
this.SupportedSku = fullFramework.SupportedSku + ",Profile=Client";
else
this.SupportedSku = "Client";
}
}*/
}

10
src/Main/Base/Project/Src/Gui/Dialogs/NewProjectDialog.cs

@ -152,14 +152,16 @@ namespace ICSharpCode.SharpDevelop.Project.Dialogs @@ -152,14 +152,16 @@ namespace ICSharpCode.SharpDevelop.Project.Dialogs
}
targetFrameworkComboBox.Items.AddRange(
availableTargetFrameworks.Where(fx => fx.DisplayName != null && fx.IsAvailable())
.OrderBy(fx => fx.Name).ToArray());
.OrderBy(fx => fx.TargetFrameworkVersion).ToArray());
}
if (targetFrameworkComboBox.Items.Count > 0) {
targetFrameworkComboBox.Visible = true;
targetFrameworkComboBox.SelectedIndex = 0;
string lastUsedTargetFramework = PropertyService.Get("Dialogs.NewProjectDialog.TargetFramework", TargetFramework.DefaultTargetFramework.Name);
string lastUsedTargetFramework = PropertyService.Get("Dialogs.NewProjectDialog.TargetFramework", TargetFramework.DefaultTargetFrameworkVersion);
string lastUsedTargetFrameworkProfile = PropertyService.Get("Dialogs.NewProjectDialog.TargetFrameworkProfile", TargetFramework.DefaultTargetFrameworkProfile);
for (int i = 0; i < targetFrameworkComboBox.Items.Count; i++) {
if (((TargetFramework)targetFrameworkComboBox.Items[i]).Name == lastUsedTargetFramework) {
var targetFramework = (TargetFramework)targetFrameworkComboBox.Items[i];
if (targetFramework.TargetFrameworkVersion == lastUsedTargetFramework && targetFramework.TargetFrameworkProfile == lastUsedTargetFrameworkProfile) {
targetFrameworkComboBox.SelectedIndex = i;
break;
}
@ -320,7 +322,7 @@ namespace ICSharpCode.SharpDevelop.Project.Dialogs @@ -320,7 +322,7 @@ namespace ICSharpCode.SharpDevelop.Project.Dialogs
if (item.Template.SupportedTargetFrameworks.Any()) {
cinfo.TargetFramework = (TargetFramework)targetFrameworkComboBox.SelectedItem;
PropertyService.Set("Dialogs.NewProjectDialog.TargetFramework", cinfo.TargetFramework.Name);
PropertyService.Set("Dialogs.NewProjectDialog.TargetFramework", cinfo.TargetFramework.TargetFrameworkVersion);
}
cinfo.ProjectBasePath = DirectoryName.Create(NewProjectDirectory);

4
src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/BuildAdvanced.xaml.cs

@ -72,7 +72,7 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels @@ -72,7 +72,7 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
supports32BitPreferred = false;
if (DotnetDetection.IsDotnet45Installed()) {
var upgradableProject = projectOptions.Project as IUpgradableProject;
if (upgradableProject != null && upgradableProject.CurrentTargetFramework.IsBasedOn(TargetFramework.Net45))
if (upgradableProject != null && upgradableProject.CurrentTargetFramework.Supports32BitPreferredOption)
supports32BitPreferred = projectOptions.Project.MinimumSolutionVersion >= SolutionFormatVersion.VS2010;
// Show 32 vs. 64 options even for library projects;
// it's relevant for web applications.
@ -106,7 +106,7 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels @@ -106,7 +106,7 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
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)) {
if (upgradableProject != null && upgradableProject.CurrentTargetFramework.Supports32BitPreferredOption) {
default32BitPreferred = true;
}
if (Prefer32Bit.Value ?? default32BitPreferred)

48
src/Main/Base/Project/Src/Project/Behaviors/DotNetStartBehavior.cs

@ -120,16 +120,16 @@ namespace ICSharpCode.SharpDevelop.Project @@ -120,16 +120,16 @@ namespace ICSharpCode.SharpDevelop.Project
public override void ProjectCreationComplete()
{
TargetFramework fx = Project.CurrentTargetFramework;
if (fx != null && (fx.IsBasedOn(TargetFramework.Net35) || fx.IsBasedOn(TargetFramework.Net35Client))) {
if (fx != null && fx.Version >= Versions.V3_5) {
AddDotnet35References();
}
if (fx != null && (fx.IsBasedOn(TargetFramework.Net40) || fx.IsBasedOn(TargetFramework.Net40Client))) {
if (fx != null && fx.Version >= Versions.V4_0) {
AddDotnet40References();
}
if (fx != null)
UpdateAppConfig(fx);
if (Project.OutputType != OutputType.Library) {
if (fx != null && DotnetDetection.IsDotnet45Installed() && fx.IsBasedOn(TargetFramework.Net45)) {
if (fx != null && fx.Supports32BitPreferredOption) {
Project.SetProperty(null, Project.ActiveConfiguration.Platform, "Prefer32Bit", "True", PropertyStorageLocations.PlatformSpecific, true);
} else {
Project.SetProperty(null, Project.ActiveConfiguration.Platform, "PlatformTarget", "x86", PropertyStorageLocations.PlatformSpecific, true);
@ -177,16 +177,11 @@ namespace ICSharpCode.SharpDevelop.Project @@ -177,16 +177,11 @@ namespace ICSharpCode.SharpDevelop.Project
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<ClientProfileTargetFramework>())
if (fx.FullFramework.Name == fxVersion)
return fx;
} else {
foreach (TargetFramework fx in TargetFramework.TargetFrameworks)
if (fx.Name == fxVersion)
return fx;
string fxVersion = Project.TargetFrameworkVersion ?? string.Empty;
string fxProfile = Project.TargetFrameworkProfile ?? string.Empty;
foreach (var fx in SD.ProjectService.TargetFrameworks) {
if (fx.TargetFrameworkVersion == fxVersion && fx.TargetFrameworkProfile == fxProfile)
return fx;
}
return null;
}
@ -194,7 +189,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -194,7 +189,7 @@ namespace ICSharpCode.SharpDevelop.Project
public override IEnumerable<TargetFramework> GetAvailableTargetFrameworks()
{
return TargetFramework.TargetFrameworks.Where(fx => fx.IsAvailable());
return SD.ProjectService.TargetFrameworks.Where(fx => fx.IsAvailable());
}
public override void UpgradeProject(CompilerVersion newVersion, TargetFramework newFramework)
@ -208,26 +203,17 @@ namespace ICSharpCode.SharpDevelop.Project @@ -208,26 +203,17 @@ namespace ICSharpCode.SharpDevelop.Project
if (newFramework != null) {
UpdateAppConfig(newFramework);
ClientProfileTargetFramework clientProfile = newFramework as ClientProfileTargetFramework;
if (clientProfile != null) {
newFramework = clientProfile.FullFramework;
((MSBuildBasedProject)Project).SetProperty(null, null, "TargetFrameworkProfile", "Client", PropertyStorageLocations.Base, true);
} else {
((MSBuildBasedProject)Project).SetProperty(null, null, "TargetFrameworkProfile", "", PropertyStorageLocations.Base, true);
}
((MSBuildBasedProject)Project).SetProperty(null, null, "TargetFrameworkVersion", newFramework.Name, PropertyStorageLocations.Base, true);
if (oldFramework is ClientProfileTargetFramework)
oldFramework = ((ClientProfileTargetFramework)oldFramework).FullFramework;
((MSBuildBasedProject)Project).SetProperty(null, null, "TargetFrameworkVersion", newFramework.TargetFrameworkVersion, PropertyStorageLocations.Base, true);
((MSBuildBasedProject)Project).SetProperty(null, null, "TargetFrameworkProfile", newFramework.TargetFrameworkProfile, PropertyStorageLocations.Base, true);
if (oldFramework != null && !oldFramework.IsBasedOn(TargetFramework.Net35) && newFramework.IsBasedOn(TargetFramework.Net35))
if (oldFramework != null && oldFramework.Version < Versions.V3_5 && newFramework.Version >= Versions.V3_5)
AddDotnet35References();
else if (oldFramework != null && oldFramework.IsBasedOn(TargetFramework.Net35) && !newFramework.IsBasedOn(TargetFramework.Net35))
else if (oldFramework != null && oldFramework.Version >= Versions.V3_5 && newFramework.Version < Versions.V3_5)
RemoveDotnet35References();
if (oldFramework != null && !oldFramework.IsBasedOn(TargetFramework.Net40) && newFramework.IsBasedOn(TargetFramework.Net40))
if (oldFramework != null && oldFramework.Version < Versions.V4_0 && newFramework.Version >= Versions.V4_0)
AddDotnet40References();
else if (oldFramework != null && oldFramework.IsBasedOn(TargetFramework.Net40) && !newFramework.IsBasedOn(TargetFramework.Net40))
else if (oldFramework != null && oldFramework.Version >= Versions.V4_0 && newFramework.Version < Versions.V4_0)
RemoveDotnet40References();
}
AddOrRemoveExtensions();
@ -259,13 +245,15 @@ namespace ICSharpCode.SharpDevelop.Project @@ -259,13 +245,15 @@ namespace ICSharpCode.SharpDevelop.Project
void AddDotnet40References()
{
AddReferenceIfNotExists("Microsoft.CSharp", "4.0");
if (Project.GetItemsOfType(ItemType.Reference).Any(r => string.Equals(r.Include, "WindowsBase", StringComparison.OrdinalIgnoreCase))) {
AddReferenceIfNotExists("System.Xaml", "4.0");
}
}
protected virtual void RemoveDotnet40References()
void RemoveDotnet40References()
{
RemoveReference("Microsoft.CSharp");
RemoveReference("System.Xaml");
}

15
src/Main/Base/Project/Src/Project/CompilableProject.cs

@ -84,15 +84,14 @@ namespace ICSharpCode.SharpDevelop.Project @@ -84,15 +84,14 @@ namespace ICSharpCode.SharpDevelop.Project
: base(information)
{
this.OutputType = OutputType.Exe;
this.RootNamespace = information.RootNamespace;
this.AssemblyName = information.ProjectName;
SetProperty("RootNamespace", information.RootNamespace);
SetProperty("AssemblyName", information.ProjectName);
ClientProfileTargetFramework clientProfile = information.TargetFramework as ClientProfileTargetFramework;
if (clientProfile != null) {
SetProperty(null, null, "TargetFrameworkVersion", clientProfile.FullFramework.Name, PropertyStorageLocations.Base, true);
SetProperty(null, null, "TargetFrameworkProfile", "Client", PropertyStorageLocations.Base, true);
} else if (information.TargetFramework != null) {
SetProperty(null, null, "TargetFrameworkVersion", information.TargetFramework.Name, PropertyStorageLocations.Base, true);
if (information.TargetFramework != null) {
SetProperty(null, null, "TargetFrameworkVersion", information.TargetFramework.TargetFrameworkVersion, PropertyStorageLocations.Base, true);
if (!string.IsNullOrEmpty(information.TargetFramework.TargetFrameworkProfile)) {
SetProperty(null, null, "TargetFrameworkProfile", information.TargetFramework.TargetFrameworkProfile, PropertyStorageLocations.Base, true);
}
}
SetProperty("Debug", null, "OutputPath", @"bin\Debug\",

21
src/Main/Base/Project/Src/Project/Converter/IUpgradableProject.cs

@ -72,19 +72,9 @@ namespace ICSharpCode.SharpDevelop.Project.Converter @@ -72,19 +72,9 @@ namespace ICSharpCode.SharpDevelop.Project.Converter
public Version MSBuildVersion { get; private set; }
public string DisplayName { get; private set; }
public static readonly CompilerVersion MSBuild20 = new CompilerVersion(new Version(2, 0), "MSBuild 2.0");
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<TargetFramework> GetSupportedTargetFrameworks()
{
return from fx in TargetFramework.TargetFrameworks
where fx.MinimumMSBuildVersion != null
where MSBuildVersion >= fx.MinimumMSBuildVersion
where fx.IsAvailable()
select fx;
}
public static readonly CompilerVersion MSBuild20 = new CompilerVersion(Versions.V2_0, "MSBuild 2.0");
public static readonly CompilerVersion MSBuild35 = new CompilerVersion(Versions.V3_5, "MSBuild 3.5");
public static readonly CompilerVersion MSBuild40 = new CompilerVersion(Versions.V4_0, "MSBuild 4.0");
public CompilerVersion(Version msbuildVersion, string displayName)
{
@ -94,6 +84,11 @@ namespace ICSharpCode.SharpDevelop.Project.Converter @@ -94,6 +84,11 @@ namespace ICSharpCode.SharpDevelop.Project.Converter
this.DisplayName = displayName;
}
public virtual bool CanTarget(TargetFramework targetFramework)
{
return targetFramework.MinimumMSBuildVersion <= this.MSBuildVersion;
}
public override bool Equals(object obj)
{
if (obj == null)

21
src/Main/Base/Project/Src/Project/Converter/UpgradeView.xaml.cs

@ -23,6 +23,7 @@ using System.Linq; @@ -23,6 +23,7 @@ using System.Linq;
using System.Windows;
using System.Windows.Controls;
using ICSharpCode.Core.Presentation;
using ICSharpCode.NRefactory.Utils;
namespace ICSharpCode.SharpDevelop.Project.Converter
{
@ -145,7 +146,7 @@ namespace ICSharpCode.SharpDevelop.Project.Converter @@ -145,7 +146,7 @@ namespace ICSharpCode.SharpDevelop.Project.Converter
HashSet<TargetFramework> availableFrameworkSet = null;
foreach (Entry entry in listView.SelectedItems) {
var entryFrameworks = entry.Project.GetAvailableTargetFrameworks()
.Where(fx => fx.IsCompatibleWith(selectedCompiler ?? entry.CompilerVersion));
.Where(fx => (selectedCompiler ?? entry.CompilerVersion).CanTarget(fx));
if (availableFrameworkSet == null)
availableFrameworkSet = new HashSet<TargetFramework>(entryFrameworks);
else
@ -275,8 +276,22 @@ namespace ICSharpCode.SharpDevelop.Project.Converter @@ -275,8 +276,22 @@ namespace ICSharpCode.SharpDevelop.Project.Converter
sealed class UnchangedTargetFramework : TargetFramework
{
public UnchangedTargetFramework() : base(string.Empty, Core.StringParser.Parse("${res:ICSharpCode.SharpDevelop.Project.UpgradeView.DoNotChange}"))
{
public override string TargetFrameworkVersion {
get { return string.Empty; }
}
public override string DisplayName {
get {
return Core.StringParser.Parse("${res:ICSharpCode.SharpDevelop.Project.UpgradeView.DoNotChange}");
}
}
public override Version Version {
get { return null; }
}
public override Version MinimumMSBuildVersion {
get { return null; }
}
public override TargetFramework PickFramework(IEnumerable<IUpgradableProject> selectedProjects)

189
src/Main/Base/Project/Src/Project/TargetFramework.cs

@ -1,189 +0,0 @@ @@ -1,189 +0,0 @@
// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System;
using System.Collections.Generic;
using ICSharpCode.SharpDevelop.Project.Converter;
namespace ICSharpCode.SharpDevelop.Project
{
public class TargetFramework
{
public readonly static TargetFramework Net20 = new TargetFramework("v2.0", ".NET Framework 2.0") {
SupportedRuntimeVersion = "v2.0.50727",
MinimumMSBuildVersion = new Version(2, 0),
// .NET 2.0/3.0/3.5 can only be used if .NET 3.5 SP1 is installed
IsAvailable = DotnetDetection.IsDotnet35SP1Installed
};
public readonly static TargetFramework Net30 = new TargetFramework("v3.0", ".NET Framework 3.0") {
SupportedRuntimeVersion = "v2.0.50727",
BasedOn = Net20,
MinimumMSBuildVersion = new Version(3, 5)
};
public readonly static TargetFramework Net35 = new TargetFramework("v3.5", ".NET Framework 3.5") {
SupportedRuntimeVersion = "v2.0.50727",
BasedOn = Net30,
MinimumMSBuildVersion = new Version(3, 5)
};
public readonly static TargetFramework Net35Client = new ClientProfileTargetFramework(Net35) {
RequiresAppConfigEntry = true
};
public readonly static TargetFramework Net40 = new TargetFramework("v4.0", ".NET Framework 4.0") {
BasedOn = Net35,
MinimumMSBuildVersion = new Version(4, 0),
SupportedSku = ".NETFramework,Version=v4.0",
RequiresAppConfigEntry = true,
IsAvailable = DotnetDetection.IsDotnet40Installed
};
public readonly static TargetFramework Net40Client = new ClientProfileTargetFramework(Net40) {
BasedOn = Net35Client
};
public readonly static TargetFramework Net45 = new TargetFramework("v4.5", ".NET Framework 4.5") {
BasedOn = Net40,
MinimumMSBuildVersion = new Version(4, 0),
SupportedRuntimeVersion = "v4.0",
SupportedSku = ".NETFramework,Version=v4.5",
RequiresAppConfigEntry = true,
IsAvailable = DotnetDetection.IsDotnet45Installed
};
public readonly static TargetFramework Net451 = new TargetFramework("v4.5.1", ".NET Framework 4.5.1") {
BasedOn = Net45,
MinimumMSBuildVersion = new Version(4, 0),
SupportedRuntimeVersion = "v4.0",
SupportedSku = ".NETFramework,Version=v4.5.1",
RequiresAppConfigEntry = true,
IsAvailable = DotnetDetection.IsDotnet451Installed
};
public readonly static TargetFramework[] TargetFrameworks = {
Net451, Net45, Net40, Net40Client, Net35, Net35Client, Net30, Net20
};
public readonly static TargetFramework DefaultTargetFramework = Net40Client;
public static TargetFramework GetByName(string name)
{
foreach (TargetFramework tf in TargetFrameworks) {
if (tf.Name == name)
return tf;
}
throw new ArgumentException("No target framework '" + name + "' exists");
}
string name, displayName;
public TargetFramework(string name, string displayName)
{
this.name = name;
this.displayName = displayName;
this.SupportedRuntimeVersion = name;
this.IsAvailable = delegate {
if (this.BasedOn != null)
return this.BasedOn.IsAvailable();
else
return true;
};
}
public string Name {
get { return name; }
}
public string DisplayName {
get { return displayName; }
}
/// <summary>
/// Function that determines if this target framework is available.
/// </summary>
public Func<bool> IsAvailable { get; set; }
/// <summary>
/// Supported runtime version string for app.config
/// </summary>
public string SupportedRuntimeVersion { get; set; }
/// <summary>
/// Supported SKU string for app.config.
/// </summary>
public string SupportedSku { get; set; }
/// <summary>
/// Specifies whether this target framework requires an explicit app.config entry.
/// </summary>
public bool RequiresAppConfigEntry { get; set; }
/// <summary>
/// Gets the minimum MSBuild version required to build projects with this target framework.
/// </summary>
public Version MinimumMSBuildVersion { get; set; }
/// <summary>
/// Gets the previous release of this target framework.
/// </summary>
public TargetFramework BasedOn { get; set; }
public virtual bool IsCompatibleWith(CompilerVersion compilerVersion)
{
return MinimumMSBuildVersion <= compilerVersion.MSBuildVersion;
}
public bool IsBasedOn(TargetFramework potentialBase)
{
TargetFramework tmp = this;
while (tmp != null) {
if (tmp == potentialBase)
return true;
tmp = tmp.BasedOn;
}
return false;
}
public override string ToString()
{
return DisplayName;
}
/// <summary>
/// Shows a dialog to pick the target framework.
/// This method is called by the UpgradeView 'convert' button to retrieve the actual target framework
/// </summary>
public virtual TargetFramework PickFramework(IEnumerable<IUpgradableProject> selectedProjects)
{
return this;
}
}
public class ClientProfileTargetFramework : TargetFramework
{
public TargetFramework FullFramework { get; private set; }
public ClientProfileTargetFramework(TargetFramework fullFramework)
: base(fullFramework.Name + "Client", fullFramework.DisplayName + " Client Profile")
{
this.FullFramework = fullFramework;
this.SupportedRuntimeVersion = fullFramework.SupportedRuntimeVersion;
this.MinimumMSBuildVersion = fullFramework.MinimumMSBuildVersion;
this.IsAvailable = fullFramework.IsAvailable;
if (fullFramework.SupportedSku != null)
this.SupportedSku = fullFramework.SupportedSku + ",Profile=Client";
else
this.SupportedSku = "Client";
}
}
}

2
src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs

@ -81,7 +81,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -81,7 +81,7 @@ namespace ICSharpCode.SharpDevelop.Project
/// <summary>
/// Removes a project item from the project, raising the ProjectItemRemoved event.
/// Make sure you call project.Save() after removing items!
/// No action (not even raising the event) is taken when the item was already removed form the project.
/// No action (not even raising the event) is taken when the item was already removed from the project.
/// </summary>
public static void RemoveProjectItem(IProject project, ProjectItem item)
{

35
src/Main/Base/Project/Util/Versions.cs

@ -0,0 +1,35 @@ @@ -0,0 +1,35 @@
// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System;
namespace ICSharpCode.SharpDevelop
{
/// <summary>
/// Commonly used version constants.
/// </summary>
static class Versions
{
public static readonly Version V2_0 = new Version(2, 0);
public static readonly Version V3_0 = new Version(3, 0);
public static readonly Version V3_5 = new Version(3, 5);
public static readonly Version V4_0 = new Version(4, 0);
public static readonly Version V4_5 = new Version(4, 5);
public static readonly Version V4_5_1 = new Version(4, 5, 1);
}
}

1
src/Main/Core/Project/ICSharpCode.Core.csproj

@ -75,6 +75,7 @@ @@ -75,6 +75,7 @@
<Compile Include="Src\AddInTree\AddIn\DefaultDoozers\MenuItem\ICheckableMenuCommand.cs" />
<Compile Include="Src\AddInTree\AddIn\DefaultDoozers\MenuItem\IMenuItemBuilder.cs" />
<Compile Include="Src\AddInTree\AddIn\DefaultDoozers\ServiceDoozer.cs" />
<Compile Include="Src\AddInTree\AddIn\DefaultDoozers\StaticDoozer.cs" />
<Compile Include="Src\AddInTree\AddIn\ExtensionPath.cs" />
<Compile Include="Src\AddInTree\AddIn\IConditionEvaluator.cs" />
<Compile Include="Src\AddInTree\AddIn\ICondition.cs" />

65
src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/StaticDoozer.cs

@ -0,0 +1,65 @@ @@ -0,0 +1,65 @@
// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System;
namespace ICSharpCode.Core
{
/// <summary>
/// Retrieves an object instance by accessing a static field or property
/// via System.Reflection.
/// </summary>
/// <attribute name="class" use="required">
/// The fully qualified type name of the class that contains the static field/property.
/// </attribute>
/// <attribute name="member" use="required">
/// The name of the static field or property.
/// </attribute>
/// <usage>Everywhere where objects are expected.</usage>
/// <returns>
/// The value of the field/property.
/// </returns>
public class StaticDoozer : IDoozer
{
/// <summary>
/// Gets if the doozer handles codon conditions on its own.
/// If this property return false, the item is excluded when the condition is not met.
/// </summary>
public bool HandleConditions {
get {
return false;
}
}
public object BuildItem(BuildItemArgs args)
{
Codon codon = args.Codon;
Type type = codon.AddIn.FindType(codon.Properties["class"]);
if (type == null)
return null;
var memberName = codon.Properties["member"];
var field = type.GetField(memberName);
if (field != null)
return field.GetValue(null);
var property = type.GetProperty(memberName);
if (property != null)
return property.GetValue(null);
throw new MissingFieldException("Field or property '" + memberName + "' not found in type " + type.FullName);
}
}
}

1
src/Main/Core/Project/Src/AddInTree/AddInTree.cs

@ -58,6 +58,7 @@ namespace ICSharpCode.Core @@ -58,6 +58,7 @@ namespace ICSharpCode.Core
public AddInTreeImpl(ApplicationStateInfoService applicationStateService)
{
doozers.TryAdd("Class", new ClassDoozer());
doozers.TryAdd("Static", new StaticDoozer());
doozers.TryAdd("FileFilter", new FileFilterDoozer());
doozers.TryAdd("String", new StringDoozer());
doozers.TryAdd("Icon", new IconDoozer());

7
src/Main/SharpDevelop/Dom/ClassBrowser/OpenFromGacDialog.xaml.cs

@ -101,12 +101,7 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser @@ -101,12 +101,7 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
}
public string PublicKeyToken {
get {
StringBuilder s = new StringBuilder();
foreach (byte b in r.PublicKeyToken)
s.Append(b.ToString("x2"));
return s.ToString();
}
get { return r.PublicKeyToken; }
}
public override string ToString()

11
src/Main/SharpDevelop/Project/ProjectService.cs

@ -37,8 +37,9 @@ namespace ICSharpCode.SharpDevelop.Project @@ -37,8 +37,9 @@ namespace ICSharpCode.SharpDevelop.Project
allSolutions = new NullSafeSimpleModelCollection<ISolution>();
allProjects = allSolutions.SelectMany(s => s.Projects);
projectBindings = SD.AddInTree.BuildItems<ProjectBindingDescriptor>("/SharpDevelop/Workbench/ProjectBindings", null);
targetFrameworks = SD.AddInTree.BuildItems<TargetFramework>("/SharpDevelop/TargetFrameworks", null);
SD.GetFutureService<IWorkbench>().ContinueWith(t => t.Result.ActiveViewContentChanged += ActiveViewContentChanged);
SD.GetFutureService<IWorkbench>().ContinueWith(t => t.Result.ActiveViewContentChanged += ActiveViewContentChanged).FireAndForget();
var applicationStateInfoService = SD.GetService<ApplicationStateInfoService>();
if (applicationStateInfoService != null) {
@ -421,5 +422,13 @@ namespace ICSharpCode.SharpDevelop.Project @@ -421,5 +422,13 @@ namespace ICSharpCode.SharpDevelop.Project
return result;
}
#endregion
#region Target Frameworks
readonly IReadOnlyList<TargetFramework> targetFrameworks;
public IReadOnlyList<TargetFramework> TargetFrameworks {
get { return targetFrameworks; }
}
#endregion
}
}

1
src/Main/SharpDevelop/SharpDevelop.csproj

@ -329,6 +329,7 @@ @@ -329,6 +329,7 @@
<Folder Include="Dom\ClassBrowser" />
<Folder Include="Editor" />
<Folder Include="Editor\Bookmarks" />
<Folder Include="..\Base\Project\Project\TargetFrameworks" />
<Folder Include="Templates" />
<Folder Include="Project" />
<Folder Include="Project\Build" />

2
src/Main/SharpDevelop/Templates/Project/ProjectTemplateImpl.cs

@ -182,7 +182,7 @@ namespace ICSharpCode.SharpDevelop.Templates @@ -182,7 +182,7 @@ namespace ICSharpCode.SharpDevelop.Templates
config["SupportedTargetFrameworks"].InnerText.Split(';')
.Select<string,TargetFramework>(TargetFramework.GetByName).ToArray();
supportedTargetFrameworks = TargetFramework.TargetFrameworks.Where(fx => specifiedTargetFrameworks.Any(s => fx.IsBasedOn(s))).ToArray();
supportedTargetFrameworks = SD.ProjectService.TargetFrameworks.Where(fx => specifiedTargetFrameworks.Any(s => fx.IsBasedOn(s))).ToArray();
} else {
supportedTargetFrameworks = new TargetFramework[0];
}

Loading…
Cancel
Save