After reading the first few chapters of Programming .NET Components, by Juval Löwy, I had hoped that the book would primarily give specific advise about how to best do “Component-Oriented Programming” with .NET. The chapter on interface-based programming was a good reminder that I shouldn't abandon all of the component principles I learned when using COM, but most of the book consists of descriptions of the various features of .NET.
The book does examine some of the more complex aspects of .NET, including versioning, multithreading, and serialization. I skimmed the long chapters on remoting and interception; I understand the basic concepts, and will return when I find a need for those technologies. The chapter on security was especially welcome; it cleared up many of the questions I had about code access security in .NET, though I could still use more information and “best practices” in particular. Speaking of which, I unfortunately noticed a few violations of modern “best practices” for deterministic finalization, asynchronous calls, and synchronization, but that just goes to show that you need to keep up with the latest articles as well as reading the good books.
In summary, though I'd like to have read more about how to write great components in .NET, much of the information in the book was valuable, and my knowledge of the .NET framework is broader having read it.