A tool for packaging and templating solutions
Pull request Compare This branch is 19 commits behind endjin:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


 ______   ______     __    __     ______   __         __     ______   __  __    
/\__  _\ /\  ___\   /\ "-./  \   /\  == \ /\ \       /\ \   /\  ___\ /\ \_\ \   
\/_/\ \/ \ \  __\   \ \ \-./\ \  \ \  _-/ \ \ \____  \ \ \  \ \  __\ \ \____ \  
   \ \_\  \ \_____\  \ \_\ \ \_\  \ \_\    \ \_____\  \ \_\  \ \_\    \/\_____\ 
    \/_/   \/_____/   \/_/  \/_/   \/_/     \/_____/   \/_/   \/_/     \/_____/ 
Templify! v1.0 - Powered by endjin

Templify allows you to template a solution (or folder structure) into a reusable package and then re-deploy that package as a new solution.

Templify was originally created to solve the problem of how the Sharp Architecture project could distribute its sample solution - as the exising Visual Studio Template mechanism was problematic.


Templify can be executed from either the Windows Explorer Shell or via command line. For Windows Explorer select the parent folder containing the solution you want to templify, right click and select the "Templify This Folder" context menu option. A WPF window will appear asking you to entering information about the solution you are templating; Template Name, Template Version Number, Template Author and most importantly - the repeated word / phrase that will be tokenised. As Templify operates on a convention over configuration principal - it will replace all instances of that token, including internal content, directory & file names - with a bespoke token.

When you want to deploy a new instance of your Templify template package - select a new empty folder in Windows Explorer, right click and select "Templify Here" from the context menu. A WPF window will appear with a drop downlist containing all the templates you have installed in your local package repository - select the ones you want to deploy - then enter a new name into the "name" textbox. This will be used to replace the bespoke token created in the previous step.

Templify can also be used from the command line / MSBuild project. Two sample MSBuild targets were install into %PROGRAMFILES%\endjin\Templify\Samples\MSBuild - these show how to create and deploy packages.

From the command line you would create a package using the following command switches:

  TemplifyCmd.exe -m c -p C:\Temp\Sample-Create\Sharp-Architecture -n "Sharp Architecture" -a "Howard van Rooijen" -v "" -t "SA169=__NAME__" -r "c:\Temp\Sample-Deploy"

and you would deploy the package created above by using the following command switches:

  TemplifyCmd.exe -m d -p "c:\Temp\Sample-Deploy" -i sharp-architecture-v1.6.0.0 -t __NAME__=HvR -r "c:\Temp\Sample-Deploy"

The switches have the following meaning:

 -m = mode
      c = create
      d = deploy
 -p = path
 -n = package name
 -a = author
 -v = version number
 -t = token - can be delimited list "Token=__Token__" "Token1=__Token1__"
 -i = package name
 -r = package repository path 
The default package repository path is \Users\%USERNAME%\AppData\Roaming\Endjin\Templify\repo

Packages are simply 7Zip archives - renamed to .pkg. You can open any .pkg file using 7Zip (which is freely downloadable) inside you will find a manifest.xml file - which contains a listing of all the contents in the package and the tokenised solution structure and files.
Templify makes use of the following tools and frameworks:

 o Caliburn.Micro - http://caliburnmicro.codeplex.com/
 o CommandLine - http://commandline.codeplex.com/
 o Machine.Specifications - http://github.com/machine/machine.specifications
 o Machine.Specifications.AutoMocking - http://github.com/jamesbroome/Machine.Specifications.AutoMocking
 o RhinoMocks - http://www.ayende.com/projects/rhino-mocks/downloads.aspx
 o ICSharpCode.SharpZipLib - http://www.icsharpcode.net/opensource/sharpziplib/
 o WPF Themes - http://wpfthemes.codeplex.com/
 o SevenZipSharp - http://sevenzipsharp.codeplex.com
 o 7Zip - http://www.7-zip.org(licensed under the GNU LGPL license) 
 o Icon / Logo - The wonderful - Zyotism: http://www.zyotism.com/aesthetics/iconsets/2001/index.html
 o Console Progress Code by Stanimir Stoyanov: http://stoyanoff.info/code/ConsoleProgress.cs
 o WPF Notify Icon by Phillipp Sumi: http://www.hardcodet.net/projects/wpf-notifyicon



Support / Help
Follow http://twitter.com/templify on twitter.
Report bugs & issues on http://youtrack.codebetter.com/issues/TMPLFY

Credits & Thanks
James Dawson for the original inspiration
Alec Whittington for seeding the idea for use with Sharp Architecture
James Broome for Manage Package / Exclusions feature
Jon George for testing & moral support
Matthew Adams for WPF / MVVM / XAML help
Nick Harewood for prettifying the WPF styles.

Version History
2010.09.30 - v0.5.0.0 - First public release