Views on the Future
Finally, here are a few thoughts on the near future.
Regarding MSBuild
We have mentioned MSBuild on one or two occasions throughout the book. This tool, as you
have probably gathered, is designed by Microsoft to enable build scripting in Visual Studio
2005 under .NET 2.0.
It is a huge compliment to the developers of NAnt that Microsoft has effectively taken
NAnt and implemented its own version for VS .NET 2005. Looking at some sample code for
MSBuild (from the MSDN site), you may be able to spot the similarity:
<Project>
<Item 
Type="FilesToCompile" 
Include="HelloWorld.cs"
/>  
<Target Name="BuildHelloWorldExecutable">
<Task 
Name="csc" 
Sources="@(FilesToCompile)"
OutputAssembly="HelloWorld.exe"
TargetType="exe"
/>
</Target>
</Project>
Hmm. Could you see any similarity? I thought so.
MSBuild will undoubtedly have some impact on the NAnt community. There are a variety
of possibilities for this impact:
Until MSBuild is released, we will not know its actual capabilities. That it is tightly inte-
grated into VS .NET 2005 is certain, but its breadth of functionality is much less clear. It
seems unlikely that it will support C++, and it is very unlikely to support builds of (for
example) Visual Basic 6.0 since this is a tool for .NET 2.0 rather than general use. This tight
integration may be a negative to those that do not like to be tied into a particular platform.
MSBuild takes advantage of new solution and project formats under VS .NET 2005. This is
an issue that NAnt has been struggling with for a long time under .NET 1.0 and 1.1. While
the new formats clearly aid MSBuild, they will also aid NAnt significantly. 
MSBuild is extensible in a strikingly familiar way to NAnt. NAnt relies on the community
and regular contributors for extension. MSBuild does not need this community—Microsoft
has enough of its own community to extend its tool—but there may be a greater sense of
community for NAnt for all the usual noncorporate, open source reasons.
CHAPTER 10 CLOSING THOUGHTS
333
Change pdf file 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
change from pdf to jpg on; convert pdf pictures to jpg
Change pdf file 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 to jpg 300 dpi; convert pdf to 300 dpi jpg
NAnt has a big advantage in its adoption. Currently it owns its market and will likely
maintain significant loyalty in a genuinely loyal sense, but also in the sense that it may
not be easy to remove from development teams’ processes even given the similarity of
thesyntax!
Regardless of the outcome, the effect of NAnt on the delivery phase of the software devel-
opment life cycle is profound and the good work is for all to see. Delivery tools are about to hit
the mainstream (if they have not already) and the development community will wonder how
they managed without them.
Other Directions
When my mind is allowed to wander, I think about how things should really be. Random
thoughts I have had on the things I would like to see are as follows:
Visualization and IDE integration.Given that NAnt is an XML-based system and oper-
ates in a workflow, it would make a lot of sense to a have a visual editor for the delivery
process. I am not talking about an application such as NAntPad, but something like the
DTS designer. The ability to select a palette of tasks and hang them together with work-
flow icons, add environment information, and so on would be great for architects of these
processes. I am not sure it would add to your productivity with NAnt, but it would clarify
a lot of the more complex build scenarios when you are developing them and help you
explain them to the development team. Similarly, integrating this pipeline into the IDE
(such as VS .NET) is also worthwhile. I think that the solution build functionality of the
IDE should be tied to a defined pipeline (if desired). Perhaps MSBuild will bring this to
the table when it arrives.
Macro-containers.The joys of “XCOPY deployment” are a lingering memory. .NET has
delivered much of what it promised in this area, but I cannot help feeling that something
is missing. Since .NET, I am sure that you cannot have failed to notice the sheer number
of assemblies that are used from application to application, perhaps simply because it is
so easy to do so. One assembly per architectural layer? No problem. Reference loads of
third-party assemblies and copy them locally? No problem. The issue is that when dealing
with an application, the unpackaged and installed form has no real “identity” other than
the folder structures it occupies. My feeling is that delivery of an application, and the
handling of applications through the delivery chain, would be better managed through
some kind of macro-container, representing the application as a whole. This differs from
an installation package (such as an MSI); it would be able to maintain data about an
application that could be used by the system or by a developer to pull out information
about an application. For example, the application should “know” which are its test
assemblies.
This is not just about databases; it is about assets that are not controlled as part of the
system solution: DTS packages, media assets, and so forth. Perhaps my vague ideas on macro-
containers tie into this area as well.
CHAPTER 10 ■ CLOSING THOUGHTS
334
Online Convert Jpeg to PDF file. Best free online export Jpg image
Online JPEG to PDF Converter. Download Free Trial. Convert a JPG to PDF. You can drag and drop your JPG file in the box, and then start immediately to sort the
convert multi page pdf to single jpg; best pdf to jpg converter online
Online Convert PDF to Jpeg images. Best free online PDF JPEG
Online PDF to JPEG Converter. Download Free Trial. Convert a PDF File to JPG. Drag and drop your PDF in the box above and we'll convert the files for you.
convert multiple page pdf to jpg; convert pdf to gif or jpg
Conclusion
Working with NAnt and CruiseControl.NET is a great pleasure. The flexibility and power of
these frameworks and the possibilities they introduce for defining the process in a formal way
should not be underestimated. Their ability to remove the tedium of certain processes from
the developer and to ensure compliance is also excellent.
At the same time, these tools highlight flaws and immaturity in the delivery phase of a
software solution. This makes me a little sad but hopeful for the future. 
Things will improve, particularly as Microsoft gets its act together and begins to deliver
tools in this area, which has the tendency to push the world in a specific direction. 
Delivery processes are a huge consideration. You can achieve efficient, consistent
processes now with planning, effort, and the correct tools by your side. 
CHAPTER 10 CLOSING THOUGHTS
335
C# Image Convert: How to Convert Adobe PDF to Jpeg, Png, Bmp, &
C# sample code for PDF to jpg image conversion. This demo code convert PDF file all pages to jpg images. // Define input and output files path.
convert pdf page to jpg; .pdf to .jpg online
C# Image Convert: How to Convert Dicom Image File to Raster Images
RasterEdge.XDoc.Office.Inner.Office03.dll. RasterEdge.XDoc.PDF.dll. RasterEdge.XDoc. PowerPoint.dll. This demo code convert dicom file all pages to jpg images.
convert pdf to jpg converter; change pdf to jpg image
A Fistful of Tools
T
hroughout the book, we have used (or will use, depending on whether you have jumped to
the end of the book to reveal whodunit) a variety of tools for a variety of purposes. Some of
these are stand-alone pieces of software such as a text editor or Visual Studio .NET, but others
such as NAnt have a number of dependencies. Some of these are introduced as a matter of
choice, but others are selected to address versioning issues among the various software
packages.
In this appendix, we discuss the tools we have used directly (and indirectly) to implement
the delivery processes.
Software Dependencies
As just mentioned, constructing an environment for automated delivery introduces several
dependencies and interactions among software packages. Figure A-1 demonstrates a simpli-
fied view of the build server.
Figure A-1.Simplified view of software dependencies
337
APPE NDIX A
■ ■ ■
VB.NET PDF File Merge Library: Merge, append PDF files in vb.net
scanned images to PDF, such as tiff, jpg, png, gif Append one PDF file to the end of another one in NET framework library download and VB.NET online source code
convert from pdf to jpg; convert .pdf to .jpg online
VB.NET PDF Convert to Images SDK: Convert PDF to png, gif images
Convert PDF to Jpg, Png, Bmp, Gif, Tiff and Bitmap in ASP.NET. Or directly change PDF to Gif image file in VB.NET program with this demo code.
convert pdf to jpeg; best convert pdf to jpg
APPENDIX A A FISTFUL OF TOOLS
338
In the diagram, I have shown only the most relevant, specific features of software used for
the delivery process. The implication is that the .NET Framework is also a dependency.
Figure A-2 shows a fuller view of the dependencies on all the software used to deliver the
specific processes we introduce throughout the book. In particular, you can see the dependen-
cies on, for example, NUnit, the Red Gate SQL Bundle and FxCop; some of these dependencies
are introduced through our own extension of NAnt, and others through NAnt itself (such as
the NUnit version dependency). I have not marked other dependencies in Figure A-2 if NAnt
comes with the relevant assembly, but you should also be aware that your own version may
not be the same as the embedded NAnt-based version. For example, I did not show NAnt
using NDoc since NAnt comes with the relevant NDoc assembly, but keep in mind that your
version of NDoc may not be the same. 
Figure A-2.Expanded view of software dependencies
Tool Organization
Given the software dependencies, and the number of tools that we could reasonably apply
inthe delivery process (we did not touch upon the use of tools for test coverage, or software
metrics that could be applied in the analysis stages), it makes sense to follow some kind of
organizational strategy for tools. 
C# PDF File Merge Library: Merge, append PDF files in C#.net, ASP.
Free online C#.NET source code for combining multiple PDF scanned images to PDF, such as tiff, jpg, png, gif Append one PDF file to the end of another and save
pdf to jpg; convert multiple pdf to jpg online
VB.NET PDF - Convert PDF with VB.NET WPF PDF Viewer
PDF Document; Remove Password from PDF; Change PDF Permission Settings. Convert PDF to image file formats with high quality, support converting PDF to PNG
batch pdf to jpg converter online; convert pdf to jpeg on
My general strategy is to organize my tools under a single folder, using the name of the
software as the next folder, and then the version of the software as the next folder. This
arrangement allows me to add multiple versions of software and change configuration in
anobvious way so that, for example, I can test my existing scripts with a new version of NAnt
very easily—particularly when configuring EditPlus to handle this (as you will see in a
moment). Figure A-3 shows an example of this configuration from my current desktop.
Figure A-3.Organizing tools effectively
Automating the Organization
Bearing in mind the effective organization of tools you are using and the scripts and assets of
the delivery processes themselves, and taking into account our newfound expertise with a tool
such as NAnt, it may not take long to see the possibilities for the automation of the creation of
the entire delivery environment using NAnt. 
In his book, Open Source .NET Development:Programming with NAnt,NUnit,NDoc,and
More, Brian Nantz introduces a series of scripts used to obtain his array of open source tools
on a regular basis. You could use his approach as a basis for obtaining your own downloads,
and then expand it to the creation or update of an environment automatically. I could have
done something similar as part of this book, but instead I have outlined in the following script
the steps for configuring a desktop to operate the code examples in this book automatically.
Organizing the contents of the package involves a zip file called BuildServer.zip, which con-
tains a batch file for triggering the build script, a folder containing the minimum NAnt
assemblies for the script to run, and another zip file called Environment.zip. This second zip
file contains the scripts for the build server and the tools that allow the server to function.
Figure A-4 shows the BuildServer.zipfile contents after unzipping, and Figure A-5 shows
thebasic layout of the Environment.zipfile.
APPENDIX A A FISTFUL OF TOOLS
339
Figure A-4.BuildServer.zip contents
Figure A-5.Environment.zip contents
With these assets, the script to prepare the build server looks like the following. Com-
ments inside the script describe the actions I included as well as some that are missing but
possibly needed. The script is a useful starting point for completing your own build server
setup.
APPENDIX A A FISTFUL OF TOOLS
340
<?xml version="1.0" encoding="utf-8"?>
<project name="CCNet Server Build" default="help">
<property name="build.drive" value="E"/>
<property name="build.area" value="${build.drive}:\BuildArea"/>
<property name="build.tools" value="${build.drive}:\BuildTools"/>
<property name="build.deploy" value="${build.drive}:\BuildDeploy"/>
<property name="build.scripts" value="${build.drive}:\BuildScripts"/>
<property name="build.server" value="localhost:80"/>
<target name="go" depends="CleanUp, Initialize, RemoveOld, PositionNew, Configure,
CleanUp"/>
<target name="Initialize">
<!--Make the temporary deployment folder-->
<mkdir dir="${build.deploy}"/>
<!--Unzip the environment contents-->
<unzip zipfile="Environment.zip" todir="${build.deploy}"/>
<!--There may be a need to preserve the existing assets?-->
</target>
<target name="RemoveOld">
<!-- Remove IIS Virtual Directories -->
<deliisdir iisserver="${build.server}" vdirname="ccnet/files"
failonerror="false"/>
<deliisdir iisserver="${build.server}" vdirname="ccnet" 
failonerror="false"/>
<!-- Remove the Tools -->
<delete dir="${build.tools}" failonerror="false"/>
<!-- Remove the Scripts -->
<delete dir="${build.scripts}" failonerror="false"/>
</target>
<target name="PositionNew">
<!-- Create the process folders -->
<mkdir dir="${build.area}\source" failonerror="false"/>
<mkdir dir="${build.area}\output" failonerror="false"/>
<mkdir dir="${build.area}\reports" failonerror="false"/>
<mkdir dir="${build.area}\docs" failonerror="false"/>
<mkdir dir="${build.area}\distribution" failonerror="false"/>
<mkdir dir="${build.area}\publish" failonerror="false"/>
APPENDIX A A FISTFUL OF TOOLS
341
<!-- Create the tools folder-->
<mkdir dir="${build.tools}" failonerror="false"/>
<!-- Create the script folder-->
<mkdir dir="${build.scripts}" failonerror="false"/>
<!-- Move the tools into position-->
<move todir="${build.tools}">
<fileset basedir="${build.deploy}\Tools">
<include name="**/*" />
</fileset>
</move>
<!-- Move the scripts into position-->
<!-- COULD INCLUDE A FILTERSET TO ACCOUNT FOR DIFFERING LOCATIONS OF TOOLS -->
<move todir="${build.scripts}">
<fileset basedir="${build.deploy}\Scripts">
<include name="**/*" />
</fileset>
</move>
<!-- Replace the existing publishing information if necessary-->
</target>
<target name="Configure">
<!-- Set up the IIS Virtual Directories-->
<mkiisdir 
iisserver="${build.server}" 
dirpath="${build.tools}\ccnet\0.7\webdashboard" 
vdirname="ccnet" defaultdoc="default.aspx" enabledefaultdoc="true"/>
<mkiisdir 
iisserver="${build.server}" 
dirpath="${build.area}\Publish" 
vdirname="ccnet/files" enabledirbrowsing="true"/>
<!-- Set up Environment Variables ?-->
</target>
<target name="CleanUp">
<!-- Remove the temporary deployment folder-->
<delete dir="${build.deploy}" failonerror="false" />
</target>
<target name="help">
<echo message="This script creates a new Build Server environment."/>
</target>
</project>
APPENDIX A A FISTFUL OF TOOLS
342
You might find, as I certainly have, that this is in fact one of the first scripts you should
getworking for the introduction of the automated delivery processes into a production envi-
ronment. If you are feeling especially clever, you could configure CC.Net to perform this
procedure automatically on a periodic basis. 
Core Tools
We will now discuss the core tools needed to follow all of the examples in the book and to
implement the suggested processes.
NAnt
NAnt can be obtained from http://nant.sourceforge.net. Also at that URL you will find links
to a knowledgebase wiki, developer and user mailing lists, and current documentation. NAnt
is a very active project, and if you are working seriously with the tool you should at least be
reading about current issues and upcoming directions from the mailing lists, if not getting
involved in them. The authors of NAnt are extremely responsive and helpful.
NAntContrib
The same is true of NAntContrib. Produced for the most part by the same team, NAntContrib
contains tasks that are useful but generally applicable for a specific implementation of, for
example, a source control system: if you contribute to the NAnt code, this is likely where it will
end up. There is some blurring of the lines between the differences of NAnt and NAntContrib
task criteria, but regardless, you will need both sets of tools. NAntContrib can be obtained
from http://nantcontrib.sourceforge.net.
CruiseControl.NET
Our continuous integration provider of choice can be obtained from http://ccnet.➥
thoughtworks.com. Also at this URL you will find current documentation, links to user and
developer mailing lists, and so on. Everything that can be said of NAnt can be said of CCNet
interms of activity and responsiveness of the development team.
Red Gate SQL Bundle
Unlike NAnt and CCNet, SQL Bundle is a commercial package produced by Red Gate Soft-
ware. You can download a 14-day trial version from the web site—www.red-gate.com—for
using the custom database tasks described in Chapter 8. The enormous utility in these tools
will probably convince you to purchase a license or two. Red Gate is also the producer of the
Ants profiling and load-testing software. Red Gate has a good community atmosphere, and
with a small development team, the company is genuinely interested in feedback on its
products.
APPENDIX A A FISTFUL OF TOOLS
343
Documents you may be interested
Documents you may be interested