예제 #1
0
 /// <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));
 }
예제 #2
0
 /// <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"));
         }
     }
 }
예제 #3
0
        /// <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);
        }
예제 #4
0
        /// <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));
        }
예제 #5
0
 /// <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)
                         )
                 }
                     );
             }
         }
     }
 }