mvc open pdf in browser : Batch pdf to jpg online control software utility azure windows winforms visual studio Expert_.NET_Delivery_Using_NAnt_and_CruiseControl_.NET_20050-part1055

Expert .NET Delivery Using NAnt
and CruiseControl.NET
MARC HOLMES
Batch pdf to jpg online - Convert PDF to JPEG images in C#.net, ASP.NET MVC, WinForms, WPF project
How to convert PDF to JPEG using C#.NET PDF to JPEG conversion / converter library control SDK
convert pdf to jpg 300 dpi; reader pdf to jpeg
Batch pdf to jpg online - VB.NET PDF Convert to Jpeg SDK: Convert PDF to JPEG images in vb.net, ASP.NET MVC, WinForms, WPF project
Online Tutorial for PDF to JPEG (JPG) Conversion in VB.NET Image Application
convert pdf file to jpg online; convert pdf file into jpg
Expert .NET Delivery Using NAnt and CruiseControl.NET
Copyright © 2005 by Marc Holmes
Lead Editor: Ewan Buckingham
Technical Reviewer: Brian Nantz
Editorial Board: Steve Anglin, Dan Appleman, Ewan Buckingham, Gary Cornell, Tony Davis,
JasonGilmore, Jonathan Hassell, Chris Mills, Dominic Shakeshaft, Jim Sumser
Assistant Publisher: Grace Wong
Project Managers: Tracy Brown-Collins and Beth Christmas
Copy Manager: Nicole LeClerc
Copy Editor: Liz Welch
Production Manager: Kari Brooks-Copony
Production Editor: Katie Stence
Compositor: Dina Quan
Proofreader: Elizabeth Berry
Indexer: Carol Burbo
Artist: Kinetic Publishing Services, LLC
Cover Designer: Kurt Krames
Manufacturing Manager: Tom Debolski
Library of Congress Cataloging-in-Publication Data
Holmes, Marc.
Expert .NET delivery using NAnt and CruiseControl.NET / Marc Holmes.
p. cm.
Includes index.
ISBN 1-59059-485-1 (pbk. : alk. paper)
1.  Install programs (Computer programs) 2.  Computer software--Development. 3.  Computer software--
Testing.  I. Title.
QA76.76.I55H6 2005
005.1--dc22
2005008428
All rights reserved. No part of this work may be reproduced or transmitted in any form or by any means,
electronic or mechanical, including photocopying, recording, or by any information storage or retrieval
system, without the prior written permission of the copyright owner and the publisher. 
Printed and bound in the United States of America 9 8 7 6 5 4 3 2 1
Trademarked names may appear in this book. Rather than use a trademark symbol with every occurrence
of a trademarked name, we use the names only in an editorial fashion and to the benefit of the trademark
owner, with no intention of infringement of the trademark. 
Distributed to the book trade in the United States by Springer-Verlag New York, Inc., 233 Spring Street,
6thFloor, New York, NY 10013, and outside the United States by Springer-Verlag GmbH & Co. KG,
Tiergartenstr. 17, 69112 Heidelberg, Germany.
In the United States: phone 1-800-SPRINGER, fax 201-348-4505, e-mail orders@springer-ny.com, or visit
http://www.springer-ny.com. Outside the United States: fax +49 6221 345229, e-mail orders@springer.de,
or visit http://www.springer.de.
For information on translations, please contact Apress directly at 2560 Ninth Street, Suite 219, Berkeley,
CA 94710. Phone 510-549-5930, fax 510-549-5939, e-mail info@apress.com, or visit http://www.apress.com.
The information in this book is distributed on an “as is” basis, without warranty. Although every precau-
tion has been taken in the preparation of this work, neither the author(s) nor Apress shall have any
liability to any person or entity with respect to any loss or damage caused or alleged to be caused directly
or indirectly by the information contained in this work. 
The source code for this book is available to readers at http://www.apress.comin the Downloads section.
JPEG to PDF Converter | Convert JPEG to PDF, Convert PDF to JPEG
software; Support a batch conversion of JPG to PDF with amazingly high speed; Get a compressed PDF file after conversion; Support
change pdf file to jpg online; best pdf to jpg converter
JPG to GIF Converter | Convert JPEG to GIF, Convert GIF to JPG
speed JPEG to GIF Converter, faster than other JPG Converters; when you convert the files in batch; Storing conversion so the user who is not online still can
batch pdf to jpg online; change from pdf to jpg
For Helen
JPG to DICOM Converter | Convert JPEG to DICOM, Convert DICOM to
Open JPEG to DICOM Converter first; Load JPG images from local folders in "File" in toolbar Windows Explorer; Select "Batch Conversion" & Choose "DICOM" in
change pdf to jpg; change format from pdf to jpg
JPG to JBIG2 Converter | Convert JPEG to JBIG2, Convert JBIG2 to
Ability to preserve original images without any affecting; Ability to convert image swiftly between JPG & JBIG2 in single and batch mode;
changing pdf file to jpg; convert pdf file into jpg format
Contents at a Glance
Foreword 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv
About the Author 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii
About the Technical Reviewer 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix
Acknowledgments 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi
Introduction
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiii
CHAPTER 1 
A Context for Delivery 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
CHAPTER 2 
Dissecting NAnt 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
CHAPTER 3 
Important NAnt Tasks 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
CHAPTER 4 
A Simple Case Study 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
CHAPTER 5 
Process Standards 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
CHAPTER 6 
Continuous Integration 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
CHAPTER 7
Extending NAnt 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
CHAPTER 8 
Database Integration 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
CHAPTER 9 
Code Generation 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
CHAPTER 10 Closing Thoughts 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
APPENDIX A A Fistful of Tools 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
APPENDIX B NAnt Sweeper 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
INDEX
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
v
JPG to Word Converter | Convert JPEG to Word, Convert Word to JPG
Open JPEG to Word Converter first; Load JPG images from local folders in "File" in toolbar Windows Explorer; Select "Batch Conversion" & Choose "Word" in
convert pdf document to jpg; bulk pdf to jpg converter
JPG to JPEG2000 Converter | Convert JPEG to JPEG2000, Convert
Open JPEG to JPEG2000 Converter first; ad JPG images from local folders in "File" in toolbar Windows Explorer; Select "Batch Conversion" & Choose "JPEG2000" in
bulk pdf to jpg; convert pdf file to jpg
Contents
Foreword 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv
About the Author 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii
About the Technical Reviewer 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix
Acknowledgments 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi
Introduction
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiii
CHAPTER 1 
A Context for Delivery 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Why Delivery Processes Are Needed 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
The Etomic Situation 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Potential Processes 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Simple Delivery 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Segregated Delivery 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Automated Delivery 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Thoughts on Delivery 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
The Environment 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Configuration Management 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Planning
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
A Solution for Delivery 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Automation 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Design to Deliver 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
A Delivery Process for Etomic 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
The Build Process 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
The Deployment Process 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
A Glossary for Delivery 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Summary 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Further Reading 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
CHAPTER 2 
Dissecting NAnt 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
All About NAnt 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
What Does NAnt Do? 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Why Choose NAnt? 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
NAnt Nomenclature 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
vii
JPG to PNG Converter | Convert JPEG to PNG, Convert PNG to JPG
Open JPEG to PNG Converter first; Load JPG images from local folders in "File" in toolbar Windows Explorer; Select "Batch Conversion" & Choose "PNG" in "Output
convert pdf picture to jpg; convert multipage pdf to jpg
VB.NET Image: PDF to Image Converter, Convert Batch PDF Pages to
VB.NET > Convert PDF to Image. "This online guide content end users to convert PDF and PDF/A documents used commonly in daily life (like tiff, jpg, png, bitmap
convert pdf image to jpg; change file from pdf to jpg on
Basic Anatomy of a Build File 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
A “Hello World”Example 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
The NAnt Executable 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Command-Line Options 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
The Build File 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
The Project 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
The Target 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Properties
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Built-in Properties 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
A Build Process for Etomic 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
The Build Skeleton 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
The Deploy Skeleton 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Summary 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Further Reading 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
CHAPTER 3 
Important NAnt Tasks 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
There Is More Than One Way to Do It 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
General Task Features 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Using Attributes 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Using Nested Elements 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Structural Tasks 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
<call> [NAnt] 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
<nant> [NAnt] 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
<loadtasks> [NAnt] 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Conditional Tasks 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
<foreach> [NAnt] 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
<fail> [NAnt] 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
<if> [NAnt] and <ifnot> [NAnt] 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
File Tasks 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
<attrib> [NAnt] 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
<copy> [NAnt],<delete> [NAnt],and <move> [NAnt] 
. . . . . . . . . . 71
<mkdir> [NAnt] 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
<get> [NAnt] 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Build Tasks 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
<asminfo> [NAnt] 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
<exec> [NAnt] 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
<mkiisdir> [NAntContrib] 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
<ndoc> [NAnt] 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
CONTENTS
viii
<nunit2> [NAnt] 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
<solution> [NAnt] 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
<csc> [NAnt] 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Utility Tasks 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
<echo> [NAnt] 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
<style> [NAnt] 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
<zip> [NAnt] and <unzip> [NAnt] 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
<xmlpeek> [NAnt] and <xmlpoke> [NAnt] 
. . . . . . . . . . . . . . . . . . . . 82
Source Control Tasks 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
<vssget> [NAntContrib] 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
<vsscheckin> [NAntContrib] and <vsscheckout> 
[NAntContrib]
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
<vsslabel> [NAntContrib] 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
<vssundocheckout> [NAntContrib] 
. . . . . . . . . . . . . . . . . . . . . . . . . . . 85
Special NAnt Tasks 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
NAnt Functions 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
Script Tasks 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Summary 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
CHAPTER 4 
A Simple Case Study 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Examining the Application 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
What Does It Do? 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Use Cases 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Organizing the Environment 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Visual SourceSafe 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Build Folders 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Creating the Build File 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Error Handling in NAnt 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Clean
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Checkout/Get
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Version 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Build
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
Test 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
document
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
publish
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
notify
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
fail
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
Examining the Output 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
CONTENTS
ix
Opportunities for Refactoring 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Refactoring Settings 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Creating the Deploy File 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Core Settings 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
selectversion
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
get
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
selectenvironments
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
createenvironments 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
position
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
configure
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
notify
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
fail
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
help
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Examining the Output 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Summary 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
Further Reading 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
CHAPTER 5 
Process Standards 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Another Case Study 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Considering the Delivery Scenario 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
The Solutions 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
The Build Process 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
The Deploy Process 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Consideration of Standards 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Naming Conventions 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Source Control Organization 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
VS .NET Settings 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Third-Party Components 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Tools and Support Organization 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Creating the Build Files 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
What Has Changed? 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Comparing the Build Files 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
Refactoring the Build Files 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
Further Refactoring 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
Creating the Deploy Files 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
Etomic.Library.Transformer.Deploy.xml 
. . . . . . . . . . . . . . . . . . . . . . . 153
Etomic.Transformer.Win.Deploy.xml 
. . . . . . . . . . . . . . . . . . . . . . . . . 155
Etomic.Transformer.Web.Deploy.xml 
. . . . . . . . . . . . . . . . . . . . . . . . . 156
Observations 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
CONTENTS
x
A More Complex Scenario 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
VSSManager 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Summary 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Further Reading 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
CHAPTER 6 
Continuous Integration 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
What Is Continuous Integration? 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Opportunities
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Threats 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
Technical Options 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
CruiseControl.NET
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Draco.NET
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
Hippo.NET
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
Implementing CI for the Sample Applications 
. . . . . . . . . . . . . . . . . . . . . . 172
Examining CCNet 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
Basic Configuration 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
Configuring the Server 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
Amending the Build.Core.Xml File 
. . . . . . . . . . . . . . . . . . . . . . . . . . . 183
Amending the Deploy Scripts 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
Creating a Startup Script for the Server 
. . . . . . . . . . . . . . . . . . . . . . 186
Examining the Dashboard 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
Examining the cctray application 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
Examining the State File 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
Testing the multi Source Control 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
Enhancing CCNet 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
Summary 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
Further Reading 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
CHAPTER 7
Extending NAnt 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
NAnt Functionality 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
Investigating NAnt Tasks:<mkdir>
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
A Look at <mkdir> 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
A Look at <copy> 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
A Look at <version> 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
A Look at <exec> 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
Creating a NAnt Task:<fxcop> 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
FxCop Task Requirements 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
<fxcop> Task Usage 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
CONTENTS
xi
Creating the Visual Studio Project 
. . . . . . . . . . . . . . . . . . . . . . . . . . . 210
Implementing the <fxcop>Task 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
Testing the Task 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
Adding the Solution to the Build Process 
. . . . . . . . . . . . . . . . . . . . . 216
Using the Task 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
Summary 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
CHAPTER 8 
Database Integration 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
The Problems with the Database 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Database Scenarios 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
Planning the Database Tasks 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Control Task 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Analyze Task 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
Integrate Task 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
Configure Task 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
The Impact on Continuous Integration 
. . . . . . . . . . . . . . . . . . . . . . . 229
Implementing the Database Tasks 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
Manual SQL Script Processing Task 
. . . . . . . . . . . . . . . . . . . . . . . . . 231
Automated Integration Task 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
Thinking about Data Synchronization 
. . . . . . . . . . . . . . . . . . . . . . . . 250
A Process for Database Integration 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
Control and Configure Tasks 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
Deployment Considerations 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
Implementing Database Integration 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
The Build Script 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
The Deploy Script with Database Deployment 
. . . . . . . . . . . . . . . . 263
Considering DTS Packages 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
Organization 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
Load XML File Task 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
Set Variables Task 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
Summary 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
Further Reading 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
CHAPTER 9 
Code Generation 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Why Use Code Generation? 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Tools for the Task 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
Basic File Manipulation 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
XSLT 
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
CodeSmith
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
CONTENTS
xii
Documents you may be interested
Documents you may be interested