Part 1. Toolset Design Fundamentals 1. What is a Tool? What is a Toolset? 2. Why Use C#? Why Use .NET? 3. Examples of Commercial Toolsets 4. Everything Starts with a Plan 5. Development Phases of a Tool 6. Measurement Metrics for Tool Quality 7. Fundamentals of User Interface Design 8. Distributed Componential Architecture Design 9. Solutions to Bridge Domain Gaps 10. Unit Testing with NUnit 11. Code Documentation with NDoc and XML 12. Microsoft Coding Conventions 13. Enforcing Coding Policies with FxCop 14. Best Practices for Robust Exception Handling Part 2. Techniques for Arbitrary Tools 15. Compressing Data to Reduce Memory Footprint 16. Protecting Sensitive Data with Encryption 17. Generic Batch File Processing Framework 18. Ensuring a Single Instance of an Application 19. Implementing a Checksum to Protect Data Integrity 20. Using the Property Grid Control with Late Binding 21. Adding Printing Support for Arbitrary Data 22. Flexible Command Line Tokenizer 23. Layering WinForms on Console Applications 24. Overview of Database Access with ADO.NET Part 3. Techniques for Graphical Tools 25. Using Direct3D Swap Chains with MDI Applications 26. Constructing an Aesthetic Texture Browser Control 27. Converting from Screen Space to World Space 28. Asynchronous Input Device Polling Part 4. Techniques for Network Tools 29. Distributed Computing using .NET Remoting 30. Downloading Network Files Asynchronously Part 5. Techniques for Legacy Interoperability 31. Exchanging Data between Applications 32. Interacting with the Clipboard 33. Using .NET Assemblies as COM Objects 34. Building a Managed Wrapper with C++/CLI 35. Managing Items in the Recent Documents List Part 6. Techniques to Improve Performance 36. Playing Nice with the Garbage Collector 37. Using Unsafe Code and Pointers 38. Investigating Managed Code Performance 39. Responsive UI during Intensive Processing Part 7. Techniques to Enhance Usability 40. Designing an Extensible Plugin-Based Architecture 41. Persisting Application Settings to Isolated Storage 42. Desiging a Reusable and Versatile Loading Screen 43. Writing Context Menu Shell Extensions Part 8. Techniques to Increase Productivity 44. Automating Workflow using Job Scheduling 45. MVC Object Model Automation with CodeDom Part 9. Techniques for Deployment and Support 46. Deployment and Versioning with ClickOnce 47. Testing for the Availability of the .NET Framework 48. Building and Customizing an MSI Installer 49. Determining Binary File Differences
About the Author
Graham Wihlidal is a consultant at CGI Group, specializing in Microsoft technologies at an enterprise level. Prior to his current employment, he was the lead developer of a distributed workflow automation framework using C#.NET, SQL Server and Windows SharePoint Services. He has several years of experience as a freelance developer and consultant, designing and implementing business software solutions with C#, C++ and Java for a variety of sectors. Aside from normal development work, he also has experience as a configuration manager for Rational ClearCase at an enterprise level. Graham graduated Computer Systems Technology at the head of his class while attending the Northern Alberta Institute of Technology, and is also a Microsoft Certified Solution Developer and an Early Adopter for .NET 2.0. Aside from his professional life, Graham has been an active member in the game development community for the past seven years, with an undying passion to both play and develop computer games. In his spare time he is constructing a high-performance 3D engine and accompanying toolset.