My Automated NuGet Workflow
- by Wes McClure
When we develop libraries (whether internal or public), it helps to have a rapid ability to make changes and test them in a consuming application.  Building     Setup the library with automatic versioning and a nuspec             Setup library assembly version to auto increment build and revision                     AssemblyInfo –> [assembly: AssemblyVersion("1.0.*")]                             This autoincrements build and revision based on time of build                                     Major & Minor                             Major should be changed when you have breaking changes                 Minor should be changed once you have a solid new release                 During development I don’t increment these                                                 Create a nuspec, version this with the code                     nuspec - set version to <version>$version$</version>             This uses the assembly’s version, which is auto-incrementing                              Make changes to code     Run automated build (ruby/rake)             run “rake nuget”         nuget task builds nuget package and copies it to a local nuget feed                     I use an environment variable to point at this so I can change it on a machine level!             The nuget command below assumes a nuspec is checked in called Library.nuspec next to the csproj file                                  $projectSolution = 'src\\Library.sln'
$nugetFeedPath = ENV["NuGetDevFeed"]
msbuild :build => [:clean] do |msb|
  msb.properties :configuration => :Release
  msb.targets :Build
  msb.solution = $projectSolution
end
task :nuget => [:build] do
  sh "nuget pack src\\Library\\Library.csproj /OutputDirectory " + $nugetFeedPath
end
      
    
  
  Setup the local nuget feed as a nuget package source (this is only required once per machine) 
  Go to the consuming project 
  Update the package 
    
      Update-Package Library 
      or Install-Package 
    
  
  TLDR 
    
      change library code 
      run “rake nuget” 
      run “Update-Package library” in the consuming application 
      build/test! 
    
  
If you manually execute any of this process, especially copying files, you will find it a burden to develop the library and will find yourself dreading it, and even worse, making changes downstream instead of updating the shared library for everyone’s sake.
Publishing
  Once you have a set of changes that you want to release, consider versioning and possibly increment the minor version if needed. 
  Pick the package out of your local feed, and copy it to a public / shared feed! 
    
      I have a script to do this where I can drop the package on a batch file 
      Replace apikey with your nuget feed's apikey 
      Take out the confirm(s) if you don't want them 
      
        @ECHO off
echo Upload %1?
set /P anykey="Hit enter to continue "
nuget push %1 apikey
set /P anykey="Done "
      
    
  
  Note: helps to prune all the unnecessary versions during testing from your local feed once you are done and ready to publish 
  TLDR 
    
      consider version number 
      run command to copy to public feed