Browse Source

Add a .targets file to the build that gets automatically included when the C# 2.0 or VB 8 compiler is used. This .targets file will display warnings when the project uses MSBuild 3.5 features.

Fixed Project > Check with FxCop.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2701 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 18 years ago
parent
commit
7c21fdaa48
  1. 14
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/CSharpProject.cs
  2. 14
      src/AddIns/BackendBindings/VBNetBinding/Project/Src/Project/VBNetProject.cs
  3. 3
      src/AddIns/BackendBindings/VBNetBinding/Project/VBNetBinding.csproj
  4. 13
      src/AddIns/Misc/CodeAnalysis/Src/CheckCurrentProjectCommand.cs
  5. 3
      src/Libraries/ICSharpCode.Build.Tasks/Project/ICSharpCode.Build.Tasks.csproj
  6. 17
      src/Libraries/ICSharpCode.Build.Tasks/Project/SharpDevelop.CheckMSBuild35Features.targets
  7. 43
      src/Main/Base/Project/Src/Commands/BuildCommands.cs
  8. 2
      src/Main/Base/Project/Src/Project/BuildEngine.cs
  9. 37
      src/Main/Base/Project/Src/Project/BuildOptions.cs
  10. 18
      src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs
  11. 10
      src/Main/Base/Project/Src/Project/MSBuildEngine.cs
  12. 2
      src/Main/Base/Project/Src/Project/MSBuildFileProject.cs
  13. 1
      src/Setup/Files.wxs

14
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/CSharpProject.cs

@ -7,6 +7,7 @@ @@ -7,6 +7,7 @@
using System;
using System.ComponentModel;
using System.Linq;
using System.IO;
using ICSharpCode.SharpDevelop.Dom;
@ -81,5 +82,18 @@ namespace CSharpBinding @@ -81,5 +82,18 @@ namespace CSharpBinding
else
return base.GetDefaultItemType(fileName);
}
public override void StartBuild(ProjectBuildOptions options, IBuildFeedbackSink feedbackSink)
{
if (this.MinimumSolutionVersion == 9) {
MSBuildEngine.StartBuild(this,
options,
feedbackSink,
MSBuildEngine.AdditionalTargetFiles.Concat(
new [] { "$(SharpDevelopBinPath)/SharpDevelop.CheckMSBuild35Features.targets" }));
} else {
base.StartBuild(options, feedbackSink);
}
}
}
}

14
src/AddIns/BackendBindings/VBNetBinding/Project/Src/Project/VBNetProject.cs

@ -7,6 +7,7 @@ @@ -7,6 +7,7 @@
using System;
using System.ComponentModel;
using System.Linq;
using System.IO;
using ICSharpCode.SharpDevelop;
@ -103,5 +104,18 @@ namespace VBNetBinding @@ -103,5 +104,18 @@ namespace VBNetBinding
else
return base.GetDefaultItemType(fileName);
}
public override void StartBuild(ProjectBuildOptions options, IBuildFeedbackSink feedbackSink)
{
if (this.MinimumSolutionVersion == 9) {
MSBuildEngine.StartBuild(this,
options,
feedbackSink,
MSBuildEngine.AdditionalTargetFiles.Concat(
new [] { "$(SharpDevelopBinPath)/SharpDevelop.CheckMSBuild35Features.targets" }));
} else {
base.StartBuild(options, feedbackSink);
}
}
}
}

3
src/AddIns/BackendBindings/VBNetBinding/Project/VBNetBinding.csproj

@ -38,6 +38,9 @@ @@ -38,6 +38,9 @@
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.XML" />

13
src/AddIns/Misc/CodeAnalysis/Src/CheckCurrentProjectCommand.cs

@ -12,15 +12,14 @@ using ICSharpCode.SharpDevelop.Project.Commands; @@ -12,15 +12,14 @@ using ICSharpCode.SharpDevelop.Project.Commands;
namespace ICSharpCode.CodeAnalysis
{
public class CheckCurrentProjectCommand : AbstractMenuCommand
public class CheckCurrentProjectCommand : BuildProject
{
public override void Run()
public override void StartBuild()
{
IProject p = ProjectService.CurrentProject;
if (p == null) return;
RebuildProject build = new RebuildProject(p);
build.AdditionalProperties.Add("RunCodeAnalysis", "true");
build.Run();
BuildOptions options = new BuildOptions(BuildTarget.Rebuild, CallbackMethod);
options.TargetForDependencies = BuildTarget.Build;
options.ProjectAdditionalProperties["RunCodeAnalysis"] = "true";
BuildEngine.BuildInGui(this.ProjectToBuild, options);
}
}
}

