Lewis
Lewis

Reputation: 2453

Packaging SQL files only using Nuget.exe

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

Answers (1)

Ufuk Hacıoğulları
Ufuk Hacıoğulları

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

Related Questions