Buy Practical Code Generation in .NET at Bookstore UAE
close menu
Bookswagon
search
My Account
Home > Computing and Information Technology Books > Computer programming / software engineering > Programming and scripting languages: general > Practical Code Generation in .NET: Covering Visual Studio 2005, 2008, and 2010
Practical Code Generation in .NET: Covering Visual Studio 2005, 2008, and 2010

Practical Code Generation in .NET: Covering Visual Studio 2005, 2008, and 2010


     0     
5
4
3
2
1



Out of Stock


Notify me when this book is in stock
X
About the Book

Enlist Visual Studio’s Built-in Code Generation Tools to Write Better Software Faster

 

Automatic code generation can dramatically increase your productivity, improve code quality and maintainability, promote reuse, and help you extend best practices throughout your development organization. .NET and Visual Studio contain many powerful, code-generation tools—and this book shows you how to succeed with all of them. With Practical Code Generation in .NET, spend less time writing monotonous, repetitive code—leaving more time to address troublesome areas!

 

Microsoft MVP Peter Vogel covers code generation with Visual Studio 2010, 2008, and 2005, as well as all recent versions of .NET, including .NET 4.0. You’ll learn when enlisting code generation makes sense and how to design solutions that build on the skills and resources you already have.

 

Writing for experienced programmers, Vogel shows how to generate reliable code using procedural code, Visual Studio add-ins, XML, configuration files, and more—including Microsoft’s innovative CodeDOM technology for generating code in multiple languages. He brings everything together in three complete, chapter-length case studies.

 

Coverage includes

  • Understanding the structure of .NET code-generation solutions and best practices for architecting them
  • Creating Visual Studio add-ins that quickly integrate code generation into day-to-day activities
  • Using objects and methods to add or remove project components
  • Using text insertion to generate code using any tool—even standard string handling functions
  • Working with the specific features of C#, Visual Basic .NET, and ASP.NET
  • Generating more concise code with .NET’s new Text Template Transformation Toolkit (T4)
  • Building code-generation solutions with Visual Studio templates, attributes, and custom tools
  • Distributing code-generation solutions


Table of Contents:

Foreword . . . xiv

Preface . . . xvi

Acknowledgments . . . xx

About the Author . . . xxi

Chapter 1 Introducing Code Generation . . . 1

Repetitive Code: Your History . . . 2

Copy-and-Paste . . . 2

General-Purpose Code . . . 3

Benefits of Code Generation . . . 4

When to Use Code Generation . . .7

Best Practices in Code-Generation Solutions . . . 10

Code-Generation Process . . . 11

Code-Generation Tools . . .12

Model-Driven Architecture, Declarative Programming, and Code Generation . . . 14

Model-Driven Architecture . . . 14

Declarative Programming . . . 17

PART I: TOOLS . . . 19

Chapter 2 Integrating with Visual Studio . . . 21

Design-Time Integration . . .22

Starting Your Visual Studio Add-In . . . 23

Laying the Foundation . . . 24

Integrating with Visual Studio . . . 27

Writing a Generation Class in Visual Studio . . . 30

Working with COM . . .31

Debugging Issues in Visual Studio 2005/2008 . . . 32

The OnConnection Method . . .34

Removing Add-In Menus . . . 35

Creating a Menu-Driven User Interface . . . 36

Extending Your Menus . . . 36

Adding Additional Menus . . . 37

Finding the Menu . . . 38

Adding the Menu Item . . . 40

Supporting Multiple Menu Items . . . 42

Creating Submenus . . .43

Adding Submenus . . . 44

Context Menus . . . 44

Accessing the Context . . . 46

Working with Visual Studio Windows . . . 49

Using the Task List Window . . .49

Retrieving Selected Items . . . 50

Writing Messages to the Output Window and the TaskList . . . 51

AutoNavigate in Visual Studio 2005 . . .55

Final Touches . . . 57

Responding to Events . . . 58

Simple Events . . . 58

Filtered Events . . . 60

Working with Document Events . . . 61

Extracting Event Packages . . . 63