3
src/Libraries/ICSharpCode.Build.Tasks/Project/ICSharpCode.Build.Tasks.csproj

@ -83,6 +83,9 @@ @@ -83,6 +83,9 @@
<None Include="SharpDevelop.Build.Mono.Mbas.targets">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="SharpDevelop.CheckMSBuild35Features.targets">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<Compile Include="MonoBasicCompilerResultsParser.cs" />
<Compile Include="MonoCSharpCompilerTask.cs" />
<Compile Include="FxCop.cs" />

17
src/Libraries/ICSharpCode.Build.Tasks/Project/SharpDevelop.CheckMSBuild35Features.targets

@ -0,0 +1,17 @@ @@ -0,0 +1,17 @@
<?xml version="1.0"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTarget="Build">
<!-- This target file is automatically included into C# and VB projects that use MSBuild 2.0 -->
<!-- It causes build warning when using features that are not supported in the MSBuild -->
<!-- version coming with .NET 2.0 -->
<PropertyGroup>
<BuildDependsOn>SharpDevelopCheckMSBuild35Features;$(BuildDependsOn)</BuildDependsOn>
</PropertyGroup>
<Target Name="SharpDevelopCheckMSBuild35Features">
<Warning Text="Embedding application manifests requires using the C# 3.0 / VB 9 compiler."
Condition="'$(ApplicationManifest)' != ''"/>
<Warning Text="The application is configured to compile for .NET 2.0, but you referenced the assembly @(Reference) which requires .NET %(Reference.RequiredTargetFramework)."
Condition="'%(Reference.RequiredTargetFramework)' != ''"/>
</Target>
</Project>

43
src/Main/Base/Project/Src/Commands/BuildCommands.cs

@ -101,35 +101,35 @@ namespace ICSharpCode.SharpDevelop.Project.Commands @@ -101,35 +101,35 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
}
}
public sealed class Build : AbstractBuildMenuCommand
public class Build : AbstractBuildMenuCommand
{
public override void StartBuild()
public override void BeforeBuild()
{
base.BeforeBuild();
ProjectService.RaiseEventStartBuild();
}
public override void StartBuild()
{
BuildEngine.BuildInGui(ProjectService.OpenSolution, new BuildOptions(BuildTarget.Build, CallbackMethod));
}
public override void AfterBuild()
{
ProjectService.RaiseEventEndBuild();
base.AfterBuild();
}
}
public sealed class Rebuild : AbstractBuildMenuCommand
public class Rebuild : Build
{
public override void StartBuild()
{
ProjectService.RaiseEventStartBuild();
BuildEngine.BuildInGui(ProjectService.OpenSolution, new BuildOptions(BuildTarget.Rebuild, CallbackMethod));
}
public override void AfterBuild()
{
ProjectService.RaiseEventEndBuild();
}
}
public sealed class Clean : AbstractBuildMenuCommand
public class Clean : AbstractBuildMenuCommand
{
public override void StartBuild()
{
@ -154,14 +154,6 @@ namespace ICSharpCode.SharpDevelop.Project.Commands @@ -154,14 +154,6 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
}
public class BuildProject : AbstractProjectBuildMenuCommand
{
IDictionary<string, string> additionalProperties = new SortedList<string, string>();
public IDictionary<string, string> AdditionalProperties {
get {
return additionalProperties;
}
}
public BuildProject()
{
}
@ -170,27 +162,32 @@ namespace ICSharpCode.SharpDevelop.Project.Commands @@ -170,27 +162,32 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
this.targetProject = targetProject;
}
public override void StartBuild()
public override void BeforeBuild()
{
base.BeforeBuild();
ProjectService.RaiseEventStartBuild();
BuildEngine.BuildInGui(this.ProjectToBuild, new BuildOptions(BuildTarget.Build, CallbackMethod, AdditionalProperties));
}
public override void StartBuild()
{
BuildEngine.BuildInGui(this.ProjectToBuild, new BuildOptions(BuildTarget.Build, CallbackMethod));
}
public override void AfterBuild()
{
ProjectService.RaiseEventEndBuild();
base.AfterBuild();
}
}
public sealed class RebuildProject : BuildProject
public class RebuildProject : BuildProject
{
public RebuildProject() {}
public RebuildProject(IProject targetProject) : base(targetProject) {}
public override void StartBuild()
{
ProjectService.RaiseEventStartBuild();
BuildEngine.BuildInGui(this.ProjectToBuild, new BuildOptions(BuildTarget.Rebuild, CallbackMethod, AdditionalProperties));
BuildEngine.BuildInGui(this.ProjectToBuild, new BuildOptions(BuildTarget.Rebuild, CallbackMethod));
}
}

