I have started doing more scratch programming, one off little bits of code that I use and throw away. I found that I am not coding as much at work as I need to be, or want to be for that matter. I am loosing my touch.
Like any thing else, if you don’t use it you loose it.
When I create projects I like to follow a specific file structure. Nothing fancy, I use a solution folder with folders for lib, src and tests. So when I create my scratch solutions I want to create the same folder structure, but there is no easy way to do it with Visual Studio. I tried to create a project template, which would work if what I wanted was skeleton projects. But what I want are skeleton folders and the VS templates won’t create those.
What I wound up doing was create an MSI using NSIS that would create the folder structure and copy core libraries that I like to use. So far it is working out pretty good and was surprisingly simple to create, not by hand of course but with HM NIS Edit, a free tool to create and edit NSIS scripts.
; Script generated by the HM NIS Edit Script
Wizard.
; HM NIS Edit Wizard helper defines
!define
PRODUCT_NAME "Scratch Template"
!define PRODUCT_VERSION "1.0"
!define
PRODUCT_PUBLISHER "HomeNet"
!define PRODUCT_WEB_SITE
"http://blog.ddpruitt.net"
;!define PRODUCT_DIR_REGKEY
"SoftwareMicrosoftWindowsCurrentVersionApp PathsMbUnit.Cons.exe"
; MUI
1.67 compatible ------
!include "MUI.nsh"
; MUI
Settings
!define MUI_ABORTWARNING
!define MUI_ICON
"${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
; Welcome
page
!insertmacro MUI_PAGE_WELCOME
; License page
;!insertmacro
MUI_PAGE_LICENSE "............\path\to\licence\Your\SoftwareLicence.txt"
;
Components page
!insertmacro MUI_PAGE_COMPONENTS
; Directory
page
!insertmacro MUI_PAGE_DIRECTORY
; Instfiles
page
!insertmacro MUI_PAGE_INSTFILES
; Finish page
!insertmacro
MUI_PAGE_FINISH
; Language files
!insertmacro MUI_LANGUAGE
"English"
; MUI end ------
Name "${PRODUCT_NAME}
${PRODUCT_VERSION}"
OutFile "ScratchSetup.exe"
InstallDir
"$DOCUMENTSVisual Studio 2005ProjectsScratchNewSolution"
;InstallDirRegKey HKLM
"${PRODUCT_DIR_REGKEY}" ""
ShowInstDetails show
Section
"MainSection" SEC01
SetOutPath "$INSTDIR"
SetOverwrite
ifnewer
File "GenericSolution.sln"
CreateDirectory
$INSTDIRlib
CreateDirectory $INSTDIRsrc
CreateDirectory
$INSTDIRtest
SectionEnd
Section "MbUnit"
SEC02
SetOutPath "$INSTDIR\lib\MbUnit"
SetOverwrite try
File
"\lib\MbUnit\MbUnit.Framework.dll"
.
.
.
SectionEnd
Section
"Log4Net" SEC03
SetOutPath "$INSTDIR\lib\log4net"
File
"\lib\log4net\log4net.dll"
SectionEnd
Section "Enterprise
Library (June 2006)" SEC04
SetOutPath "$INSTDIR\lib\EntLib.2006.01"
File
"\lib\EnterpriseLibrary.2006.01\EntLibConfig.exe"
.
.
.
SectionEnd
;Section
-Post
; WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" ""
"$INSTDIR\lib\MbUnit\MbUnit.Cons.exe"
;SectionEnd
; Section
descriptions
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro
MUI_DESCRIPTION_TEXT ${SEC01} ""
!insertmacro MUI_DESCRIPTION_TEXT ${SEC02}
""
!insertmacro MUI_DESCRIPTION_TEXT ${SEC03} ""
!insertmacro
MUI_DESCRIPTION_TEXT ${SEC04} ""
!insertmacro
MUI_FUNCTION_DESCRIPTION_END
Add the appropriate files to the Sections, compile and your ready.