diff --git a/NuGetPack.UnitTests/NuGetPackTests.cs b/NuGetPack.UnitTests/NuGetPackTests.cs index 56a6b1b..58a2bda 100644 --- a/NuGetPack.UnitTests/NuGetPackTests.cs +++ b/NuGetPack.UnitTests/NuGetPackTests.cs @@ -178,6 +178,31 @@ public void TestGetDependenciesInner() && ((XElement)obj).Attribute("version").Value == "1.24.0"); } + [TestMethod] + public void TestGetDependencies_InternalPackages() + { + var nuspecFolder = Path.GetDirectoryName(nuProj2Dll); + + var creator = new NuspecCreator(); + + XAttribute attribute; + var elements = creator.GetElements( + nuspecFolder, nuProj2Csproj, isDebugVariable, true, false, null, out attribute); + + var dependencies = elements.Where(r => r.ElementType == ElementType.NuGetDependency) + .Select(r => r.Element).ToList(); + + LinqAssert.Count(dependencies, 2); + + LinqAssert.Count(dependencies.Where(r => + r.Attribute("id").Value == "FakeItEasy" + && r.Attribute("version").Value == "1.24.0"), 1); + + LinqAssert.Count(dependencies.Where(r => + r.Attribute("id").Value == "PubComp.Building.Demo.Package1" + && r.Attribute("version").Value == "1.4.1"), 1); + } + [TestMethod] public void TestGetDependenciesViaReferenceInner1() { diff --git a/NuGetPack/DependencyInfo.cs b/NuGetPack/DependencyInfo.cs index 6df7ca6..0c4a517 100644 --- a/NuGetPack/DependencyInfo.cs +++ b/NuGetPack/DependencyInfo.cs @@ -22,4 +22,38 @@ public DependencyInfo(ElementType elementType, XElement element) this.Element = element; } } + + class DependencyInfoComparer : IEqualityComparer + { + #region IEqualityComparer Members + + public bool Equals(DependencyInfo x, DependencyInfo y) + { + return (string)x.Element.FirstAttribute.Value.ToLower() == (string)y.Element.FirstAttribute.Value.ToLower(); + } + + public int GetHashCode(DependencyInfo obj) + { + return ((string)obj.Element.FirstAttribute.Value.ToLower()).GetHashCode(); + } + + #endregion + } + + class XElementComparer : IEqualityComparer + { + #region IEqualityComparer Members + + public bool Equals(XElement x, XElement y) + { + return (string)x.FirstAttribute == (string)y.FirstAttribute; + } + + public int GetHashCode(XElement obj) + { + return ((string)obj.FirstAttribute).GetHashCode(); + } + + #endregion + } } diff --git a/NuGetPack/NuspecCreator.cs b/NuGetPack/NuspecCreator.cs index a928c34..50d0e45 100644 --- a/NuGetPack/NuspecCreator.cs +++ b/NuGetPack/NuspecCreator.cs @@ -11,6 +11,7 @@ namespace PubComp.Building.NuGetPack // ReSharper disable once PartialTypeWithSinglePart public partial class NuspecCreator { + private string PackageVersion {get; set;} public void CreatePackages( string binFolder, string solutionFolder, bool isDebug, bool doCreatePkg = true, bool doIncludeCurrentProj = false, @@ -211,6 +212,7 @@ public XDocument CreateNuspec( var fileVersion = FileVersionInfo.GetVersionInfo(assemblyPath); var version = GetVersion(fileVersion, preReleaseSuffixOverride); + PackageVersion = version; var owners = fileVersion.CompanyName; @@ -397,8 +399,13 @@ public XDocument CreateNuspec( .Select(el => el.Element) .ToList(); + frameworkReferences.AddRange( + elements.Where(el => el.ElementType == ElementType.FrameworkReference) + .Distinct(new DependencyInfoComparer()) + .Select(el => el.Element).ToList()); + metadataElement.Add(new XElement("frameworkAssemblies", - frameworkReferences)); + frameworkReferences.Distinct(new XElementComparer()))); } var doc = new XDocument( @@ -440,12 +447,19 @@ public List GetDependencies(string packagesFile) foreach (var package in packages) { // ReSharper disable PossibleNullReferenceException + string version = PackageVersion; + if (package.Attribute("version") != null ) + { + version = package.Attribute("version").Value; + } + result.Add( new DependencyInfo( ElementType.NuGetDependency, new XElement("dependency", new XAttribute("id", package.Attribute("id").Value), - new XAttribute("version", package.Attribute("version").Value)))); + new XAttribute("version", version))) + ); // ReSharper enable PossibleNullReferenceException } @@ -554,8 +568,8 @@ public List GetElements( DebugOut(() => "ProjectFolder = " + projectFolder); - var packagesFile = Path.Combine(projectPath, "packages.config"); - var internalPackagesFile = Path.Combine(projectPath, "internalPackages.config"); + var packagesFile = Path.Combine(projectFolder, "packages.config"); + var internalPackagesFile = Path.Combine(projectFolder, "internalPackages.config"); var result = new List(); @@ -607,6 +621,8 @@ public List GetElements( DebugOut(() => "projPath = " + refProjPath); result.AddRange(GetBinaryReferences(nuspecFolder, refProjFolder, refProjPath, isDebug, nuspecFolder)); + + result.AddRange(GetFrameworkReferences(refProjFolder, refProjPath)); if (doIncludeSources) result.AddRange(GetSourceFiles(nuspecFolder, refProjFolder, refProjPath));