Reputation: 2453
Is there a way to package a folder of only .SQL files instead of having to add them to a project using Nuget.exe?
I know you can specify folders inside the nuspec, but what is the process of doing so? I've only been able to make packages from using .net project/applications.
For example, If I create a nuspec inside called Database.nuspec
F:\folder\trunk\Source\Database.nuspec
inside the folder
F:\folder\trunk\Source\Database
and I want to package up my patch scripts folder
F:\folder\trunk\Source\Database\Patch Scripts
and inside that folder I had
F:\folder\trunk\Source\Database\Patch Scripts\2.0
F:\folder\trunk\Source\Database\Patch Scripts\2.1
F:\folder\trunk\Source\Database\Patch Scripts\2.2
Would I need to include these folders inside of my nuspec or is nuget.exe smart enough to package them up for me? E.G
Update:
Solution 1: would be to include each folder to the nuspec
<files>
<file src="F:\folder\trunk\Source\Database\*.sql" target="Database" />
<file src="F:\folder\trunk\Source\Database\Patch Scripts\*.sql" target="Database\Patch Scripts\" />
<file src="F:\folder\trunk\Source\Database\Patch Scripts\2.0\*.sql" target="Database\Patch Scripts\2.0" />
</files>
But I have a lot of patch files and it will be quite tedious to write out about 40 into a nuspec, I will update if I find a work around.
Solution 2: ufuk-haciogullari suggested using
*\*.sql
as the source since they are one level down, and this does what I want, but I need to keep the file structure intact, If i were to just write
<files>
<file src="F:\folder\trunk\Source\Database\*.sql" target="Database" />
<file src="F:\folder\trunk\Source\Database\Patch Scripts\*\*.sql" target="Database\Patch Scripts" />
</files>
it will store all the returns into the target Database\Patch Scripts\ and this isn't the structure I want.
Update:
<?xml version="1.0" encoding="utf-8" ?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>database</id>
<version>1.0.6</version>
<authors>me</authors>
<description>Description</description>
</metadata>
<files>
<file src="F:\folder\trunk\Source\Database\*.sql" target="Database\" />
<file src="F:\folder\trunk\Source\Database\Patch Scripts\**\*.sql" target="Database\Patch Scripts" />
</files>
This packages my solution and stores the files as they were in the previous format.
nuget.exe pack "F:\folder\trunk\Source\Database\database.nuspec" -OutputDirectory F:\NuGetStore
UPDATE:
Coming back to this, if you leave the target blank in it will re-create the same folder structure that is already in place, so you don't need to create directories.
<?xml version="1.0" encoding="utf-8" ?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>database</id>
<version>1.0.6</version>
<authors>me</authors>
<description>Description</description>
</metadata>
<files>
<file src="F:\folder\trunk\Source\Database\*.sql" target="" />
<file src="F:\folder\trunk\Source\Database\Patch Scripts\**\*.sql" target="" />
</files>
This packages my solution and stores the files.
nuget.exe pack "F:\folder\trunk\Source\Database\database.nuspec" -OutputDirectory F:\NuGetStore
Upvotes: 3
Views: 2468
Reputation: 38488
You can create a nuspec file and state those files explicitly.
<?xml version="1.0" encoding="utf-8" ?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>MyPackage</id>
<version>1.0.0</version>
<authors>me</authors>
<description>Description</description>
</metadata>
<files>
<file src="*.sql" target="Content\SqlFiles" />
</files>
</package>
Then run pack command on the nuspec file.
NuGet.exe pack MyPackage.nuspec
Upvotes: 2