2
src/Main/Base/Project/Src/Project/BuildEngine.cs

@ -220,7 +220,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -220,7 +220,7 @@ namespace ICSharpCode.SharpDevelop.Project
{
IBuildable project = node.project;
// Create options for building the project
node.options = new ProjectBuildOptions(options.Target);
node.options = new ProjectBuildOptions(project == rootProject ? options.ProjectTarget : options.TargetForDependencies);
// find the project configuration
foreach (var matching in configMatchings) {
if (matching.Project == project) {

37
src/Main/Base/Project/Src/Project/BuildOptions.cs

@ -68,8 +68,6 @@ namespace ICSharpCode.SharpDevelop.Project @@ -68,8 +68,6 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
BuildCallback callback;
BuildTarget target;
IDictionary<string, string> globalAdditionalProperties = new SortedList<string, string>();
IDictionary<string, string> projectAdditionalProperties = new SortedList<string, string>();
@ -96,31 +94,46 @@ namespace ICSharpCode.SharpDevelop.Project @@ -96,31 +94,46 @@ namespace ICSharpCode.SharpDevelop.Project
public BuildOptions(BuildTarget target, BuildCallback callback)
{
this.callback = callback;
this.target = target;
this.projectTarget = target;
this.TargetForDependencies = target;
this.BuildDependentProjects = true;
this.ParallelProjectCount = DefaultParallelProjectCount;
}
public BuildOptions(BuildTarget target, BuildCallback callback, IDictionary<string, string> projectAdditionalProperties)
: this(target, callback)
{
if (projectAdditionalProperties == null)
throw new ArgumentNullException("projectAdditionalProperties");
this.projectAdditionalProperties = projectAdditionalProperties;
}
readonly BuildCallback callback;
/// <summary>
/// Gets the method to call when the build has finished.
/// </summary>
public BuildCallback Callback {
get { return callback; }
}
public BuildTarget Target {
get { return target; }
readonly BuildTarget projectTarget;
/// <summary>
/// The target to build for the project being built.
/// </summary>
public BuildTarget ProjectTarget {
get { return projectTarget; }
}
/// <summary>
/// The target to build for dependencies of the project being built.
/// </summary>
public BuildTarget TargetForDependencies { get; set; }
/// <summary>
/// Additional properties used for the build, both for the project being built and its dependencies.
/// </summary>
public IDictionary<string, string> GlobalAdditionalProperties {
get { return globalAdditionalProperties; }
}
/// <summary>
/// Additional properties used only for the project being built but not for its dependencies.
/// </summary>
public IDictionary<string, string> ProjectAdditionalProperties {
get { return projectAdditionalProperties; }
}

18
src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs

@ -64,12 +64,14 @@ namespace ICSharpCode.SharpDevelop.Project @@ -64,12 +64,14 @@ namespace ICSharpCode.SharpDevelop.Project
public override int MinimumSolutionVersion {
get {
if (string.IsNullOrEmpty(project.DefaultToolsVersion)
|| project.DefaultToolsVersion == "2.0")
{
return 9;
} else {
return 10;
lock (SyncRoot) {
if (string.IsNullOrEmpty(project.DefaultToolsVersion)
|| project.DefaultToolsVersion == "2.0")
{
return 9;
} else {
return 10;
}
}
}
}
@ -829,7 +831,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -829,7 +831,7 @@ namespace ICSharpCode.SharpDevelop.Project
public override void StartBuild(ProjectBuildOptions options, IBuildFeedbackSink feedbackSink)
{
MSBuildEngine.Build(this, options, feedbackSink);
MSBuildEngine.StartBuild(this, options, feedbackSink, MSBuildEngine.AdditionalTargetFiles);
}
/*
@ -843,7 +845,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -843,7 +845,7 @@ namespace ICSharpCode.SharpDevelop.Project
engine.MessageView = TaskService.BuildMessageViewCategory;
engine.Run(solution, project, options);
}
*/
*/
#endregion
#region Loading

10
src/Main/Base/Project/Src/Project/MSBuildEngine.cs

@ -76,7 +76,8 @@ namespace ICSharpCode.SharpDevelop.Project @@ -76,7 +76,8 @@ namespace ICSharpCode.SharpDevelop.Project
MSBuildProperties.Add("BuildingInsideVisualStudio", "true");
}
public static void Build(IProject project, ProjectBuildOptions options, IBuildFeedbackSink feedbackSink)
public static void StartBuild(IProject project, ProjectBuildOptions options, IBuildFeedbackSink feedbackSink, IEnumerable<string> additionalTargetFiles)
{
if (project == null)
throw new ArgumentNullException("project");
@ -84,14 +85,18 @@ namespace ICSharpCode.SharpDevelop.Project @@ -84,14 +85,18 @@ namespace ICSharpCode.SharpDevelop.Project
throw new ArgumentNullException("options");
if (feedbackSink == null)
throw new ArgumentNullException("feedbackSink");
if (additionalTargetFiles == null)
throw new ArgumentNullException("additionalTargetFiles");
MSBuildEngine engine = new MSBuildEngine(project, options, feedbackSink);
engine.additionalTargetFiles = additionalTargetFiles;
engine.StartBuild();
}
IProject project;
ProjectBuildOptions options;
IBuildFeedbackSink feedbackSink;
IEnumerable<string> additionalTargetFiles;
private MSBuildEngine(IProject project, ProjectBuildOptions options, IBuildFeedbackSink feedbackSink)
{
@ -190,6 +195,8 @@ namespace ICSharpCode.SharpDevelop.Project @@ -190,6 +195,8 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
job.AdditionalImports.AddRange(additionalTargetFiles);
BuildPropertyGroup pg = new BuildPropertyGroup();
MSBuildBasedProject.InitializeMSBuildProjectProperties(pg);
foreach (BuildProperty p in pg) {
@ -216,6 +223,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -216,6 +223,7 @@ namespace ICSharpCode.SharpDevelop.Project
if (Interlocked.CompareExchange(ref isBuildingInProcess, 1, 0) == 0) {
buildInProcess = true;
}
LoggingService.Info("Start job (buildInProcess=" + buildInProcess + "): " + job.ToString());
if (buildInProcess) {
settings.BuildDoneCallback = delegate(bool success) {

2
src/Main/Base/Project/Src/Project/MSBuildFileProject.cs

@ -24,7 +24,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -24,7 +24,7 @@ namespace ICSharpCode.SharpDevelop.Project
public override void StartBuild(ProjectBuildOptions options, IBuildFeedbackSink feedbackSink)
{
MSBuildEngine.Build(this, options, feedbackSink);
MSBuildEngine.StartBuild(this, options, feedbackSink, MSBuildEngine.AdditionalTargetFiles);
}
}
}

1
src/Setup/Files.wxs

@ -181,6 +181,7 @@ @@ -181,6 +181,7 @@
<File Source="..\..\bin\SharpDevelop.Build.MSIL.targets" Name="Msil.tgt" Id="SharpDevelop.Build.MSIL.targets" LongName="SharpDevelop.Build.MSIL.targets" />
<File Source="..\..\bin\SharpDevelop.Build.VisualBasic.targets" Name="VB.tgt" Id="SharpDevelop.Build.VisualBasic.targets" LongName="SharpDevelop.Build.VisualBasic.targets" />
<File Source="..\..\bin\SharpDevelop.CodeAnalysis.targets" Name="analysis.tgt" Id="SharpDevelop.CodeAnalysis.targets" LongName="SharpDevelop.CodeAnalysis.targets" />
<File Source="..\..\bin\SharpDevelop.CheckMSBuild35Features.targets" Name="SHARPD_1.TAR" Id="SharpDevelop.CheckMSBuild35Features.targets" LongName="SharpDevelop.CheckMSBuild35Features.targets" />
</Component>
<Component Id="ICSharpCodeCoreDll" Guid="DFD67330-0F6D-4069-9B03-90E2BB7B9273" DiskId="1">
<File Source="..\..\bin\ICSharpCode.Core.dll" Name="ICCore.DLL" Id="ICSharpCode.Core.dll" LongName="ICSharpCode.Core.dll" Assembly=".net" AssemblyApplication="ICSharpCode.Core.dll" AssemblyManifest="ICSharpCode.Core.dll" KeyPath="yes" />

Loading…
Cancel
Save