Finishing Events . . . 64

Accepting Input . . . 65

Options . . . 65

Creating a Dockable Window . . .  65

Saving Input Values . . .69

Adding an Options Tab . . . 71

Accessing and Saving Option Properties . . . 73

Integrating with Visual Studio . . . 76

Chapter 3 Manipulating Project Components . . . 77

The Code Model . . . 78

Code Model Caveats . . . 79

Managing Projects and Solutions . . . 80

Creating Projects . . . 80

Referencing the Project Items Collection . . . 82

Adding Folders to a Project . . .83

Adding Files . . . 84

Copying Boilerplate Code . . . 86

Generating Code . . . 86

Introducing CodeModel and FileCodeModel . . . 86

Generating Code . . . 89

Modifying and Analyzing Components . . .110

Finding Projects and Project Items . . . 110

Reading Project Properties . . .113

Removing Items . . . 113

Checking for Changes . . . 114

Processing Components in a File . . . 114

Processing All the Components in a File . . . 114

Retrieving Components by Name . . . 116

Retrieving Components by Location . . .117

Working with Retrieved Elements . . . 118

Determining If an Element Can Be Modified . . . 118

Writing Language-Specific Code . . . 119

Using CodeElement with the Position Parameter . . . 119

Choosing Interfaces . . . 120

The CodeEvent Object . . . 121

Working with the CodeType Objects . . . 121

Finding Components with CodeType . . .121

Simple CodeType Options . . .124

Working with Comments and Documentation Comments . . . 124

Working with Related Classes . . . 125

Storing Information . . . 126

Storing Strings in the Globals Object . . . 127

Working with Project Components . . . 128

Chapter 4 Modifying Code in the Editor . . . 129

Opening and Closing Documents and TextDocuments . . . 130

Accessing the Document/TextDocument . . . 130

Making the Document Available to the Developer . . . 131

Closing the Document . . .132

Backing Out Changes . . .133

Creating and Finishing a Context . . . 133

Getting Information on the Context . . . 135

Creating EditPoints to Access Text . . . 135

Retrieving EditPoints with the TextDocument . . . 136

Retrieving EditPoints with the FileCodeModel . . . 136

Retrieving CodeElements from Text . . . 138

Retrieving Information . . .139

Document and TextDocument Objects . . . 139

Document Object Only . . . 140

EditPoint . . .140

Accessing Text with an EditPoint . . . 140

Retrieving Text . . . 141

Relocating the EditPoint . . . 143

Finding Text . . . 144

Finding Text with Regular Expressions . . . 146

Working with Bookmarks . . . 147

Creating Bookmarks . . . 147

Inserting, Replacing, and Formatting Text . . . 149

Inserting and Deleting Text . . .149

Replace Selected Text . . . 150

Bulk Insertions . . . 151

Cleaning Up after Insertions . . .  151

Bulk Replacements . . .152

Controlling the Text Being Displayed . . .153

Formatting Code . . . 154

Smart Formatting . . . 154

Controlled Indenting . . . 154

Inserting and Reading Text . . . 155

Chapter 5 Supporting Project-Specific Features . . . 157

Introducing the VSLangProj Libraries . . . 158

Working with Projects . . . 160

Reference Objects . . .170

Managing a “Projectless” Website . . . 170

Working with the Website . . .171

Adding New Components . . .172

Working with Website Items . . . . 179

Project-Specific Features . . .. . . 180

Chapter 6 Generating Language-Neutral Code . . . 181

A Comprehensive Example . . . 182

The Code to Be Generated . . . 183

Using Variables, Data Types, and Literals . . . 184

Creating Namespaces and Classes . . .185

Adding Methods with Parameters . . . 186

Adding Statements to Methods . . . 187

Generating Code . . . 188

Declarations . . . 189

Local Scalar Variables . . . 190

Arrays . . . 193

Delegates . . . 195

Defining Classes . . . 197

Inheritance and Interfaces . . .198

Generics and Partial Classes . . . 199

Class Members . . . 200

Fields . . . 200

Methods . . . 201

