diff --git a/NuGetPack.UnitTests/NuGetPackTests.cs b/NuGetPack.UnitTests/NuGetPackTests.cs index ca297be..ced8a6e 100644 --- a/NuGetPack.UnitTests/NuGetPackTests.cs +++ b/NuGetPack.UnitTests/NuGetPackTests.cs @@ -297,7 +297,7 @@ public void TestGetDependenciesViaReferenceOuter1() XAttribute attribute; var results = creator.GetElements( - nuspecFolder, nuProj1Csproj, isDebugVariable, true, false, null, out attribute); + nuspecFolder, nuProj1Csproj, isDebugVariable, true, false, null,null, out attribute); var dependencies = results.Where(r => r.ElementType == ElementType.NuGetDependency) .Select(r => r.Element).ToList(); @@ -321,7 +321,7 @@ public void TestGetDependenciesViaReferenceOuter2() XAttribute attribute; var results = creator.GetElements( - nuspecFolder, nuProj2Csproj, isDebugVariable, true, false, null, out attribute); + nuspecFolder, nuProj2Csproj, isDebugVariable, true, false, null,null, out attribute); var dependencies = results.Where(r => r.ElementType == ElementType.NuGetDependency) .Select(r => r.Element).ToList(); @@ -335,7 +335,7 @@ public void TestGetInternalDependencies1() var creator = new NuspecCreatorOldCsProj(); var results = creator.GetInternalDependencies( - proj5Csproj, isDebugVariable, Path.GetDirectoryName(proj5Dll), null); + proj5Csproj, isDebugVariable, Path.GetDirectoryName(proj5Dll), null,null); var dependencies = results.Where(r => r.ElementType == ElementType.NuGetDependency) .Select(r => r.Element).ToList(); @@ -355,7 +355,7 @@ public void TestGetInternalDependencies1_OverridePreReleaseEmpty() var creator = new NuspecCreatorOldCsProj(); var results = creator.GetInternalDependencies( - proj5Csproj, isDebugVariable, Path.GetDirectoryName(proj5Dll), String.Empty); + proj5Csproj, isDebugVariable, Path.GetDirectoryName(proj5Dll), String.Empty, String.Empty); var dependencies = results.Where(r => r.ElementType == ElementType.NuGetDependency) .Select(r => r.Element).ToList(); @@ -373,7 +373,7 @@ public void TestGetInternalDependencies1_OverridePreReleaseAlpha102() var creator = new NuspecCreatorOldCsProj(); var results = creator.GetInternalDependencies( - proj5Csproj, isDebugVariable, Path.GetDirectoryName(proj5Dll), "alpha102"); + proj5Csproj, isDebugVariable, Path.GetDirectoryName(proj5Dll), "alpha102",null); var dependencies = results.Where(r => r.ElementType == ElementType.NuGetDependency) .Select(r => r.Element).ToList(); @@ -542,7 +542,7 @@ public void TestGetPackage1Files() XAttribute attribute; var results = creator.GetElements( - Path.GetDirectoryName(nuProj1Dll), nuProj1Csproj, isDebugVariable, true, false, null, out attribute); + Path.GetDirectoryName(nuProj1Dll), nuProj1Csproj, isDebugVariable, true, false, null,null, out attribute); LinqAssert.Count(results, 22); @@ -609,7 +609,7 @@ public void TestGetPackage2Files() XAttribute attribute; var results = creator.GetElements( - Path.GetDirectoryName(nuProj2Dll), nuProj2Csproj, isDebugVariable, true, false, null, out attribute); + Path.GetDirectoryName(nuProj2Dll), nuProj2Csproj, isDebugVariable, true, false, null,null, out attribute); LinqAssert.Count(results, 6); @@ -642,7 +642,7 @@ public void TestGetPackage2Files_NoSource() XAttribute attribute; var results = creator.GetElements( - Path.GetDirectoryName(nuProj2Dll), nuProj2Csproj, isDebugVariable, false, false, null, out attribute); + Path.GetDirectoryName(nuProj2Dll), nuProj2Csproj, isDebugVariable, false, false, null,null, out attribute); LinqAssert.Count(results, 4); @@ -670,7 +670,7 @@ public void TestGetPackage3Files() XAttribute attribute; var results = creator.GetElements( - Path.GetDirectoryName(nuProj3Dll), nuProj3Csproj, isDebugVariable, true, false, null, out attribute); + Path.GetDirectoryName(nuProj3Dll), nuProj3Csproj, isDebugVariable, true, false, null,null, out attribute); LinqAssert.Count(results, 13); @@ -721,7 +721,7 @@ public void TestGetLibrary4Files() XAttribute attribute; var results = creator.GetElements( - testRunDir, proj4Csproj, isDebugVariable, true, true, null, out attribute); + testRunDir, proj4Csproj, isDebugVariable, true, true, null,null, out attribute); LinqAssert.Count(results, 18); @@ -781,7 +781,7 @@ public void TestGetLibrary5Files() XAttribute attribute; var results = creator.GetElements( - testRunDir, proj5Csproj, isDebugVariable, true, true, null, out attribute); + testRunDir, proj5Csproj, isDebugVariable, true, true, null,null, out attribute); LinqAssert.Count(results, 15); @@ -980,7 +980,7 @@ public void TestGetFiles() XAttribute attribute; var results = creator.GetElements( - nuspecFolder, nuProj1Csproj, isDebugVariable, true, false, null, out attribute); + nuspecFolder, nuProj1Csproj, isDebugVariable, true, false, null,null, out attribute); Assert.AreNotEqual(0, results.Count()); var files = results.Where(el => @@ -1001,7 +1001,7 @@ public void TestGetFilesIncludingVersions() XAttribute attribute; var results = creator.GetElements( - nuspecFolder, nuProj3Csproj, isDebugVariable, true, false, null, out attribute); + nuspecFolder, nuProj3Csproj, isDebugVariable, true, false, null,null, out attribute); Assert.AreNotEqual(0, results.Count); diff --git a/NuGetPack/NuspecCreatorBase.cs b/NuGetPack/NuspecCreatorBase.cs index 67910f8..cc05942 100644 --- a/NuGetPack/NuspecCreatorBase.cs +++ b/NuGetPack/NuspecCreatorBase.cs @@ -17,13 +17,13 @@ public abstract partial class NuspecCreatorBase public void CreatePackage( string projectPath, string assemblyPath, bool isDebug, bool doCreatePkg = true, bool doIncludeCurrentProj = false, - string preReleaseSuffixOverride = null) + string preReleaseSuffixOverride = null, string FinalVersion = null) { Console.WriteLine("Creating nuspec file"); NuGetPackConfig config; var doc = CreateNuspec( - projectPath, assemblyPath, isDebug, doIncludeCurrentProj, preReleaseSuffixOverride, + projectPath, assemblyPath, isDebug, doIncludeCurrentProj, preReleaseSuffixOverride,FinalVersion, out config); var nuspecPath = Path.ChangeExtension(assemblyPath, ".nuspec"); @@ -135,16 +135,16 @@ public void PublishPackage(string packagePath) public XDocument CreateNuspec( string projectPath, string assemblyPath, bool isDebug, bool doIncludeCurrentProj = false, - string preReleaseSuffixOverride = null) + string preReleaseSuffixOverride = null, string FinalVersion = null) { return CreateNuspec( - projectPath, assemblyPath, isDebug, doIncludeCurrentProj, preReleaseSuffixOverride, + projectPath, assemblyPath, isDebug, doIncludeCurrentProj, preReleaseSuffixOverride,FinalVersion, out NuGetPackConfig config); } public XDocument CreateNuspec( string projectPath, string assemblyPath, bool isDebug, bool doIncludeCurrentProj, - string preReleaseSuffixOverride, + string preReleaseSuffixOverride,string FinalVersion, out NuGetPackConfig config) { if (projectPath == null) @@ -162,7 +162,7 @@ public XDocument CreateNuspec( packageName = packageName.Substring(0, packageName.Length - nugetExtension.Length); var fileVersion = FileVersionInfo.GetVersionInfo(assemblyPath); - var version = GetVersion(fileVersion, preReleaseSuffixOverride); + var version = GetVersion(fileVersion, preReleaseSuffixOverride,FinalVersion); var owners = fileVersion.CompanyName; @@ -243,7 +243,7 @@ public XDocument CreateNuspec( packageName, version, owners, authors, shortSummary, longDescription, releaseNotes, licenseUrl, projectUrl, iconUrl, copyright, keywords, nuspecPath, projectPath, isDebug, doAddFrameworkReferences, doIncludeSources, - doIncludeCurrentProj, preReleaseSuffixOverride); + doIncludeCurrentProj, preReleaseSuffixOverride,FinalVersion); return doc; } @@ -253,33 +253,40 @@ public XDocument CreateNuspec( /// /// /// + /// /// - private string GetVersion(FileVersionInfo fileVersion, string preReleaseSuffixOverride) + private string GetVersion(FileVersionInfo fileVersion, string preReleaseSuffixOverride, string FinalVersion) { - var version = fileVersion.FileMajorPart + "." + fileVersion.FileMinorPart + "." + fileVersion.FileBuildPart; + if(FinalVersion == null) + { + var version = fileVersion.FileMajorPart + "." + fileVersion.FileMinorPart + "." + fileVersion.FileBuildPart; - if (fileVersion.FilePrivatePart != 0) - version += "." + fileVersion.FilePrivatePart; + if (fileVersion.FilePrivatePart != 0) + version += "." + fileVersion.FilePrivatePart; - if (preReleaseSuffixOverride == null) - { - var fileVersionParts = fileVersion.ProductVersion.Split(new[] { '-' }, StringSplitOptions.None); - if (fileVersionParts.Length > 1) + if (preReleaseSuffixOverride == null) { - var preReleaseName = string.Join("-", fileVersionParts.Skip(1)); + var fileVersionParts = fileVersion.ProductVersion.Split(new[] { '-' }, StringSplitOptions.None); + if (fileVersionParts.Length > 1) + { + var preReleaseName = string.Join("-", fileVersionParts.Skip(1)); - if (string.IsNullOrWhiteSpace(preReleaseName)) - preReleaseName = "PreRelease"; + if (string.IsNullOrWhiteSpace(preReleaseName)) + preReleaseName = "PreRelease"; - version += "-" + preReleaseName; + version += "-" + preReleaseName; + } } + else if (preReleaseSuffixOverride != string.Empty) + { + version += "-" + preReleaseSuffixOverride; + } + + return version; } - else if (preReleaseSuffixOverride != string.Empty) - { - version += "-" + preReleaseSuffixOverride; + else{ + return FinalVersion; } - - return version; } public XDocument CreateNuspec( @@ -301,13 +308,14 @@ public XDocument CreateNuspec( bool doAddFrameworkReferences, bool doIncludeSources, bool doIncludeCurrentProj, - string preReleaseSuffixOverride) + string preReleaseSuffixOverride, + string FinalVersion) { var nuspecFolder = Path.GetDirectoryName(nuspecPath); var elements = GetElements( nuspecFolder, projectPath, isDebug, doIncludeSources, doIncludeCurrentProj, - preReleaseSuffixOverride, + preReleaseSuffixOverride,FinalVersion, out var dependenciesAttribute); @@ -327,7 +335,7 @@ public XDocument CreateNuspec( dependencies.Add(d); } - var dependenciesElemnt = GetDependenciesForNewCsProj(projectPath, dependencies, preReleaseSuffixOverride); + var dependenciesElemnt = GetDependenciesForNewCsProj(projectPath, dependencies, preReleaseSuffixOverride,FinalVersion); var metadataElement = new XElement("metadata", new XElement("id", packageName), @@ -377,7 +385,7 @@ public XDocument CreateNuspec( return doc; } - protected abstract XElement GetDependenciesForNewCsProj(string projectPath, XElement dependencies, string preReleaseSuffixOverride); + protected abstract XElement GetDependenciesForNewCsProj(string projectPath, XElement dependencies, string preReleaseSuffixOverride,string FinalVersion); public abstract List GetDependencies(string projectPath, out XAttribute dependenciesAttribute); @@ -426,11 +434,12 @@ public List GetDependencies(string packagesFile) /// /// /// + /// /// /// public List GetInternalDependencies( string projectPath, bool isDebug, string buildMachineBinFolder, - string preReleaseSuffixOverride) + string preReleaseSuffixOverride, string FinalVersion) { var references = GetReferences(projectPath, true); var projectFolder = Path.GetDirectoryName(projectPath); @@ -450,7 +459,7 @@ public List GetInternalDependencies( DebugOut(() => "assemblyPath = " + assemblyPath); var fileVersion = FileVersionInfo.GetVersionInfo(assemblyPath); - var referenceVersion = GetVersion(fileVersion, preReleaseSuffixOverride); + var referenceVersion = GetVersion(fileVersion, preReleaseSuffixOverride,FinalVersion); results.Add( new DependencyInfo( @@ -503,16 +512,18 @@ protected void DebugOut(Func getText){} /// If true, includes source files in NuSpec /// /// + /// /// /// If true, treats given project as regular project, /// if not treats it as a NuGet definition project only - does not take binaries or source from project /// /// + /// /// /// Elements for NuSpec public List GetElements( string nuspecFolder, string projectPath, bool isDebug, bool doIncludeSources, - bool doIncludeCurrentProj, string preReleaseSuffixOverride, + bool doIncludeCurrentProj, string preReleaseSuffixOverride,string FinalVersion, out XAttribute dependenciesAttribute) { if (nuspecFolder == null) @@ -548,7 +559,7 @@ public List GetElements( if (doIncludeCurrentProj) { - IncludeCurrentProject(nuspecFolder, projectPath, isDebug, doIncludeSources, preReleaseSuffixOverride, result, projectFolder); + IncludeCurrentProject(nuspecFolder, projectPath, isDebug, doIncludeSources, preReleaseSuffixOverride,FinalVersion, result, projectFolder); } bool? referencesContainNuGetPackConfig = @@ -595,7 +606,7 @@ public List GetElements( } protected abstract void IncludeCurrentProject(string nuspecFolder, string projectPath, bool isDebug, - bool doIncludeSources, string preReleaseSuffixOverride, List result, string projectFolder); + bool doIncludeSources, string preReleaseSuffixOverride,string FinalVersion, List result, string projectFolder); #region NuGet Project Parsing diff --git a/NuGetPack/NuspecCreatorHelper.cs b/NuGetPack/NuspecCreatorHelper.cs index 1575307..34de269 100644 --- a/NuGetPack/NuspecCreatorHelper.cs +++ b/NuGetPack/NuspecCreatorHelper.cs @@ -13,7 +13,7 @@ public static class NuspecCreatorHelper public static void CreatePackages( string binFolder, string solutionFolder, bool isDebug, bool doCreatePkg = true, bool doIncludeCurrentProj = false, - string preReleaseSuffixOverride = null) + string preReleaseSuffixOverride = null, string FinalVersion = null) { var projects = new LinkedList(); FindProjects(solutionFolder, projects); @@ -29,7 +29,7 @@ public static void CreatePackages( creator.CreatePackage( projectPath, assemblyPath, isDebug, doCreatePkg, doIncludeCurrentProj, - preReleaseSuffixOverride); + preReleaseSuffixOverride,FinalVersion); } } diff --git a/NuGetPack/NuspecCreatorNewCsProj.cs b/NuGetPack/NuspecCreatorNewCsProj.cs index c9f94a8..289704a 100644 --- a/NuGetPack/NuspecCreatorNewCsProj.cs +++ b/NuGetPack/NuspecCreatorNewCsProj.cs @@ -228,7 +228,7 @@ void AddConditionalPackages(List conditionalPackages, XElement res) } } - private List GetProjectDependenciesNetStandard(string projectPath, string preReleaseSuffixOverride) + private List GetProjectDependenciesNetStandard(string projectPath, string preReleaseSuffixOverride, string FinalVersion) { var result = new List(); @@ -255,9 +255,9 @@ private List GetProjectDependenciesNetStandard(string projectPath, str return result; } - protected override XElement GetDependenciesForNewCsProj(string projectPath, XElement dependencies, string preReleaseSuffixOverride) + protected override XElement GetDependenciesForNewCsProj(string projectPath, XElement dependencies, string preReleaseSuffixOverride,string FinalVersion) { - var projDependencies = GetProjectDependenciesNetStandard(projectPath, preReleaseSuffixOverride); + var projDependencies = GetProjectDependenciesNetStandard(projectPath, preReleaseSuffixOverride,FinalVersion); var result = GetPackageDependenciesNetStandard(projectPath, projDependencies); return result; @@ -530,7 +530,7 @@ protected override IEnumerable GetProjectReference(XElement proj, XNam } protected override void IncludeCurrentProject(string nuspecFolder, string projectPath, bool isDebug, - bool doIncludeSources, string preReleaseSuffixOverride, List result, string projectFolder) + bool doIncludeSources, string preReleaseSuffixOverride,string FinalVersion, List result, string projectFolder) { } diff --git a/NuGetPack/NuspecCreatorOldCsProj.cs b/NuGetPack/NuspecCreatorOldCsProj.cs index 39941eb..885bd8f 100644 --- a/NuGetPack/NuspecCreatorOldCsProj.cs +++ b/NuGetPack/NuspecCreatorOldCsProj.cs @@ -127,9 +127,9 @@ protected override IEnumerable GetContentFilesForNetStandard(str } protected override void IncludeCurrentProject(string nuspecFolder, string projectPath, bool isDebug, - bool doIncludeSources, string preReleaseSuffixOverride, List result, string projectFolder) + bool doIncludeSources, string preReleaseSuffixOverride,string FinalVersion, List result, string projectFolder) { - result.AddRange(GetInternalDependencies(projectPath, isDebug, nuspecFolder, preReleaseSuffixOverride)); + result.AddRange(GetInternalDependencies(projectPath, isDebug, nuspecFolder, preReleaseSuffixOverride, FinalVersion)); result.AddRange(GetBinaryReferences(nuspecFolder, projectFolder, projectPath, isDebug, nuspecFolder)); @@ -139,7 +139,7 @@ protected override void IncludeCurrentProject(string nuspecFolder, string projec result.AddRange(GetDependenciesFromProject(projectFolder, projectPath)); } - protected override XElement GetDependenciesForNewCsProj(string projectPath, XElement dependencies, string preReleaseSuffixOverride) + protected override XElement GetDependenciesForNewCsProj(string projectPath, XElement dependencies, string preReleaseSuffixOverride,string FinalVersion) { var result = new XElement("dependencies", dependencies); return result; diff --git a/NuGetPack/Program.cs b/NuGetPack/Program.cs index 51c3b0b..e9f7be5 100644 --- a/NuGetPack/Program.cs +++ b/NuGetPack/Program.cs @@ -21,14 +21,14 @@ public static void Main(string[] args) if (cla.Mode != Mode.Solution) { NusPecCreatorFactory.GetCreator(cla.ProjPath).CreatePackage( - cla.ProjPath, cla.DllPath, cla.IsDebug, cla.DoCreateNuPkg, cla.DoIncludeCurrentProj, cla.PreReleaseSuffixOverride); + cla.ProjPath, cla.DllPath, cla.IsDebug, cla.DoCreateNuPkg, cla.DoIncludeCurrentProj, cla.PreReleaseSuffixOverride, cla.FinalVersion); } else { NuspecCreatorBase.SlnOutputFolder = cla.BinFolder; NuspecCreatorHelper.CreatePackages( - cla.BinFolder, cla.SolutionFolder, cla.IsDebug, cla.DoCreateNuPkg, cla.DoIncludeCurrentProj, cla.PreReleaseSuffixOverride); + cla.BinFolder, cla.SolutionFolder, cla.IsDebug, cla.DoCreateNuPkg, cla.DoIncludeCurrentProj, cla.PreReleaseSuffixOverride, cla.FinalVersion); } //Console.ReadKey(); @@ -47,6 +47,7 @@ public class CommandLineArguments public bool DoCreateNuPkg { get; set; } public bool DoIncludeCurrentProj { get; set; } public string PreReleaseSuffixOverride { get; set; } + public string FinalVersion { get; set; } } public static bool TryParseArguments( @@ -63,6 +64,7 @@ public static bool TryParseArguments( string binFolder = null; string solutionFolder = null; string preReleaseSuffixOverride = null; + string FinalVersion = null; commandLineArguments = null; string config = null; @@ -142,6 +144,13 @@ public static bool TryParseArguments( if (preReleaseSuffixOverride.StartsWith("-")) preReleaseSuffixOverride = preReleaseSuffixOverride.Substring(1); } + else if (arg.ToLower().StartsWith("version=") || arg.ToLower().StartsWith("finalversion=")) + { + if (FinalVersion != null) + return false; + + FinalVersion = arg.Substring(arg.IndexOf('=') + 1); + } else { return false; @@ -186,6 +195,7 @@ public static bool TryParseArguments( DoCreateNuPkg = doCreateNuPkg, DoIncludeCurrentProj = doIncludeCurrentProj, PreReleaseSuffixOverride = preReleaseSuffixOverride, + FinalVersion = FinalVersion }; return true; @@ -194,7 +204,7 @@ public static bool TryParseArguments( private static void WriteError() { Console.WriteLine( - @"Correct usage: NuGetPack.exe [project] [] [nopkg] [pre=|preReleaseSuffixOverride=]"); + @"Correct usage: NuGetPack.exe [project] [] [nopkg] [pre=|preReleaseSuffixOverride=] [version=|FinalVersion=]"); Console.WriteLine( @"Via post build event: NuGetPack.exe [project] ""$(ProjectPath)"" ""$(TargetPath)"" $(ConfigurationName)"); Console.WriteLine(