How do I change target filename in NuGet Package?

msbuild, nuget, nuget-package

Solution

I found I could rename include files by specifying a full file name for the target.

For example (nuspec snippet):

<files>
<file src="my-library.js" target="content/my-library.$VERSION$.js">
</files> 

and nuget would be run like:

nuget.exe pack mypackage.nuspec -Prop VERSION=1.34

Note: The File extension in src and target must match or the specified target will be treated like a directory.

Problem

JavaScript naming convention requires version number in the file name such as `jQuery.1.34.min.js`, and I have text template which will output `my-library.js` in output folder. I want to create NuGet Package with `my-library.js` in such way that on installation it should be deployed as `my-library.1.34.js` If I build nuget package as part of msbuild process, there is no way I can rename my output js file. I already have a long workaround, in which I have a console app which copies files to folder structure as given version number and then it builds a `nuspec` file and then it is passed onto `nuget.exe`, if there is any easy, I would like to avoid such long steps.

Original source