Parameters . . . 205

Events . . . 206

Constructors . . . 211

Entry Points . . . 213

Properties . . . 214

Creating an Indexer . . . 216

Statements and Expressions . . . 216

Expressions . . . 217

Statements . . . 224

Code Structures . . . 228

If...Then . . . 228

For Loops . . . 229

Try...Catch . . . 232

When All Else Fails: Code Snippets . . . 235

Snippet Expressions and Statements . . .236

Compile Units . . . 237

Other Code Features . . . 238

Generating Valid Names . . . 238

Adding Comments . . . 239

Adding Custom Attributes . . . 240

Using Directives to Organize Code into Regions . . . 241

UserData (Option Strict and Option Compare) . . . 242

Code Providers . . . 243

Generating Code . . . 243

Generating Partial Code . . . 246

Compiling Code . . . 246

Generating Code . . . 247

Chapter 7 Generating Code from Templates with T4 . . . 249

T4 in Visual Studio . . . 251

T4 Code-Generation Strategies . . . 252

Options for Extending T4 . . . 253

The T4 Process . . . 253

Creating a T4 Template . . . 254

Escape Characters . . . 257

Directives . . . 258

Adding Helper Methods . . . 261

Generating Errors and Warnings . . . 263

Review . . . 264

Accessing the Generated Code . . .  264

Controlling Code Indentation . . .  264

Extending T4 . . . 265

Creating a New Base Class . . .  265

Defining Custom Directives . . .  267

Invoking Templates from Code . . .  270

Configuring the Project . . . 271

Invoking the Template Using the Visual Studio Host . . . 272

Invoking the Template with a Custom Host . . . 273

Defining a Custom Host . . .274

Adding Custom Methods to the Host . . .280

Passing Parameters to a Template . . . 281

Supporting Custom Directives . . . 282

Leveraging Templates . . .283

Chapter 8 Other Tools: Templates, Attributes, and Custom Tools . . . 285

Item Templates . . . 286

Using the Wizard . . . 287

Template Components . . . 290

Modifying/Creating a Template Control File . . . 293

Attributes . . . 305

Introducing Attributes . . . 306

Creating a Custom Attribute . . . 308

Processing Attributes with Reflection . . . 311

Documenting with Attributes . . . 315

Generating Code from Custom File Formats . . . 315

Setting Up the Project . . . 316

Integrating Custom Tools . . . 323

Reviewing the Tools . . . 329

PART II: CASE STUDIES . . . 331

Chapter 9 Case Study: Generating a Connection String Manager . . . 333

Defining the Problem . . . 334

A Model Solution . . . 335

Supporting Customization . . . 337

Setting Up the Add-In . . . 337

Defining the Add-In . . . 337

Creating the Menu . . . 338

Calling the Solution . . . 342

Creating the Code Generator . . . 343

Finding the Project . . . 344

Does Anything Need to be Done? . . . 345

Segregating Generated Code . . . 346

Adding the Template . . . 349

Customizing the Template . . . 350

Fixing the Namespace . . . 352

Modifying the Class . . . 353

Adding a Reference . . . 355

Generating Code . . . 355

Reading Input . . . 356

Processing the Configuration File . . . 357

Adding Property Code . . . 358

Notifying the Developer . . . 359

Defining the Output Utility . . . 359

Handling the Task List . . . 360

Using the Output Method . . . 361

Supporting Customization . . . 362

Customizable Code . . . 362

Accepting Input . . . 363

Defining the Options Dialog . . . 363

Saving Developer Choices . . . 364

Option Manager Class . . . 365

Creating the User Control . . . 366

Implementing the User Control Interface . . . 367

Integrating with the Add-In . . . 369

Generating Custom Code . . . 370

Adding Custom Code . . . 371

Tying Generation to Events . . . 371

Integrating with Builds . . . 372

Integrating with Documents . . . 373

Generating a Simple Class . . . 375

Chapter 10 Case Study: Generating Validation Code . . . 377

Defining the Problem . . . 378

The Dedicated Code Solution . . . 378

The Generalized Code Solution . . . 380

