Brad Abrams and Krzysztof Cwalina have finished writing "Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries".
I was lucky enough to be one of the technical reviewers for this manuscript, so I've already read it. From that standpoint, I can say it is a one of those must-have books for your .NET library. You'll learn rules and guidelines for Type Design, Member design, designing for future enhancements, error handling and exceptions, and the most common design patterns used in the .NET framework.
You can read this book with two different hats. One the one hand, it will help you understand the guidelines followed by the .NET framework team. This will help you use the framework more efficiently. You'll know much more about why the framework is organized the way it is, and why the framework works the way it does. In addition, it will give you a much deeper understanding about how to create software libraries that are easier for others to use.
Most of all, this book is based on experience designing reusable frameworks: Brad and Kryzystof have been instrumental in three releases of the CLR and the base libraries (1.0, 1.1, and the upcoming 2.0 release). From that standpoint, they know what works, and where they have made mis-steps.
This book is divided into six sections. Most important is “The Big Picture”. Every developer (whether you use .NET, or another platform) should understand this area.
Next is a set of topics on Windows Security Context, and Access Control. You will refer to this section often if you are doing .NET development.
The last two sections are specific to certain applications or components: COM+, Network Services. Finally, the ever-popular miscellaneous section covers those topics that defy classification.
Brown’s treatment of the subject is broad. You should not be under any misconception that this book will make you an expert on security (either Windows, or .NET). But, it will help you remember the issues you need to remember in order to produce software that does not increase the attack surface of your customer’s machines. That’s the strength of this book. You will not need every recommendation for every application you develop, but you will need to remind yourself of these issues, and make sure you have thought about those issues.
The only weakness in Brown’s book is the low-level organization, and the corresponding Item titles. Too many of the titles describe the question that the item answers. (For example, “How to Create a Windows Principal?”) I’d rather see the titles organized around the tasks I need to perform and consider. Why do I need to create a windows principal? When do I need one? I’d like the Item titles to help me know when I need to dive deeper into a given topic.
As I said at the top of this review, “The .NET Developer’s Guide to Windows Security” should be required reading for every .NET developer. It’s already earned a place of prominence on my bookshelf. I browse the table of contents repeatedly during development. It reminds me of the issues I need to consider when I make important design decisions.
A colleague of mine had some fairly detailed questions about graphics programming in .NET. My favorite refernce is Graphics Programming with GDI+, by Mahesh Chand.
It's well writen, and covers a wealth of GDI+ topics. It assumes some rudimentary knowledge of graphics program techniques, but Mahesh does take you from the basics of lines and similar figures all the way up to complex 2D concepts such as gradients, color blending, alpha blending, transforms and transform composition.
It is much more of a reference book than a tutorial. I did not read this cover to cover, but over time, asI've needed the topics he covers, I've read all the content.
All of these projects are Open Source (using the Creative Commons license for content, and the MIT license for code). If you would like to contribute, visit our GitHub Repository. Or, if you have questions, comments, or ideas for improvement, please create an issue for us.