Because this target has been added to the common file, the call to the <exec>task can be
removed by adding the following call in its place in each of the build files:
On its own, this call will generate an error because the assembly containing the <fxcop>
task extension has not been loaded into the runtime. In order to do this, we can add a
<loadtasks>task to the Build.Core.xmlfile. In this case, I am loading the assembly included
under the Tools, folder but you could of course use another version and place the <loadtasks>
task under the <sysinfo>task in the file:
<sysinfo/>
<loadtasks
path="D:\dotNetDelivery\Tools\Etomic.NAntExtensions\➥
Etomic.NAntExtensions.GeneralTasks.dll"/>
With this done, we can use the regular script calls, or the CruiseControl server to build
any of the solutions. When we run the script, we will see the following additional results,
which demonstrate that the assembly is being loaded:
[loadtasks] Scanning assembly "Etomic.NAntExtensions.GeneralTasks" ➥
for extensions.
Also, the <fxcop>task will run and the results (as previously observed) will be seen. The
reports are being generated as required, and we have standardized and generalized even more
of the build files.
We now have the four solutions operating within the CruiseControl.NET environment, as
shown in Figure 7-6.
Figure 7-6.CruiseControl.NET web dashboard
CHAPTER 7 ■ EXTENDING NANT
222
Convert 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; pdf to jpeg converter
Convert 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
change pdf file to jpg file; convert pdf image to jpg image
Summary
We have taken a closer look at the behavior and structure of NAnt. As we have discovered, it is
easy to extend, and a variety of features are available to assist in the construction of tasks with
minimum integration effort, including specific support of command-line type tasks and spe-
cific tasks to aid the use of any custom assemblies.
Extending NAnt is a pleasure rather than a pain. The framework for the application pro-
vides utility rather than forces increased thought on the part of the developer. 
We will make further extensions to NAnt in the next chapter, where things start to get a
little complex as we look at the integration of databases into the build process.
CHAPTER 7 ■ EXTENDING NANT
223
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 pdf picture to jpg; convert pdf file to jpg on
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 pdf into jpg format; change from pdf to jpg on
Database Integration
I
n this chapter we look at two problems that we have ignored until now. The first is the inte-
gration of the database, which can cause problems unless managed carefully. The second
problem is a related one: the deployment of environments using multiple servers.
We are going to take a look at likely scenarios and requirements for database integration
and solutions for the automated and continuous integration of the database environments.
We will then look at how this impacts our current framework for delivery and apply some
changes to handle these more complex scenarios. Finally, we will tackle issues with automat-
ing the deployment of Data Transformation Services (DTS) packages, an area that is easy to
overlook.
The Problems with the Database
So what is the problem with the database? Well, there are a number of issues that by them-
selves are not so severe, but when combined and then considered against the process we are
attempting to install, they demand our attention:
Lack of source control.Generally, source control for databases is quite poor, or at least is
full of risk. Generally no real automated links exist between databases and source control
systems, so it is easy to lose control of database assets that are stored in the source control
database. Once confidence in those assets is lost, we are in trouble. VS .NET has made
some strides toward improving source control support for SQL Server, and I hope that this
improvement continues over time, but it still does not easily provide the required level of
automated control.
Attention to detail.Because of the lack of automated source control facilities, managing
database assets requires diligence and attention to detail. This usually means the handling
of many migration scripts and administration scripts. Once again, if this area is not man-
aged correctly and diligently at all times, then the development and migration picture will
not be complete. Worse, this may not be obvious for some time until the script is needed.
Standing data.The final big issue with the database is the need for development and
migration to occur against standing user data. Whereas the code for an application is
simply the logical model and should be replaced entirely on each release, the database is
both the logical model and the data itself. Management of development and migration
scripts for the database needs to take account of this at all times.
225
CHAPTER 8
■ ■ ■
C# Create PDF from images Library to convert Jpeg, png images to
C# Create PDF from Raster Images, .NET Graphics and REImage File with XDoc Batch convert PDF documents from multiple image formats, including Jpg, Png, Bmp
.pdf to jpg; convert from pdf to jpg
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 to 300 dpi jpg; change file from pdf to jpg on
CHAPTER 8 ■ DATABASE INTEGRATION
226
We can take several steps to solve these problems within the delivery framework we cur-
rently have:
Provide automated management of source control.If the scripts are available, then it is
quite easy to provide tasks that add the scripts to source control when required. To best
accomplish this, the next measure is important.
Outline a standard for managing DDL and SQL scripts.As usual, to best manage auto-
mated processes on a larger scale, a standard mechanism for storing database scripts aids
the implementation of standard techniques.
Provide automated integration mechanisms.In the same way that the scripts can be
added automatically to source control, as long as they are available we can automate the
running of the scripts to provide the migration to the required database.
These measures do not offer a panacea to database integration issues but do provide a
framework and standards—and therefore a set of measures/safeguards—to database inte-
gration. The developer is still responsible for diligently preparing the scripts for database
development, though.
We need to consider how best to apply these potential solutions in our given scenario.
Database Scenarios
Most code development these days involves using a “local development” model. In other
words, the code is created on the developers’ local machines, and the shared source control
database is the integration point and provides the mechanism for sharing new code. The
automated delivery processes then provide the isolated continuous integration process as
already specified. Database development is not necessarily handled in the same way, but it
can be. The actual model used affects the requirements for handling database integration.
Figure 8-1 shows the local database development model.
Figure 8-1.Local database development
C# Image Convert: How to Convert Dicom Image File to Raster Images
RasterEdge.XDoc.Office.Inner.Office03.dll. RasterEdge.XDoc.PDF.dll. This demo code convert dicom file all pages to jpg images.
reader convert pdf to jpg; convert pdf to high quality jpg
VB.NET PDF Convert to Images SDK: Convert PDF to png, gif images
Convert PDF documents to multiple image formats, including Jpg, Png, Bmp, Gif, Tiff, Bitmap, .NET Graphics, and REImage. Turn multipage PDF file into image
change pdf file to jpg online; convert pdf into jpg online
This model demonstrates the use of local SQL Server instances on developers’ machines.
In this model, we need to provide database integration at the software system’s build time
since the integration will have to occur on a separate instance of the database for testing.
The next model, shown in Figure 8-2, is a shared development database instance.
Figure 8-2.Shared database development
In this model, one database is shared between all developers. This means that regular
integration occurs as a matter of course. Therefore, we do not necessarily need to run a
database integration at build time since we have the complete database for testing already
available. This may be risky, though, and it may be preferable to run an integration on a sepa-
rate database instance in any case. Otherwise, we may just want to perform an integration
when we choose to deploy the system to another environment. 
Another factor is the number of database instances that require integration. We may want
to perform integration to a database containing only artificial test data specifically designed
for unit or system testing and then perform another integration to a database containing a
copy, or agreed representative copy, of the production database. 
With this in mind, it seems to make sense to ensure that the process we have in place
allows for integration and testing at build time since this seems to be the most likely scenario
we will come across one way or another. 
CHAPTER 8 DATABASE INTEGRATION
227
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
advanced pdf to jpg converter; batch convert pdf to jpg online
VB.NET PDF - Convert PDF with VB.NET WPF PDF Viewer
Convert PDF to image file formats with high quality, support converting PDF to PNG, JPG, BMP and GIF. VB.NET WPF PDF Viewer: Convert and Export PDF.
change file from pdf to jpg; convert pdf file to jpg file
Planning the Database Tasks
Based on the above discussion, there are a few tasks we can provide as building blocks for
database integration. Table 8-1 lists these tasks.
Table 8-1.Required Database Tasks
Name
Purpose
Control
Adding new migration scripts to the source control database
Analyze
Assessing the database for changes and providing automated migration scripts
Integrate
Running migration scripts on a particular database instance
Configure
Ensuring that the tested/deployed code runs on the required database instance
With those tasks (or suites of tasks), we should be able to handle our requirements for
database integration. The Analyze step is a special case and goes further than in our original
discussion. We had planned to work with scripts provided by developers and integrate using
these scripts, but there are also possibilities for the automation of the migration itself. This
will be the icing on the cake for database integration. Let us consider this list in a little more
detail, and then examine the impact on the delivery process.
Control Task
This task should provide the facilities to add new migration scripts to source control in an
ordered manner to ensure that the database development and migration path is complete and
auditable. In fact, this task does not need to actually use source control, as long as it manages
the assets in a way acceptable for configuration management, although this may well be
under source control. We manage code assets in VSS, but manage the compiled code in zip
files stored (and backed up!) on the CCNet server. We could do the same thing with the data-
base assets, bypassing the source control database, though it is preferable to maintain the
assets under source control because they cannot be regenerated in the same way that com-
piled assemblies can. 
We need to decide what scripts are required, and what to do with these scripts during an
integration cycle. This is not as easy as it might first sound. Do we want to simply maintain
ALTER scripts? Perhaps we want to take a full CREATE script following a successful set of tests.
We may want to do the same with the test data as well. Do we remove the migration scripts
following a successful build (so that they cannot be changed)? If the build fails, do we want to
leave them so that they can be changed?
CHAPTER 8 ■ DATABASE INTEGRATION
228
Analyze Task
Providing automated database integration in terms of the actual migration scripts would be a
huge boon; it significantly reduces the risk of developers failing to manage the scripts accu-
rately and thus introducing build problems. Doing this is a complex business, though. There
are two potential areas to analyze: the scripts defining the database structure, and the scripts
defining the data. The database structure scripts are a good target initially since there are no
semantic issues to deal with. Handling data migration and updates automatically could be a
real headache and may ultimately be handled best manually. For this task we will utilize a
third-party tool.
Integrate Task
Integration itself should be quite straightforward as long as the scripts are available. This step
will involve looking at the scripts available and applying them in the correct order to the cor-
rect environment. Ultimately, though, this should just be a case of running multiple script
processing tasks.
Configure Task
This task ensures that unit tests are carried out against the correct database instance and that
when the system is deployed, the correct application instance points at the correct database
instance. There are a few ways that this kind of work can be achieved that are also applicable
to other configuration settings: the generation of configuration files on the fly, replacing indi-
vidual configuration elements, or pointing the master configuration file to child configuration
files from instance to instance and environment to environment. 
The Impact on Continuous Integration
We need to thread the database migration tasks into the regular process. Figure 8-3 demon-
strates how the process looks with the new task inserted. 
The diagram demonstrates the opportunity for us to include database integration after
the compile and testing steps of the regular process. As we will see, the database integration
step will consist of some substeps itself, but for now we should recognize that post-testing of
the code is the preferred time for the database work. The reasons for this relate to the nature
of database integration: it is to a certain extent a one-way process—rollback is at least painful—
because of the lack of natural support for this sort of operation on a database platform. We
will see this demonstrated later.
CHAPTER 8 DATABASE INTEGRATION
229
Figure 8-3.CI process with database integration
CHAPTER 8 ■ DATABASE INTEGRATION
230
Implementing the Database Tasks
In order to implement the database tasks, we must use a combination of existing NAnt tasks,
new custom tasks (or some clever <exec>tasks) and the aforementioned third-party tool to
handle automated database integration. 
We will tackle the Analyze and Integrate tasks initially, then concern ourselves with source
control and configuration issues after we have handled the guts of the work. In looking at the
Analyze and Integrate tasks, we will effectively be looking at two differing solutions: one for
manual scripts and one for automated scripts for the database integration. We will consider
the task for processing manually generated SQL scripts first.
Manual SQL Script Processing Task
So, as discussed earlier, the manual integration task needs to be able to look at a series of
migration scripts and execute them in the correct order on a designated target database.
Therefore, in order to use this task, we need something like the following information:
thefolder where the database scripts are, the correct ordering of the scripts, and the database
details (server, database name, user and password credentials).
This means that the following NAnt script could do the job quite nicely:
<dbIntegrate 
folder="D:\BookCode\Chapter8\DBTest1\" 
compare="CreationTime"
server="localhost"
database="TestDB-Integration"
uid="sa"
pwd="w1bbl3"
/>
Of course, this task does not currently exist. We need to generate the code for this task,
but we are used to this now from our work on the <fxcop>task in Chapter 7.
Note
As usual,the code for this task can be found in the VSS database.
The code for the integration is actually quite simple. The project for this particular task
looks like the one shown in Figure 8-4.
CHAPTER 8 DATABASE INTEGRATION
231
Figure 8-4.ManualDBTasks project
Note
The code for this chapter could be included as part of the previous NAntExtensions solution,but I
have separated the projects for clarity.
The code for all six XML attributes is broadly the same and is quite simple. I could have
used a filesetfor the script folder(s), but this would confuse the ordering of the scripts and
isprobably not the desired scenario.
private DirectoryInfo _folder;
private string _compareOption;
//Database Info
private string _server;
private string _database;
private string _username;
private string _password;
[TaskAttribute("folder", Required=true)]
public DirectoryInfo Folder
{
get{return _folder;}
set{_folder = value;}
}
/// <summary>
/// Available options "Name", "LastWriteTime", "CreationTime"
/// </summary>
[TaskAttribute("compare", Required=true)]
public string CompareOption
CHAPTER 8 ■ DATABASE INTEGRATION
232
Documents you may be interested
Documents you may be interested