The Generated Code Solution . . . 380

Creating the Validator . . . 382

The EventArgs Parameter . . . 386

Creating Other Code-Generated Validators . . . 387

Adding the Validator to the Toolbox . . .387

Starting the Code-Generation Project . . . 388

Wiring Up the Add-In . . .389

Creating a Submenu . . . 390

Handling Multiple Documents in Events . . . 392

Starting the Generation Utility . . . 395

Responding to the Add-In . . .395

Defining a Template . . . 397

Generating Code . . . 400

Starting the Process . . . 400

Managing the Code-Generation Process . . . 402

Utility Methods . . . 404

Processing the Validators . . . 407

Inserting Code . . . 410

Specifying Code with the CodeDom . . . 411

Generating the Lookup Methods . . . 412

Generating Code in the Target Language . . . 421

Supporting “Projectless” Websites . . . 421

Adding Code . . . 422

Handling Errors . . . 425

Building a Complete Code-Generation Solution . . . 426

Chapter 11 Case Study: Generating Data-Conversion Code . . . 427

Defining the Problem . . . 428

Creating the Designer . . .432

Building the Designer . . . 435

Adding Items to Your Designer . . . 439

Adding Domain Properties . . . 440

Adding an Enumerated Data Type . . . 441

Adding Relationships to Support Connections . . . 441

Adding Graphical Items . . . 442

Adding Toolbox Items . . . 446

Validation, Generation, and Test . . . 447

Enhancing Model Validation . . .450

Enabling Validation . . . 450

Adding Validation Code . . . 452

Other Options . . . 454

Generating Code . . . 454

Configuring the Template . . . 455

Distributing Your Designer . . . 458

Converting the Template to a Custom Tool: Visual Studio 2005/2008 . . .459

Preloading the Custom Tool Property . . .462

Create a Deployment Project: Visual Studio 2005/2008 . . . 464

Deploying: VS2010 . . .465

Visual Studio 2010 Additions . . .  465

Capturing Inputs . . . 466

PART III: APPENDIXES . . . 467

Appendix A Generating Menu Names . . .468

Appendix B Options Dialog Categories, Subcategories, and Properties . . . 469

Appendix C A Code-Generation Add-In . . . 470

Integrating Code-Generation Classes . . . 470

Adding the Submenu Button . . . 471

Responding to Events . . . 475

Responding to the Menu Button . . . 479

An Extensible Solution . . . 479

Appendix D Distributing Code-Generation Solutions . . . 481

Creating the .vscontent File . . . 481

Adding Add-Ins . . . 482

Adding Templates . . . 482

Adding a Toolbox Control . . .484

Adding Files . . . 484

A Complete Example . . .485

Installing the Solution . . .486

Index . . . 487



About the Author :

Peter Vogel is a Principal in PH & V Information Services, which specializes in .NET development. He has built systems for Exxon, Bayer AG, Volvo, and the Canadian Imperial Bank of Commerce, and wrote the ASP.NET 1.0, 2.0, 3.5, and 4.0 courses for Learning Tree International. Vogel has been honored as a Microsoft MVP, presents frequently at leading .NET conferences, and is the ASP.NET columnist for Visual Studio magazine. He is author of Visual Basic 6.0 Object and Component Handbook.


Best Sellers


Product Details
  • ISBN-13: 9780321617606
  • Publisher: Pearson Education (US)
  • Publisher Imprint: Addison-Wesley Educational Publishers Inc
  • Language: English
  • Sub Title: Covering Visual Studio 2005, 2008, and 2010
  • ISBN-10: 0321617606
  • Publisher Date: 16 Apr 2010
  • Binding: Digital download
  • No of Pages: 526
  • Weight: 1 gr


Similar Products

Add Photo
Add Photo

Customer Reviews

