/// <summary> /// Retrieves nuget replacement values from a referenced /// assembly library or MSBuild property, as specified here: /// http://docs.nuget.org/docs/reference/nuspec-reference#Replacement_Tokens /// </summary> /// <param name="property"> /// The replacement property to retrieve /// </param> /// <returns> /// The replacement property value /// </returns> public dynamic GetPropertyValue(String property) { // attempt to resolve the property from the referenced libraries foreach (var libItem in this.ReferenceLibraries) { try { var props = AssemblyReader.Read(libItem.GetMetadata("FullPath")); if (property == "id") { return(props.Name); } if (property == "version" && props.Version != null) { return(props.Version.ToString()); } if (property == "description") { return(props.Description); } if (property == "copyright") { return(props.Copyright); } if (property == "author") { return(props.Company); } } catch { } } // if the property was not yet resolved, retrieve it // from the project properties return(GetProjectProperty(property)); }
/// <summary> /// Adds project references to the package lib/tools/content section /// </summary> /// <param name="builder"> /// The current package builder /// </param> private void AddLibraries(NuGet.PackageBuilder builder) { // add package files from project references // . DLL references go in the lib package folder // . EXE references go in the tools package folder // . everything else goes in the content package folder // . folders may be overridden using NuBuildTargetFolder metadata (lib\net40, etc.) // . folders may be overridden using TargetFramework attribute (lib\net40, etc.) foreach (var libItem in this.ReferenceLibraries .ValidReferenceLibraryForBinaryNuSource()) { //AddFile(builder, libItem.GetMetadata("FullPath"), libItem.GetMetadata("NuBuildTargetFolder")); var srcPath = libItem.GetMetadata("FullPath");; var srcExt = Path.GetExtension(srcPath).ToLower(); var tgtFolder = "content"; var hasPdb = false; if (srcExt == ".dll") { tgtFolder = "lib"; hasPdb = true; } else if (srcExt == ".exe") { tgtFolder = AddExecutablesToLibFolder ? "lib" : "tools"; hasPdb = true; } // apply the custom folder override on the reference, or based on TargetFramework var customFolder = libItem.GetMetadata("NuBuildTargetFolder"); if (!String.IsNullOrWhiteSpace(customFolder)) { tgtFolder = customFolder; } else if (AddBinariesToSubfolder) { try { var targetFrameworkName = AssemblyReader.Read(srcPath).TargetFrameworkName; if (!String.IsNullOrWhiteSpace(targetFrameworkName)) { tgtFolder = Path.Combine(tgtFolder, VersionUtility.GetShortFrameworkName(new FrameworkName(targetFrameworkName))); } } catch { } } // add the source library file to the package AddFile(builder, tgtFolder, srcPath); // add PDB and/or XML if specified and exist if (hasPdb && this.IncludePdbs) { AddFileOptionally(builder, tgtFolder, Path.ChangeExtension(srcPath, ".pdb")); AddFileOptionally(builder, tgtFolder, Path.ChangeExtension(srcPath, ".xml")); } } }
/// <summary> /// Retrieves the package's ID /// </summary> /// <param name="specDoc"> /// The nuspec document /// </param> /// <returns> /// The package ID, after replacements have been applied /// </returns> String GetPackageID(XDocument specDoc) { var id = specDoc .Root .Elements() .Single(e => e.Name.LocalName == "metadata") .Elements() .Single(e => e.Name.LocalName == "id") .Value; if (id == "$id$") { foreach (var libItem in this.ReferenceLibraries) { try { id = AssemblyReader.Read(libItem.GetMetadata("FullPath")).Name; break; } catch { } } } return(id); }
/// <summary> /// Retrieves nuget replacement values from a referenced /// assembly library or MSBuild property, as specified here: /// http://docs.nuget.org/docs/reference/nuspec-reference#Replacement_Tokens /// </summary> /// <param name="property"> /// The replacement property to retrieve /// </param> /// <returns> /// The replacement property value /// </returns> public dynamic GetPropertyValue(string propertyName) { // attempt to resolve the property from the referenced libraries var propGet = (Func <AssemblyReader.Properties, string>)null; if (assemblyProperties.TryGetValue(propertyName, out propGet)) { foreach (var libItem in this.referenceLibraries) { try { var prop = propGet(AssemblyReader.Read(libItem.GetMetadata("FullPath"))); if (!String.IsNullOrWhiteSpace(prop)) { return(prop); } } catch { } } } // if the property was not yet resolved, retrieve it // from the project properties return(GetProjectProperty(propertyName)); }
/// <summary> /// Adds project references to the package lib section /// </summary> /// <param name="builder"> /// The current package builder /// </param> private void AddLibraries(NuGet.PackageBuilder builder) { // add package files from project references // . DLL references go in the lib package folder // . EXE references go in the tools package folder // . everything else goes in the content package folder // . folders may be overridden using NuBuildTargetFolder metadata (lib\net40, etc.) // . folders may be overridden using TargetFramework attribute (lib\net40, etc.) foreach (var libItem in this.ReferenceLibraries) { var srcPath = libItem.GetMetadata("FullPath"); var srcExt = Path.GetExtension(srcPath).ToLower(); var tgtFolder = "content"; var hasPdb = false; if (srcExt == ".dll") { tgtFolder = "lib"; hasPdb = true; } else if (srcExt == ".exe") { tgtFolder = "tools"; hasPdb = true; } // apply the custom folder override on the reference, or based on TargetFramework var customFolder = libItem.GetMetadata("NuBuildTargetFolder"); if (!String.IsNullOrWhiteSpace(customFolder)) { tgtFolder = customFolder; } else if (AddBinariesToSubfolder) { try { var targetFrameworkName = AssemblyReader.Read(srcPath).TargetFrameworkName; if (!String.IsNullOrWhiteSpace(targetFrameworkName)) { tgtFolder = Path.Combine(tgtFolder, VersionUtility.GetShortFrameworkName(new FrameworkName(targetFrameworkName))); } } catch { } } // add the source library file to the package builder.Files.Add( new NuGet.PhysicalPackageFile() { SourcePath = srcPath, TargetPath = String.Format( @"{0}\{1}", tgtFolder, Path.GetFileName(srcPath) ) } ); // add PDBs if specified and exist if (hasPdb && this.IncludePdbs) { var pdbPath = Path.ChangeExtension(srcPath, ".pdb"); if (File.Exists(pdbPath)) { builder.Files.Add( new NuGet.PhysicalPackageFile() { SourcePath = pdbPath, TargetPath = String.Format( @"{0}\{1}", tgtFolder, Path.GetFileName(pdbPath) ) } ); } } } }