diff --git a/Prebuild/src/Core/Nodes/ProjectNode.cs b/Prebuild/src/Core/Nodes/ProjectNode.cs index 7ec87bfc92..ca3c89ea66 100755 --- a/Prebuild/src/Core/Nodes/ProjectNode.cs +++ b/Prebuild/src/Core/Nodes/ProjectNode.cs @@ -75,7 +75,7 @@ namespace Prebuild.Core.Nodes /// The version of the .NET framework to use (Required for VS2008) /// We don't need .NET 1.1 in here, it'll default when using vs2003. /// - public enum FrameworkVersion + public enum FrameworkVersion: byte { /// /// .NET 2.0 @@ -117,8 +117,10 @@ namespace Prebuild.Core.Nodes v4_8, netstandard2_0, net5_0, - net6_0 + net6_0, + net7_0 } + /// /// The Node object representing /Prebuild/Solution/Project elements /// @@ -155,6 +157,27 @@ namespace Prebuild.Core.Nodes private readonly List m_Authors = new List(); private FilesNode m_Files; + private readonly Dictionary m_frameworkVersionToCondionalVersion = new Dictionary() + { + {FrameworkVersion.v2_0, "NET20" }, + {FrameworkVersion.v3_0, "NET30" }, + {FrameworkVersion.v3_5, "NET35" }, + {FrameworkVersion.v4_0, "NET40" }, + {FrameworkVersion.v4_5, "NET45" }, + {FrameworkVersion.v4_5_1, "NET451" }, + {FrameworkVersion.v4_5_2, "NET452" }, + {FrameworkVersion.v4_6, "NET46" }, + {FrameworkVersion.v4_6_1, "NET461" }, + {FrameworkVersion.v4_6_2, "NET462" }, + {FrameworkVersion.v4_7, "NET47" }, + {FrameworkVersion.v4_7_1, "NET471" }, + {FrameworkVersion.v4_7_2, "NET472" }, + {FrameworkVersion.v4_8, "NET48" }, + {FrameworkVersion.netstandard2_0, "NETSTANDARD2_0" }, + {FrameworkVersion.net5_0, "NET5_0" }, + {FrameworkVersion.net6_0, "NET6_0" }, + {FrameworkVersion.net7_0, "NET7_0" } + }; #endregion #region Properties @@ -185,6 +208,17 @@ namespace Prebuild.Core.Nodes m_useFramework = false; } } + + public string FrameworkVersionForConditional + { + get + { + if (m_frameworkVersionToCondionalVersion.TryGetValue(m_Framework, out string ret)) + return ret; + return string.Empty; + } + } + /// /// Gets the path. /// diff --git a/Prebuild/src/Core/Targets/VSGenericTarget.cs b/Prebuild/src/Core/Targets/VSGenericTarget.cs index aff92ee208..e31a90ead4 100755 --- a/Prebuild/src/Core/Targets/VSGenericTarget.cs +++ b/Prebuild/src/Core/Targets/VSGenericTarget.cs @@ -168,7 +168,7 @@ namespace Prebuild.Core.Targets Helper.SetCurrentDir(Path.GetDirectoryName(projectFile)); FrameworkVersion fv = project.FrameworkVersion; - if (fv == FrameworkVersion.net5_0 || fv == FrameworkVersion.net6_0 || fv == FrameworkVersion.netstandard2_0) + if (fv > FrameworkVersion.v4_8) { // Write the newer .csproj file format WriteProjectDotNet(solution, project, ps); @@ -251,8 +251,17 @@ namespace Prebuild.Core.Targets ps.WriteLine(" {0}", conf.Options["CheckUnderflowOverflow"]); ps.WriteLine(" "); ps.WriteLine(" "); - ps.WriteLine(" {0}", - conf.Options["CompilerDefines"].ToString() == "" ? this.kernel.ForcedConditionals : conf.Options["CompilerDefines"] + ";" + kernel.ForcedConditionals); + string defConstants = (conf.Options["CompilerDefines"].ToString() == "") ? this.kernel.ForcedConditionals : (conf.Options["CompilerDefines"] + ";" + kernel.ForcedConditionals); + if(!string.IsNullOrEmpty(project.FrameworkVersionForConditional)) + { + if(string.IsNullOrEmpty(defConstants)) + defConstants = project.FrameworkVersionForConditional + ";"; + else if(defConstants.IndexOf(project.FrameworkVersionForConditional) < 0) + defConstants += project.FrameworkVersionForConditional + ";"; + } + if (!string.IsNullOrEmpty(defConstants)) + ps.WriteLine(" {0}", defConstants); + ps.WriteLine(" {0}", Helper.NormalizePath(conf.Options["XmlDocFile"].ToString())); ps.WriteLine(" {0}", conf.Options["DebugInformation"]); ps.WriteLine(" {0}", conf.Options["FileAlignment"]); diff --git a/bin/Prebuild.exe b/bin/Prebuild.exe index 6b3ed6db27..c5f8c2c512 100755 Binary files a/bin/Prebuild.exe and b/bin/Prebuild.exe differ diff --git a/prebuild48.xml b/prebuild48.xml index 876a6b1c3e..8d9b66ee9e 100644 --- a/prebuild48.xml +++ b/prebuild48.xml @@ -3,7 +3,7 @@ - TRACE;DEBUG;NET48 + TRACE;DEBUG false false true @@ -19,7 +19,7 @@ - TRACE;NET48 + TRACE true false true