REVIEWS      0     
Click Here To Be The First to Review this Product
Practical Code Generation in .NET: Covering Visual Studio 2005, 2008, and 2010
Pearson Education (US) -
Practical Code Generation in .NET: Covering Visual Studio 2005, 2008, and 2010
Writing guidlines
We want to publish your review, so please:
  • keep your review on the product. Review's that defame author's character will be rejected.
  • Keep your review focused on the product.
  • Avoid writing about customer service. contact us instead if you have issue requiring immediate attention.
  • Refrain from mentioning competitors or the specific price you paid for the product.
  • Do not include any personally identifiable information, such as full names.

Practical Code Generation in .NET: Covering Visual Studio 2005, 2008, and 2010

Required fields are marked with *

Review Title*
Review
    Add Photo Add up to 6 photos
    Would you recommend this product to a friend?
    Tag this Book Read more
    Does your review contain spoilers?
    What type of reader best describes you?
    I agree to the terms & conditions
    You may receive emails regarding this submission. Any emails will include the ability to opt-out of future communications.

    CUSTOMER RATINGS AND REVIEWS AND QUESTIONS AND ANSWERS TERMS OF USE

    These Terms of Use govern your conduct associated with the Customer Ratings and Reviews and/or Questions and Answers service offered by Bookswagon (the "CRR Service").


    By submitting any content to Bookswagon, you guarantee that:
    • You are the sole author and owner of the intellectual property rights in the content;
    • All "moral rights" that you may have in such content have been voluntarily waived by you;
    • All content that you post is accurate;
    • You are at least 13 years old;
    • Use of the content you supply does not violate these Terms of Use and will not cause injury to any person or entity.
    You further agree that you may not submit any content:
    • That is known by you to be false, inaccurate or misleading;
    • That infringes any third party's copyright, patent, trademark, trade secret or other proprietary rights or rights of publicity or privacy;
    • That violates any law, statute, ordinance or regulation (including, but not limited to, those governing, consumer protection, unfair competition, anti-discrimination or false advertising);
    • That is, or may reasonably be considered to be, defamatory, libelous, hateful, racially or religiously biased or offensive, unlawfully threatening or unlawfully harassing to any individual, partnership or corporation;
    • For which you were compensated or granted any consideration by any unapproved third party;
    • That includes any information that references other websites, addresses, email addresses, contact information or phone numbers;
    • That contains any computer viruses, worms or other potentially damaging computer programs or files.
    You agree to indemnify and hold Bookswagon (and its officers, directors, agents, subsidiaries, joint ventures, employees and third-party service providers, including but not limited to Bazaarvoice, Inc.), harmless from all claims, demands, and damages (actual and consequential) of every kind and nature, known and unknown including reasonable attorneys' fees, arising out of a breach of your representations and warranties set forth above, or your violation of any law or the rights of a third party.


    For any content that you submit, you grant Bookswagon a perpetual, irrevocable, royalty-free, transferable right and license to use, copy, modify, delete in its entirety, adapt, publish, translate, create derivative works from and/or sell, transfer, and/or distribute such content and/or incorporate such content into any form, medium or technology throughout the world without compensation to you. Additionally,  Bookswagon may transfer or share any personal information that you submit with its third-party service providers, including but not limited to Bazaarvoice, Inc. in accordance with  Privacy Policy


    All content that you submit may be used at Bookswagon's sole discretion. Bookswagon reserves the right to change, condense, withhold publication, remove or delete any content on Bookswagon's website that Bookswagon deems, in its sole discretion, to violate the content guidelines or any other provision of these Terms of Use.  Bookswagon does not guarantee that you will have any recourse through Bookswagon to edit or delete any content you have submitted. Ratings and written comments are generally posted within two to four business days. However, Bookswagon reserves the right to remove or to refuse to post any submission to the extent authorized by law. You acknowledge that you, not Bookswagon, are responsible for the contents of your submission. None of the content that you submit shall be subject to any obligation of confidence on the part of Bookswagon, its agents, subsidiaries, affiliates, partners or third party service providers (including but not limited to Bazaarvoice, Inc.)and their respective directors, officers and employees.

    Accept

    Fresh on the Shelf


    Inspired by your browsing history


    Your review has been submitted!

    You've already reviewed this product!
    Your IP: 216.73.216.43 IN