mvc open pdf in browser : Batch pdf to jpg Library SDK class asp.net wpf azure ajax Expert_.NET_Delivery_Using_NAnt_and_CruiseControl_.NET_200521-part1069

control type. We can test this out, and the amended deploy files that take advantage of the vir-
tual directories we created, by deploying the library assembly and ensuring that a build of the
Windows and web applications occurs. We can check the available assets for the library as
shown in Figure 6-15.
Figure 6-15.Published assets
The latest version of the library assembly is 1.0.15.0 (and we should take note of the poor
sort order of the folder!). Figure 6-16 also shows the latest versions of the Windows application—
1.0.3.0—and the web application—1.0.2.0.
Following the deployment of the library file, we would expect each of these to be updated.
The library can be deployed by running the relevant deploy file with the following command
line:
nant -f:etomic.library.transformer.deploy.xml -D:debug=false ➥
-D:sys.version=1.0.15.0 go
We know that the deployment has been successful because of the resulting onscreen mes-
sages and because the HTTP calls worked correctly.
CHAPTER 6 CONTINUOUS INTEGRATION
191
Batch pdf to jpg - 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 jpeg; changing file from pdf to jpg
Batch pdf to jpg - 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 pages to jpg online; conversion pdf to jpg
Figure 6-16.Current version information
As soon as the deployment has proven a success, the next poll of the source control loca-
tions by CCNet results in the output shown in Figure 6-17: a build is being attempted by the
server for both the Windows and web applications.
Figure 6-17.CCNet server attempting a build
Once the builds have been successfully completed (we hope), the dashboard looks like
the one shown in Figure 6-18.
CHAPTER 6 ■ CONTINUOUS INTEGRATION
192
JPEG to PDF Converter | Convert JPEG to PDF, Convert PDF to JPEG
similar software; Support a batch conversion of JPG to PDF with amazingly high speed; Get a compressed PDF file after conversion; Support
.pdf to jpg; convert pdf file to jpg on
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
convert multiple page pdf to jpg; convert pdf into jpg format
Figre 6-18.Updated version information
Both of the build numbers are incremented for the dependent applications, suggesting
that all is well with the multisource control configuration. We can prove that this is indeed the
case by viewing the build log for one of the applications—in the case of Figure 6-19 we are
viewing the web application—and looking at the Modifications Since Last Build section. In
this section we can see that the monitor did indeed pick up the changes in this area, perform-
ing a build.
Figure 6-19.The web application build log
CHAPTER 6 CONTINUOUS INTEGRATION
193
JPG to GIF Converter | Convert JPEG to GIF, Convert GIF to JPG
Open JPEG to GIF Converter first; Load JPG images from local folders in "File" in toolbar Windows Explorer; Select "Batch Conversion" & Choose "GIF" in "Output
convert pdf to jpg file; convert pdf images 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;
batch convert pdf to jpg; convert pdf file to jpg
Since we reference the latest version of the library assembly in the web project, the new
published assets (version 1.0.3.0) should contain the latest version of the library assembly
(version 1.0.15.0). If you take a look inside the zip file for the project, you will find that this is
indeed the case, as Figure 6-20 shows.
Figure 6-20.The assembly version proof
Examining the multisource control setting has allowed us to see the power of CI first-
hand. Instead of relying on the development team to ensure compatibility of new library
assemblies, we provide our own assurance by demanding the integration of the new assembly
(and new source code and so on) as soon as these assets become available to the system by
their committal to the source control repository.
Enhancing CCNet
Chapter 7 discusses extending NAnt and creating new tasks to plug into the NAnt architecture.
This is a very useful feature of NAnt and allows extension of the framework without branching
the NAnt source code—although there is always a chance that the code will undergo a signifi-
cant change of some kind and break the enhancement.
Unfortunately, this is not the case with CCNet. The source code itself is very extensible
and is well organized, as can be seen in Figure 6-21.
CHAPTER 6 ■ CONTINUOUS INTEGRATION
194
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
changing pdf to jpg on; best convert pdf to jpg
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
convert pdf photo to jpg; convert pdf pictures to jpg
Figure 6-21.CCNet source code
Extending most features in CCNet is usually just a case of implementing the relevant
interface. In Figure 6-21 the ILabellerinterface and DefaultLabellerconcrete implementa-
tion of this interface can be seen, but additionally CCNet uses a library called NetReflector
that requires us to attribute properties in the class to translate the ccnet.configfile for the
feature (if indeed the feature is part of the ccnet.configfile). The following small code snippet
shows this for the DefaultLabeller:
CHAPTER 6 CONTINUOUS INTEGRATION
195
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 to jpg 300 dpi; convert .pdf to .jpg
VB.NET Image: PDF to Image Converter, Convert Batch PDF Pages to
and non-professional end users to convert PDF and PDF/A documents to many image formats that are used commonly in daily life (like tiff, jpg, png, bitmap, jpeg
convert pdf to jpg batch; convert .pdf to .jpg online
[ReflectorType("defaultlabeller")]
public class DefaultLabeller : ILabeller
{
private string _labelPrefix = "";
public static string INITIAL_LABEL = "1";
[ReflectorProperty("prefix", Required=false)]
public string LabelPrefix
{
get { return _labelPrefix; }
set { _labelPrefix = value; }
}
..snip...
}
All of this means that the only way to enhance CCNet is through the modification of the
actual source code. This is not a problem if you do not intend to upgrade the version of CCNet
you are using, but given the nature of the software and its rapid development cycle, this is
probably unlikely. Constantly upgrading the changes against a new codebase is also likely to
be onerous. 
Summary
In this chapter we have come to the end of the basic configuration for automated delivery of
.NET solutions. We have built successively upon a set of initially simple scripts, and main-
tained that simplicity as we have increased the number of applications using the process. This
has been possible through the implementation of a set of standards that are not too intrusive,
but are effective to provide the necessary hooks for build automation as we have defined
them.
Specifically in this chapter we have used CruiseControl.NET to provide a harness to
encapsulate the build process we have developed, but also to implement continuous integra-
tion for our applications.
In subsequent chapters we will focus on the development of more advanced features to
the system we have in place to squeeze some more functionality out of NAnt and CCNet while
also using some other tools.
Further Reading
The original CI article can be found at http://martinfowler.com/articles/
continuousIntegration.html.
There is a good comparison of various CI tools in Open Source .NET Development:
Programming with NAnt,NUnit,NDoc,and More by Brian Nantz (Addison-Wesley, 2004).
CruiseControl.NET and its most up-to-date information can be found at
http://ccnet.thoughtworks.com.
Draco.NET can be found at t http://draconet.sourceforge.net.
Hippo.NET can be found at t http://hipponet.sourceforge.net.
CHAPTER 6 ■ CONTINUOUS INTEGRATION
196
Microsoft will be releasing their own build tool, MSBuild, with Visual Studio 2005. It is
certainly worth gaining an appreciation of this tool. We will discuss it further in Chapter 10.
Auseful source of information can be found at http://msdn.microsoft.com/longhorn/
toolsamp/default.aspx?pull=/library/en-us/dnlong/html/msbuildpart1.asp.
CHAPTER 6 CONTINUOUS INTEGRATION
197
Extending NAnt
I
n this chapter we are going to look at extending NAnt with new tasks to assist the processes
we have put in place. We will look at some of the source code for NAnt, focusing on the most
important parts from an extender’s perspective. Then we will construct a new task to use with
the scripts we already have.
NAnt Functionality
Although NAnt performs most of the tasks we would like it to, in Chapter 4 we discovered that it
could not handle the required analysis by FxCop since there was no specific task for the utility.
NAnt’s <exec> task let us perform the required analysis but in an unfriendly way. By unfriendly
I mean that the appearance of the script to perform the analysis was not satisfactory to enable
the standardization of the FxCop analysis through the <exec>task. Consider the code again:
<exec 
program="D:\dotNetDelivery\Tools\FxCop\1.30\FxCopCmd.exe" 
commandline="/f:${core.output}\${project.name.1}.dll 
/o:${core.reports}\fxcop.xml /r:D:\dotNetDelivery\Tools\FxCop\1.30\Rules\" 
failonerror="false"
/>
The basic problem is the construction of the commandlineattribute. As more assemblies
are added, the line simply becomes longer and more unwieldy. The <exec>task allows the
addition of commandlinearguments in a different way—through an embedded set of argument
elements—but this still does not provide precisely the flexibility we would like. 
At this point then, we should crack open the shell to NAnt and take a look at the parts that
are interesting to us.
Note
Apart from digging into the source code itself,trusty Reflector is very useful for this task.
We will not spend much time looking at the low-level framework for NAnt—beautiful
though it is. We are looking to perform specific work, namely the creation of new tasks, rather
than developing the platform itself. 
199
CHAPTER 7
■ ■ ■
CHAPTER 7 ■ EXTENDING NANT
200
The NAnt source code consists of 14 projects at the time of writing. The most important to
usis the NAnt.Core project, which as you will be able to see from Figure 7-1 contains many
familiar-sounding class names in terms of their similarity to actual NAnt task names. The
other projects are largely related to specific task types, such as Visual Studio .NET.
Figure 7-1.The NAnt.Core project
Those classes in the root of this project form the framework to NAnt: the project,target,
andtaskclasses, for example. These are of course far from the full picture, and there are a
whole host of supporting structures. In the subfolders of the project are additional classes to
support the framework. The subfolders contain the following:
Attributes.These supporting classes allow a simple and effective way of providing the
XML structure and validation to a new task. We will make use of these, and see them in
action when we explore the tasks.
Filters.These support the use of filtersets for token replacement and so on, a relatively
new feature in NAnt.
Functions.Similarly, these classes provide the function capabilities of NAnt, another rela-
tively new feature.
Resources.Currently contains only the projecthelp.xsltfile.
Tasks.Contains several of the general-purpose tasks for NAnt. We will look at some of
these later. They are a great starting point for considering a new task.
Types.Another set of supporting classes for tasks. These are the types we discussed back
in Chapter 3—elements with specific functionality such as FileSet. We will make use of
these too.
Util.Contains some additional supporting classes, particularly command-line parsing
support.
A simplified view of the relationships between the classes we are interested in for task
creation is shown in Figure 7-2.
Figure 7-2.Simplified class diagram for NAnt
Element
+Project
+Parent
Task
+ExecuteTask()
+ProgramArguments()
ExternalProgramBase
+ProgramFileName
+ExecuteTask()
+ExecuteTask()
MkDirTask
DataTypeBase
FileSet
ExecTask
+Execute()
Target
+Dependencies
CHAPTER 7 ■ EXTENDING NANT
201
Documents you may be interested
Documents you may be interested