diff --git a/Sharpmake.Generators/VisualStudio/Vcxproj.Template.cs b/Sharpmake.Generators/VisualStudio/Vcxproj.Template.cs index 601e2d0b7..64714afb0 100644 --- a/Sharpmake.Generators/VisualStudio/Vcxproj.Template.cs +++ b/Sharpmake.Generators/VisualStudio/Vcxproj.Template.cs @@ -462,6 +462,15 @@ internal static class Filters "; } } + + public static class TargetElement + { + public static string CustomTarget = +@" + [targetElement.CustomTasks] + +"; + } } } } diff --git a/Sharpmake.Generators/VisualStudio/Vcxproj.cs b/Sharpmake.Generators/VisualStudio/Vcxproj.cs index 4c1cce30b..62d405bce 100644 --- a/Sharpmake.Generators/VisualStudio/Vcxproj.cs +++ b/Sharpmake.Generators/VisualStudio/Vcxproj.cs @@ -676,6 +676,15 @@ private void GenerateImpl(GenerationContext context, IList generatedFile } fileGenerator.Write(Template.Project.ProjectTargetsEnd); + foreach (var element in context.Project.CustomTargets) + { + using (fileGenerator.Declare("project", context.Project)) + using (fileGenerator.Declare("targetElement", element)) + { + fileGenerator.Write(Template.TargetElement.CustomTarget); + } + } + // in case we are using fast build we do not want to write most dependencies // in the vcxproj because they are handled internally in the bff. // Nevertheless, non-fastbuild dependencies (such as C# projects) must be written. diff --git a/Sharpmake/Project.cs b/Sharpmake/Project.cs index a4ca9d2be..f2c6fa642 100644 --- a/Sharpmake/Project.cs +++ b/Sharpmake/Project.cs @@ -22,6 +22,14 @@ namespace Sharpmake { + [Resolver.Resolvable] + public class CustomTargetElement + { + public string Name = ""; + public string TargetParameters = ""; + public string CustomTasks = ""; + } + [Resolver.Resolvable] public partial class Project : Configurable { @@ -225,6 +233,7 @@ internal void Resolve(string sourceRootPath, Resolver resolver) public Strings CustomPropsFiles = new Strings(); // vs2010+ .props files public Strings CustomTargetsFiles = new Strings(); // vs2010+ .targets files + public List CustomTargets = new List(); public Strings LibraryPathsExcludeFromWarningRegex = new Strings(); // Library paths where we want to ignore the path doesn't exist warning public Strings IncludePathsExcludeFromWarningRegex = new Strings(); // Include paths where we want to ignore the path doesn't exist warning @@ -2160,7 +2169,7 @@ public static void InitAspNetProject(this CSharpProject aspNetProject) aspNetProject.NoneExtensions.Add(".pubxml"); - aspNetProject.CustomTargets.Add(new CSharpProject.CustomTargetElement() + aspNetProject.CustomTargets.Add(new CustomTargetElement() { Name = "MvcBuildViews", TargetParameters = @"AfterTargets=""AfterBuild"" Condition=""'$(MvcBuildViews)' == 'true'""", @@ -2311,7 +2320,6 @@ public class CSharpProject : Project public List ComReferences = new List(); public List PreImportProjects = new List(); public List ImportProjects = new List(); - public List CustomTargets = new List(); public List UsingTasks = new List(); public bool? WcfAutoStart; // Wcf Auto-Start service when debugging @@ -2337,12 +2345,10 @@ public class CSharpProject : Project public bool GenerateDocumentationFile = false; [Resolver.Resolvable] - public class CustomTargetElement - { - public string Name; - public string TargetParameters; - public string CustomTasks; + [Obsolete("Use Sharpmake.CustomTargetElement instead")] + public class CustomTargetElement : Sharpmake.CustomTargetElement + { public CustomTargetElement() { }