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